7

我正在编写请求规范……我使用 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 ==)

据我了解,实际上我的模态窗口不存在。

对此的任何帮助将不胜感激。

谢谢你。

4

2 回答 2

1

Capybara 默认使用 :rack_test 驱动程序。您能否确认您使用的是 Selenium WebDriver 或其他实际上可以打开模态框的驱动程序?

于 2012-03-27T10:06:49.930 回答
1

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

于 2012-06-20T09:41:05.303 回答