【问题标题】:(Capybara) access modal window(Capybara) 访问模态窗口
【发布时间】:2012-04-05 23:57:09
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: javascript capybara modal-window


    【解决方案1】:

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

    【讨论】:

    • 我正在使用 Selenium! Capybara.default_driver = :selenium
    • 好的,你的帖子中没有提到这个。由于我没有发现任何问题,因此我会确保您确实在测试套件中调用了该弹出窗口(通过单击某些内容等,我不知道业务逻辑)。您也可以在“调用弹出”操作之后放置一些 sleep 10,仅用于测试目的。
    • 我确实在我的规范中添加了一些 sleep 操作,并且我已经在很多方面对其进行了测试......而且,正如你所说,我也没有发现任何问题......但仍然,我得到指定的错误,这意味着该模式窗口的句柄不存在,因此该窗口不存在。
    • 我对 Selenium 也有同样的看法——如果我放了一个断点,我可以看到模式没有弹出——你能解决它吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2020-05-14
      相关资源
      最近更新 更多