Selenium Webdriver Chromedriver 在无头模式下启动时超时

2023-12-26

我正在使用 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 专业版 64 位版本。

当运行使用 chromedriver 启动 Chrome 的 Jenkins 作业,然后尝试与其交互时,出现超时错误。当通过命令提示符窗口在我的桌面上执行相同操作时,它工作得很好。运行相同的 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

配置为运行 Windows Batch 命令的 Jenkins 作业:

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 再次工作有任何想法,那就太好了。


在会话 0 中以系统用户身份运行时,Chrome 38 不起作用。通常会发生这种情况,因为 Chrome 是由 Windows 服务启动的 - 在您的例子中,Jenkins 是作为服务运行的。这是一个已知的问题。请参阅硒问题 and here https://code.google.com/p/chromedriver/issues/detail?id=928.

两种解决方案:

  1. 将 Chrome 降级至低于 38 的版本。
  2. 下载并安装AlwaysUp http://www.coretechnologies.com/products/AlwaysUp/ and 将其配置为以默认系统用户以外的用户身份运行 Jenkins 服务 http://www.coretechnologies.com/products/AlwaysUp/AlwaysUp_FAQ.html#AvoidSession0

AlwaysUp 解决方案肯定有效,但许可成本很小,或者如果您不介意 Chrome 版本,您可以将其降级。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium Webdriver Chromedriver 在无头模式下启动时超时 的相关文章

随机推荐