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

 懿子vae_742 发布于 2022-12-13 10:48

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

宝石:黄瓜(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 `
' 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没有任何问题.然后我重建了我的PC,安装了Jenkins,Ruby,Chromedriver(将两者都添加到PATH)并将旧作业复制到我的新Jenkins安装中后,我遇到了上述问题.然后我创建了上面的简单示例,测试了它并创建了这篇文章.

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

1 个回答
  • 在会话0中以系统用户身份运行时,Chrome 38不起作用.通常会发生这种情况,因为Chrome是由Windows服务启动的 - 在您的情况下,Jenkins是作为服务运行的.这是一个已知的问题.请参阅此处和此处的 Selenium问题.

    两种解决方案

      将Chrome降级到低于38的版本.

      下载并安装AlwaysUp并将其配置为以默认系统用户以外的用户身份运行Jenkins服务

    AlwaysUp解决方案绝对有效,但许可成本很低,或者如果您对Chrome版本不感兴趣,可以降级它.

    2022-12-13 10:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有