Zac*_*ght 6 javascript selenium ruby-on-rails capybara selenium-chromedriver
我正在使用Capybara,selenium-webdriver gem和chromedriver来驱动启用了JavaScript的测试。
问题是我们的构建中约有50%由于Net::ReadTimeout错误而失败。最初,这表现为“找不到元素”错误,但是当我将Capybara的默认最大等待时间提高到30秒后,我开始看到超时。
我检查了屏幕截图,该屏幕截图显示了超时发生时的画面,该画面停留在“成功登录”模式中,在使用Javascript函数location.reload()重新加载页面之前,我们简要介绍了该模式。
我已经在本地进行了测试,有时可以随机复制它。有时,它会以这种模式压缩,并且重新加载的速度如此之快,以至于您几乎看不到它,而有时它会永远挂起。
我认为这不是资产编译问题,因为该站点已经在该点加载,以便用户访问登录表单。
想知道是否有人以前见过这种情况并且知道解决方案。
具体代码:
visit login_path
page.within '#sign-in-pane__body' do
fill_in 'Email', with: user.email
click_button 'Submit'
end
expect(page).to have_content 'Enter Password'
page.within '#sign-in-pane__body' do
fill_in 'Password', with: user.password
click_button 'Submit'
end
expect(page).to have_text 'Home page landing text'
Run Code Online (Sandbox Code Playgroud)
挂断发生在click_button 'Submit'期望首页文本之间。
导致超时的逻辑流程是用户提交登录表单,我们等待服务器呈现.js.erb成功登录后触发JS事件的模板。当触发发生时,我们会显示一个模态说登录成功,然后执行location.reload()。
事实证明,这并不是location.reload()在JS中进行独占。有时只是访问页面而发生。
对我来说,解决方案是为硒驱动程序创建一个HTTP客户端并指定更长的超时时间:
Capybara.register_driver :chrome do |app|
client = Selenium::WebDriver::Remote::Http::Default.new
client.read_timeout = 120
Capybara::Selenium::Driver.new(app, {browser: :chrome, http_client: client})
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |