【问题标题】:Unable to start browser from Jenkins CI无法从 Jenkins CI 启动浏览器
【发布时间】:2016-08-23 15:26:41
【问题描述】:

在从 Jenkins 构建后通过调用 rake 任务触发黄瓜测试时,我无法在 CI 服务器(在我的情况下为 Linux 上的本地主机)上启动浏览器。 Jenkins 控制台日志如下。我很确定一切都设置正确,因为我可以通过命令行在服务器上成功运行它。

01:26:43 [cucumber] $ /usr/local/rvm/scripts/gems/ruby-2.3.0/bin/rake schedule_win_job:features --trace

01:26:43 ** Invoke schedule_win_job:features (first_time)

01:26:43 ** Execute schedule_win_job:features

01:26:43 /usr/local/rvm/scripts/rubies/ruby-2.3.0/bin/ruby -S bundle exec cucumber --tag @schedule_job --profile dev

**01:27:45 unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError)**

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/firefox/launcher.rb:90:in `connect_until_stable'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/firefox/launcher.rb:55:in `block in launch'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/common/socket_lock.rb:43:in `locked'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/firefox/launcher.rb:51:in `launch'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/firefox/bridge.rb:43:in `initialize'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/common/driver.rb:53:in `new'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver/common/driver.rb:53:in `for'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/selenium-webdriver-2.53.0/lib/selenium/webdriver.rb:84:in `for'

01:27:45 /usr/local/rvm/scripts/gems/ruby-2.3.0/gems/watir-webdriver-0.9.1/lib/watir-webdriver/browser.rb:46:in `initialize'

【问题讨论】:

  • 与今天早些时候的stackoverflow.com/questions/36917134/… 相同的答案 - 确保您的路径上有 Firefox 45。
  • 对不起,我检查了你提到的所有要求,但问题仍然存在。如果我将浏览器更改为 Chrome,我会遇到StackOverflow question 此处报告的新问题,并且那里的解决方案也不适用于我。
  • 顺便说一下,如果我尝试通过 Jenkins 使用裸 shell 命令启动 Firefox,以下是我收到的错误消息。 [20:38:21] /usr/bin/firefox [20:38:21] Error: GDK_BACKEND does not match available displays

标签: selenium-webdriver jenkins continuous-integration cucumber watir-webdriver


【解决方案1】:

其他人遇到了类似的问题,解决方案看起来是确保您拥有稳定版本的 Capybara 和最新的 selenium webdriver

unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055)

如果此解决方案有帮助,请告诉我!

【讨论】:

  • 感谢您的回答。尽管那里的解决方案没有帮助,但它们为我提供了更接近根本原因的提示。安装 Jenkins 服务器后,会创建一个名为 jenkins 的服务帐户。这个账号好像没有权限打开一个显示。我将再次搜索以获得最终解决方案并在此处发布。
【解决方案2】:

事实证明,Jenkins 用户的帐户性质不允许它在 Jenkins 服务器中运行 GUI 测试。

Firefox 是一个 GUI 应用程序,它需要连接到 X 服务器以发送它的命令来绘制窗口等。通常 Jenkins 被设置为作为后台系统守护进程运行,它无法访问任何 X 服务器会话。

这是尝试使用 shell 命令 /usr/bin/firefox 在 Jenkins 构建中启动 firefox 时出现以下错误的原因。

No protocol specified

XDG_RUNTIME_DIR not set in the environment

Error: cannot open display: :0

因此一个可能的解决方案是使用 pkexec 命令以 root 权限触发测试(可以将 Jenkins 用户添加到 sudo 组,以便它可以成功运行命令,但出于安全考虑不推荐,我试过它没有用)。

要使用 pkexec 实现完全自动化,还需要一些其他设置,例如禁用身份验证提示。一旦我准备好逐步解决方案,我将更新更详细的答案。

【讨论】:

  • 当然我们可以使用Xvnc plugin,这要容易得多,正如here所记录的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 2014-03-11
  • 2023-03-10
相关资源
最近更新 更多