【问题标题】:Selenium Webdriver Chromedriver timeout on start in headless modeSelenium Webdriver Chromedriver 在无头模式下启动超时
【发布时间】:2014-12-31 11:18:14
【问题描述】:

我正在使用 Selenium Webdriver,带有 Ruby 32 位 1.9.3、Chromedriver v2.9.248315、Chrome 38.0.2125.111 m 和 Jenkins 1.588 的本地实例

Gems:cucumber (1.3.17)、selenium-webdriver (2.43.0)、watir-webdriver (0.6.11)(如果您认为有必要,可以提供所有其他的列表)

Windows 7 Professional 64 位版本。

在运行 Jenkins 作业时,该作业使用 chromedriver 启动 Chrome,然后尝试与之交互,我收到超时错误。通过命令提示符窗口在我的桌面上执行相同操作时,它可以完美运行。运行相同的 Jenkins 作业,启动 Firefox 而不是 Chrome,它运行良好。

简单示例(C:\test.rb):

require 'watir-webdriver'
require 'selenium-webdriver'
client = Selenium::WebDriver::Remote::Http::Default.new
$browser = Watir::Browser.new :chrome, :http_client => client
$browser.driver.manage.window.maximize
$browser.close

Jenkins 作业配置为运行 Windows 批处理命令:

cd \
ruby test.rb

我运行作业时的输出:

Started by user anonymous
Building in workspace C:\Program Files (x86)\Jenkins\jobs\test chromedriver\workspace
[workspace] $ cmd /c call C:\Windows\TEMP\hudson3963234995624341455.bat

C:\Program Files (x86)\Jenkins\jobs\test chromedriver\workspace>cd \ 

C:\>ruby test.rb 
C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill': Timeout::Error (Timeout::Error)
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill'
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2563:in `read_status_line'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2552:in `read_new'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1320:in `block in transport_request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1317:in `catch'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1317:in `transport_request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1294:in `request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1287:in `block in request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:746:in `start'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1285:in `request'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/default.rb:83:in `response_for'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/default.rb:39:in `request'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:638:in `raw_execute'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:616:in `execute'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:236:in `maximizeWindow'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/common/window.rb:98:in `maximize'
    from test.rb:5:in `<main>'

C:\>exit 1 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

我尝试在 Jenkins 服务中启用“允许服务与桌面交互”,然后观看窗口(在更复杂的场景中)并打开 Chrome 窗口,但什么也不做。我最初遇到了“$browser.cookies.clear”的问题,在注释掉该行之后,我现在遇到了与 $browser.driver.manage.window.maximize 行相同的问题

我正在运行复杂的黄瓜场景,使用 Chromedriver 没有问题。然后我重建了我的电脑,在安装了 Jenkins、Ruby、Chromedriver(将两者都添加到 PATH)并将旧作业复制到我的新 Jenkins 安装中后,我遇到了上述问题。然后我创建了上面的简单示例,对其进行了测试并创建了这篇文章。

如果有人对我如何让 Chromedriver 再次工作有任何想法,那就太好了。

【问题讨论】:

    标签: ruby google-chrome selenium jenkins selenium-chromedriver


    【解决方案1】:

    Chrome 38 在会话 0 中以系统用户身份运行时不起作用。通常这是因为 Chrome 是由 Windows 服务启动的 - 在您的情况下,Jenkins 作为服务运行。这是一个已知的问题。请参阅 Selenium 问题 herehere

    两种解决方案:

    1. 将 Chrome 降级到低于 38 的版本。
    2. 下载并安装AlwaysUpconfigure it to run your Jenkins service as a user other than default system user

    AlwaysUp 解决方案确实有效,但许可成本较低,或者如果您不关心 Chrome 版本,您可以将其降级。

    【讨论】:

    • 我刚刚尝试过 3. 更改了 Jenkins 服务条目中的用户,我在脚本中添加了 whoami 以确认它现在正在使用不同的用户(它是)。我仍然得到完全相同的错误。我有 Chrome 38,所以我会尝试降级 Chrome 版本
    • 更新了答案以删除不起作用的选项
    • 我似乎找不到降级 Chrome 的方法,我能找到的所有看起来合法的下载都将我重定向到 Google Chrome 下载页面,这迫使我下载最新版本的 Chrome。但是,看起来他们会在 Chrome 39 中修复它code.google.com/p/chromium/issues/detail?id=422218
    【解决方案2】:

    Chrome 无法在 Windows 中以无头模式运行。 您需要为此使用 HTMLdriver。

    如果您急需它,您需要尝试设置一个 vnc 服务器并在其中运行。 http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/

    【讨论】:

    • 我不知道“无头模式”是否适合我正在尝试做的事情,但它确实有效,它在重建之前在我的机器上有效,它适用于另一个服务器和另一个人的机器上。 Jenkins 在“虚拟桌面”上启动了一个 Chrome 实例,然后应该运行测试,但它不在我的机器上。
    【解决方案3】:

    SDET 的回答帮助了我(赞成),会话 0 是我的问题,但您不需要 AlwaysUp,您可以通过以下方式从一些启动脚本启动 jenkins slave:javaws http://&lt;jenkins-master&gt;/computer/&lt;node-name&gt;/slave-agent.jnlp

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 2019-09-07
      • 2022-12-18
      • 2020-03-13
      • 2018-01-19
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多