(Capybara)访问模态窗口

时间:2012-03-21 12:54:23

标签: javascript capybara modal-window

我正在写请求规格......我使用Capybara ......我遇到了一些模态窗口的问题。

我在测试中真正想要的是填写一个弹出模态窗口的表单。

使用来自Twitter(http://twitter.github.com/bootstrap/javascript.html#modals)的Bootstrap创建模态...并且它正在经历一组转换(但我不知道这是否与我将要说的相关)。

我尝试了一些我在网上找到的解决方法,例如:

A)在page.driver.browser.window_handles

的页面之间切换
page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)

B)使用wait_until确保模态加载

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 ==)

据我所知,实际上我的模态窗口不存在。

非常感谢任何有关这方面的帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

Capybara默认使用:rack_test驱动程序。您能否确认您正在使用Selenium WebDriver或其他可以打开模态盒的驱动程序?

答案 1 :(得分:1)

我没有使用Capybara,但你的问题与Bootstrap的模态对话框实际上是一个伪模态的事实有关,因为它实际上只是一个div元素和它背后的透明覆盖。例如,真正的模态对话框是使用window.confirm创建的对话框,可以使用示例代码查询。在您的情况下,您应该将模态div元素赋予id,并将其用作句柄以从Capybara查询它并等待其显示为“block”。虽然没有测试任何东西。