2012-03-21 70 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