ruby - 运行自动化测试时 Selenium Webdriver 连接超时
问题描述
在运行自动化测试时,我有时会收到 Selenium Webdriver 的超时错误(我认为这至少是问题所在)。我和我的团队最近都迁移到了 Macbooks(从 Windows 和 Ubunutu 机器的组合)并且都得到了这种行为。
在运行一套测试时,我将(似乎是随机的)在控制台中得到以下错误输出:
Errno::ETIMEDOUT: Failed to open TCP connection to 127.0.0.1:9515 (Operation timed out - connect(2) for "127.0.0.1" port 9515)
这不会始终如一地发生,有时我会运行一个包并且没有任何此类错误,有时我会多次出现。
这是注册驱动程序的代码(以防这里有任何问题指向问题所在):
Capybara.register_driver :selenium do |app|
opts = Selenium::WebDriver::Chrome::Options.new
opts.add_argument '--start-maximized'
opts.add_argument 'disable-infobars'
opts.add_argument '--disable-notifications'
opts.add_preference(:safebrowsing,
enabled: true)
opts.add_preference(:browser, set_download_behavior: { behavior: 'allow' })
Capybara::Selenium::Driver.new(app, browser: :chrome, options: opts)
end
我使用的 gem 是 Capybara (3.11.0)、Cucumber (3.1.0) 和 Selenium-webdriver (3.141.0)。我通过 HomeBrew 安装了 ChromeDriver(73.0.3683.68)
有没有人遇到过这个问题并找出原因是什么?
解决方案
端口 9515 是运行 chromedriver 的默认端口。如果您碰巧使用的是 Chrome/chromedriver v74,请尝试回滚到 73 或转发到 75 - 据报道 74 存在随机挂起的问题。
另一个可能的解决方案是升级到 Capybara >= 3.16.0,它默认使用与 chromedriver 的持久连接。这将意味着更少的连接打开/关闭,并且 chromedriver 在连接建立期间挂起的机会更少。
推荐阅读
- polymer-3.x - 聚合物 3 - 缺少装饰器
- android - Android Logcat 奇怪的行为
- ruby-on-rails - 在活动管理员中禁用特定模型的缓存
- node.js - 通过基于嵌套和子嵌套文档的过滤器选择一个字段,例如使用 mongo 的 Post->Comment->Likes
- bash - 组合多个 bash 脚本
- php - 根据列值获取正确的行
- .net-core - EF Core 3.0 附加文件映射和更新
- javascript - 如何在一周内获得第二天
- r - `format` 对 UTF-8 字符串有什么作用?
- php - Yii2 无法将本地时间转换为 GMT 时区