gpt4 book ai didi

ruby - Selenium Webdriver Chromedriver 在 headless 模式下启动超时

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:49 26 4
gpt4 key购买 nike

我正在使用 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 批处理命令的 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 运行复杂的 cucumber 场景时没有遇到任何问题。然后我重建了我的 PC,在安装 Jenkins、Ruby、Chromedriver(将两者都添加到 PATH)并将旧作业复制到我的新 Jenkins 安装后,我遇到了上述问题。然后我创建了上面的简单示例,对其进行了测试并创建了这篇文章。

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

最佳答案

Chrome 38 在 session 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 版本,您可以将其降级。

关于ruby - Selenium Webdriver Chromedriver 在 headless 模式下启动超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com