无法使用capybara-webkit

时间:2016-03-17 18:42:34

标签: ruby-on-rails rspec capybara rspec-rails capybara-webkit

我的javascript功能规格与selenium一起工作正常,但我想因为多种原因(CI,而不是弹出浏览器窗口等)切换到capybara-webkit。

我试图从selenium切换,但有些东西阻止我的代码正常工作。我有以下帮助:

def capybara_login(user)
  visit login_path
  fill_in "email", with: user.email
  fill_in "password", with: user.password
  click_button "Log in"
end

这是我正在输出的输入字段:

<input type="email" name="email" id="email" value="" class="form-control" placeholder="you@domain.com" autocomplete="off">

我测试过user.email不是nil。出于某种原因,当我使用capybara-webkit时,这会失败并且没有任何内容被填充(我通过执行save_and_open_page进行检查)。但是,如果我使用常规水豚(非js)或selenium作为js,此代码可以正常工作。

我错过了什么吗?关于什么可能阻止capybara webkit填补这些领域的任何想法?

编辑:谢谢汤姆帮忙。因此保存和打开页面不会在这些字段中显示任何输入。

我能够使用save_and_open_screenshot看到该页面实际上只是卡在登录屏幕上的加载图像上。如果我做了睡眠(1)&#34;它登录就好了。

想知道人们用什么策略来处理这个...等到页面加载继续?什么是没有Capybara默认执行此操作的原因?或者我做错了吗?

2 个答案:

答案 0 :(得分:1)

Capybara无法知道页面何时“完全”加载,因为许多页面将根据需要异步加载,动态加载等等。事实上Capybara向您展示了您的页面可用性问题,因为用户可以在技术上与在它们实际可用之前的元素 - 在这种情况下,Capybara可能比任何用户都快,但仍然......因此,您需要确定您在页面上使用的小部件以及它们所做的更改 - 例如,当一个库完成处理页面时,在body元素上设置一个类,输入字段是否在增强时添加了类/属性等等。一旦你确定你可以告诉Capybara做某事像

expect(page).to have_selector('body.class_added_when_ready')

确保页面完全可以互动

答案 1 :(得分:0)

这完全是一个侥幸,我的一些javascript运行。在某些时候,我认为在提交表格之前允许一个300毫秒的延迟让ladda装载机完全动画是一个好主意。这导致水豚窒息。我能够将此问题与特定代码隔离开来。

谢谢你的帮助,汤姆!