gpt4 book ai didi

javascript - Capybara/Selenium 在 location.reload() 上随机获取一个 Net::ReadTimeout

转载 作者:数据小太阳 更新时间:2023-10-29 05:21:31 30 4
gpt4 key购买 nike

我正在使用 Capybara、selenium-webdriver gem 和 chromedriver 来驱动我的启用 javascript 的测试。

问题是大约 50% 的构建由于 Net::ReadTimeout 错误而失败。起初这表现为“找不到元素”错误,但在我将 Capybara 的默认最长等待时间提高到 30 秒后,我开始看到超时。

我检查了超时发生时的屏幕截图,它停留在我们在使用 Javascript 函数 location.reload() 重新加载页面之前简要显示的“成功登录”模式.

我在本地运行了测试,有时可以重现,也是随机的。有时它会通过这个模态压缩并重新加载,速度快到你几乎看不到它,而其他时候它会永远挂起。

我不认为这是一个 Assets 编译问题,因为网站已经在那个时候加载以便用户访问登录表单。

想知道是否有人以前见过这个并且知道解决方案。

具体代码:

    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'

挂断发生在 click_button 'Submit' 和期待主页文本之间。

导致超时的逻辑流程是用户提交登录表单,我们等待服务器呈现一个 .js.erb 模板,该模板在成功登录后触发 JS 事件。当触发发生时,我们会显示一个模式,说明登录成功,然后执行 location.reload()

最佳答案

事实证明,这并不是在 JS 中执行 location.reload() 所独有的。有时只是访问一个页面。

我的解决方案是为 selenium 驱动程序创建一个 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

关于javascript - Capybara/Selenium 在 location.reload() 上随机获取一个 Net::ReadTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508022/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com