使用webkit测试失败,使用selenium

时间:2013-10-29 06:03:27

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

  it 'allows a new user to sign up', :js do
    Capybara.current_driver = :selenium
    visit '/'
    click_link 'Sign up'
    old_count = User.all.size
    within '#userModal' do
      fill_in 'user[name]', with: 'some'
      fill_in 'user[email]', with: 'some@test.com'
      fill_in 'user[password]', with: '123123123'
      fill_in 'user[password_confirmation]', with: '123123123'
      d=find('input[type=submit]')
      p d
      p d.class
      d.click
      User.all.size.should == old_count + 1
    end
  end

这种方式有效,在删除驱动程序选择时失败。

我得到了硒:

Started POST "/users" for 127.0.0.1 at 2013-10-29 00:51:36 -0500
Processing by Users::RegistrationsController#create as HTML

虽然Webkit不会发生这种情况。

我的问题是如何找到这种行为的原因?

2 个答案:

答案 0 :(得分:1)

据我所知,我使用webkit并通过selenium传递时失败的大部分测试由于竞争条件而失败。他们与硒一起通过的原因是硒比webkit慢很多(最多慢5倍)。

但我可以通过在发送请求后添加wait_for_ajax来解决我的大部分测试问题,如下所述:Wait for Ajax with Capybara

希望这有帮助,即使你的问题已经有一年了

答案 1 :(得分:0)

我不知道是否相关,但我确实发现了seleniumwebkit之间的不一致。看起来有时候,在capybara-webkit中没有触发javascript验证,而selenium中我是否使用chromefirefox是可靠的。

以下是片段:

# reliably trigger validation in webkit for client_side_validations
if webkit?
  page.execute_script %Q{ $('form[data-validate]').validate() }
end

My gist explains the rest.

对于遇到验证和模态问题的人来说,我们发现当元素变得可见时我们需要初始化验证器。

$('#invite_modal').on 'shown.bs.modal', ->
  $(ClientSideValidations.selectors.forms).validate()