是否需要在Capybara中等待非DOM改变Javascript?

时间:2014-04-30 07:29:54

标签: ruby capybara capybara-webkit

根据我对Capybara的autowait功能的理解,它等待DOM改变,所以我猜它正在等待所有AJAX请求完成和/或主框架完成加载。

我有一个测试用例,我需要:

  • 填写字段(name_1
  • 点击保存按钮
  • 检查对象是否已正确保存

当我填写name_1字段时,我正在测试的应用程序中的一些JS会自动填写其他必填字段(特别是link_rewrite_1)。

问题是,当我检查实际填充的其他字段时,它不是! 我认为填充其他字段的JS在测试运行时没有时间完成,并且测试没有等待,因为没有AJAX调用待处理。

以下是相关的代码段:

fill_in 'name_1', :with => 'Bob' #some javascript should run and fill link_rewrite_1
find('#link-Seo').click
page.should_not have_field('link_rewrite_1', with: "")

用简单的英语填写name_1并期望link_rewrite_1不要为空。

我尝试在最后一次检查之前插入sleep 1,但它不会改变任何内容。由于睡眠将暂停整个ruby线程的执行,也许它只是冻结webkit而没有任何改变,我不知道。

我是否正确怀疑时间问题或是否可能还有其他事情发生?

1 个答案:

答案 0 :(得分:0)

进一步调试后,似乎是驱动程序问题。 Capybara-webkit只是没有正确执行我的JS。使用selenium-webdriver可以正常工作。