2012-03-21 71 views
7

我正在寫請求規格...我使用水豚...並且我遇到了一些模式窗口的麻煩。(水豚)訪問模式窗口

我在測試中真正想要的是填寫一個窗體,彈出一個模態窗口。

該模式是使用Twitter的引導程序(http://twitter.github.com/bootstrap/javascript.html#modals)創建的...並且它正在經歷一組轉換(但我不知道這是否與我將要說的相關)。

我已經嘗試了一些解決方法我發現在網絡上,如:

A)使用wait_untilpage.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,但是你的問題與Bootstrap的模態對話框實際上是一個僞模態的事實有關,因爲它實際上只是一個div元素和一個透明覆蓋圖。例如,真正的模式對話框將使用window.confirm創建,可以使用示例代碼進行查詢。在你的情況下,你應該給模塊div元素id,並使用它作爲從Capybara查詢它的句柄,並等待,直到它的顯示是「阻止」。雖然沒有測試任何東西。

1

默認使用水豚使用:rack_test驅動程序。你能確認你正在使用Selenium WebDriver或其他驅動程序,其中打開modalbox實際上是可能的嗎?

+0

我正在使用硒! 'Capybara.default_driver =:硒' – adritha84 2012-03-28 07:37:58

+0

好的,你沒有在你的文章中提到過。由於我沒有看到任何錯誤,所以我會確保你確實在你的測試套件中調用了彈出窗口(通過點擊等等,我不知道業務邏輯)。此後,您可以在「調用彈出式」操作後進行一些睡眠10,僅用於測試目的。 – socjopata 2012-03-28 10:20:36

+0

我確實在我的規範中加入了一些「睡眠」操作,並且我用很多方式對它進行了測試......並且如您所說,我也沒有看到任何錯誤...但是仍然會出現指定的錯誤,意味着該模式窗口的句柄不存在,因此該窗口不存在。 – adritha84 2012-03-28 13:37:17