ruby - Unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) Selenium 3.6.0
问题描述
I am getting an Issue mentioned in subject, which is an intermittent one. However its making our CI CD pipelines unstable so thought to get some help from geeks available on this great platform.
Since this is an intermittent issue, I don't wish to upgrade my browser version, mentioning it as this comes mostly as the suggestion.
Here are details which may help you to identify the cause which I was not able to
What libraries I use -
gem 'selenium-webdriver', '3.6.0'
gem 'capybara', '2.18.0'
gem 'site_prism', '2.11'
What browser I use -
Firefox - 52.8.0
Which OS I use -
RHEL7
How do I configure my driver -
firefox_profile = Selenium::WebDriver::Firefox::Profile.new
firefox_profile['browser.download.dir'] = '/tmp'
firefox_profile['browser.download.folderList'] = 2
# content-type of file that will be downloaded
firefox_profile['browser.helperApps.neverAsk.saveToDisk'] = 'application/json;application/octet-stream;application/csv;text/csv;application/zip;application/x-zip;application/x-zip-compressed;application/x-rpm;application/pdf;application/xml;application/x-x509-ca-cert'
firefox_profile['timeout'] = 480000
firefox_profile['pdfjs.disabled'] = true
firefox_profile['resynchronization_timeout'] = 90
firefox_profile['resynchronize '] = true
firefox_profile['dom.max_chrome_script_run_time'] = 0
firefox_profile['dom.max_script_run_time'] = 0
Capybara.default_selector = :css
Capybara.ignore_hidden_elements = true
reset_wait_time
Capybara.run_server = false
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 240
if ENV['LOCAL'] == 'true'
STDOUT.puts 'starting local run'
Capybara.default_driver = :firefox
Capybara.register_driver :firefox do |app|
begin
STDOUT.puts 'Attempting to create browser instance'
Capybara::Selenium::Driver.new(app, browser: :firefox, profile: firefox_profile, marionette: false, http_client: client)
rescue => e
STDOUT.puts 'Error: Failed Attempting to create browser instance'
STDOUT.puts e
STDOUT.puts e.backtrace
end
end
begin
page.driver.browser.manage.window.resize_to(1200, 1200)
rescue => e
STDOUT.puts 'Error: Failed resize browser'
STDOUT.puts e
STDOUT.puts e.backtrace
end
end
Error Stack Trace -
starting local run
Attempting to create browser instance
Error: Failed resize browser
unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055)
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/firefox/launcher.rb:89:in `connect_until_stable'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/firefox/launcher.rb:53:in `block in launch'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/common/socket_lock.rb:41:in `locked'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/firefox/launcher.rb:49:in `launch'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/firefox/legacy/driver.rb:47:in `initialize'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/firefox/driver.rb:35:in `new'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/firefox/driver.rb:35:in `new'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/common/driver.rb:54:in `for'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver.rb:86:in `for'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/capybara-2.18.0/lib/capybara/selenium/driver.rb:23:in `browser'
/home/rubyuser/web-automation/cucumber/support/env.rb:63:in `block in <top (required)>'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/glue/invoke_in_world.rb:39:in `instance_exec'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/glue/invoke_in_world.rb:39:in `block in cucumber_instance_exec_in'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/glue/invoke_in_world.rb:54:in `cucumber_run_with_backtrace_filtering'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/glue/invoke_in_world.rb:27:in `cucumber_instance_exec_in'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/glue/hook.rb:21:in `invoke'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/runtime/before_hooks.rb:23:in `block (2 levels) in before_hooks'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/action.rb:24:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/step.rb:32:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:104:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:51:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:27:in `test_step'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/step.rb:17:in `describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:28:in `block (3 levels) in describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:27:in `each'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:27:in `block (2 levels) in describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/prepare_world.rb:22:in `block in test_case'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/around_hook.rb:17:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:104:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:51:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:34:in `around_hook'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/around_hook.rb:12:in `describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:120:in `block (2 levels) in compose_around_hooks'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:121:in `compose_around_hooks'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:26:in `block in describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/runner.rb:19:in `test_case'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:25:in `describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/prepare_world.rb:11:in `test_case'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:25:in `describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:57:in `test_case'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/retry.rb:18:in `test_case'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:25:in `describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/quit.rb:12:in `test_case'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/case.rb:25:in `describe_to'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/broadcast_test_run_started_event.rb:21:in `block in done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/broadcast_test_run_started_event.rb:20:in `map'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/filters/broadcast_test_run_started_event.rb:20:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:62:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:62:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:62:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:62:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:62:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/filters/locations_filter.rb:20:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/filter.rb:62:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/test/filters/tag_filter.rb:18:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/compiler.rb:24:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core/gherkin/parser.rb:39:in `done'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core.rb:32:in `parse'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-core-3.2.1/lib/cucumber/core.rb:21:in `compile'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/runtime.rb:75:in `run!'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/cli/main.rb:34:in `execute!'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cucumber-3.1.2/lib/cucumber/cli/main.rb:13:in `execute'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker.rb:96:in `execute_cucumber'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker.rb:41:in `block in start'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker.rb:35:in `fork'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker.rb:35:in `start'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker_queue.rb:116:in `start'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker_queue.rb:53:in `fill'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/worker_queue.rb:35:in `process'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/runner.rb:120:in `process'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/runner.rb:100:in `run'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/gems/cukeforker-2.1.1/lib/cukeforker/runner.rb:40:in `run'
/home/rubyuser/web-automation/cucumber/Rakefile:48:in `concurrent_test'
/home/rubyuser/web-automation/cucumber/Rakefile:16:in `block in <top (required)>'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `block in execute'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `each'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `execute'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/task.rb:195:in `block in invoke_with_call_chain'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/task.rb:188:in `invoke_with_call_chain'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/task.rb:181:in `invoke'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:160:in `invoke_task'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:116:in `each'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:116:in `block in top_level'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:125:in `run_with_threads'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:110:in `top_level'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:83:in `block in run'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:186:in `standard_exception_handling'
/home/rubyuser/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.0/lib/rake/application.rb:80:in `run'
/home/rubyuser/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.0/exe/rake:27:in `<top (required)>'
/home/rubyuser/.rvm/gems/ruby-2.5.1@global/bin/rake:23:in `load'
/home/rubyuser/.rvm/gems/ruby-2.5.1@global/bin/rake:23:in `<main>'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/bin/ruby_executable_hooks:24:in `eval'
/home/rubyuser/.rvm/gems/ruby-2.5.1@web-automation/bin/ruby_executable_hooks:24:in `<main>'
解决方案
我知道您说过您不想被告知更新您的浏览器版本,但解决方案确实会花时间更新您的所有测试 gem。你提到的每一个 gem 的版本都已经过时了,从那以后,所有提到的 gem 的稳定性和时间都得到了很多改进。
从技术上讲,您实际上正在运行的 Firefox 版本从未真正得到 Selenium 使用本机 Firefox 驱动程序的支持,因为那时 Selenium 已经开始专注于 WebDriver (geckodriver)。真正的解决方案是更新。
推荐阅读
- javascript - VueJS 应用程序中缺少静态文件
- laravel - 如何在 laravel 中访问 eloquent 的属性
- mysql - 滚动 12 个月的数据 - SQL
- dns - 从 www 到 root 的 DNS CNAME 仍然显示 www
- python - 在第 2 维通过相同的索引扩展列表
- ios - 如何使用 Fabric 的/Crashlytics 代码检查设备是否越狱?
- sql - Oracle SQL Query 使用各种曲线拟合技术执行线性回归
- c# - 写一个异步压缩的进度
- python - 在python中的pdf中添加基于关键字的书签
- python - Airflow 实验性 API - dag 运行从未入队