2012-03-21 10 views
7

私は要求仕様書を書いています...私はカピバラを使用しています...そして、いくつかのモーダルウィンドウに問題があります。(Capybara)アクセスモーダルウィンドウ

私が実際にテストで望むのは、モーダルウィンドウでポップアップするフォームを入力することです。

モーダルは、Twitterのブートストラップ(http://twitter.github.com/bootstrap/javascript.html#modals)で作成されています。これは一連のトランジションを経ています(ただし、これは私が言うことに関連しているかどうかはわかりません)。

私は同じように、私はウェブ上で発見いくつかの回避策を試してみました:

A)を確認してくださいモーダル負荷

ことを確認するために wait_untilを使用して) page.driver.browser.window_handles

page.driver.browser.switch_to.window(page.driver.browser.window_handles.last) 

Bでページを切り替えます

def modal_wrapper_id 
    '#modal-edit' 
end 

def modal_visible 
    wait_until { find(modal_wrapper_id).visible? } 
rescue Capybara::TimeoutError 
    flunk 'Expected modal to be visible.' 
end 

しかし、私はモーダルウィンドウがアクティブな瞬間にウィンドウハンドルの数をレンダリングすると考えました...

だから私はこのでした:

puts page.driver.browser.window_handles.length.should == 2 

をそして私はこれだ:事実上私のモーダルウィンドウが存在しない、私が理解から

Failure/Error: page.driver.browser.window_handles.length.should == 2 
      expected: 2 
      got: 1 (using ==) 

を。

この件に関するお手伝いをいただければ幸いです。

ありがとうございます。

答えて

1

私はCapybaraを使用しませんでしたが、あなたの問題は実際にはdiv要素とその背後に透明なオーバーレイがあるという点で、実際には擬似モーダルであるという事実と関係があります。真のモーダルダイアログは、例えば、window.confirmを使って作成されたダイアログで、サンプルコードを使って本当に照会することができます。あなたのケースでは、divのモーダルをidの要素に与え、それをハンドルとして使用して、Capybaraからクエリを呼び出し、その表示が "ブロック"になるのを待ちます。しかし何もテストしなかった。

1

デフォルトでは、capybaraはrack_testドライバを使用します。あなたがSelenium WebDriverやmo​​dalboxを実際に開くことができる他のドライバを使用していることを確認できますか?

+0

私はセレンを使用しています! 'Capybara.default_driver =:selenium' – adritha84

+0

あなたの投稿にこれを言及していません。私は何か間違ったことがないので、テストスイートでそのポップアップを実際に呼び出すことを確認します(何かをクリックするなどして、ビジネスロジックを知らない)。また、テスト目的のためだけに、ポップアップアクションを呼び出した後に、いくつかの睡眠を入れることができます。 – socjopata

+0

私は仕様にいくつかの「睡眠」アクションを入れて、さまざまな方法でテストしました...そしてあなたが言ったように、私は間違ったものは見当たりません...しかし、そのモーダルウィンドウへのハンドルが存在しないので、ウィンドウは存在しません。 – adritha84

関連する問題