2014-11-04 118 views
3

我使用硒webdriver的,用Ruby 32位1.9.3,Chromedriver v2.9.248315,鉻38.0.2125.111 m和詹金斯1.588在無頭模式開始硒的webdriver Chromedriver超時

寶石的本地實例:黃瓜(1.3.17),selenium-webdriver(2.43.0),watir-webdriver(0.6.11)(可以提供所有其他列表,如果您認爲有必要)

Windows 7 Professional 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批處理命令:

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服務中啓用「允許服務與桌面交互」,然後觀看窗口(在更多c複雜情況),Chrome窗口打開,但什麼都不做。我原來的問題與「$ browser.cookies.clear」,並在註釋掉該行後,我現在有同樣的問題,行$ browser.driver.manage.window.maximize

我正在運行復雜的黃瓜場景使用Chromedriver沒有麻煩。然後我重新安裝了我的電腦,在安裝Jenkins,Ruby,Chromedriver(添加到PATH)並將舊作業複製到我的新Jenkins安裝後,我遇到了上述問題。然後我創建了上面的簡單示例,測試它並創建了這篇文章。

如果任何人有任何關於如何讓Chromedriver再次工作的想法,這將是偉大的。

回答

5

作爲系統用戶在會話0中運行時,Chrome 38無法正常工作。通常情況下,這是因爲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版本,你可以降級它。

+0

我剛剛嘗試了3.在Jenkins的服務條目中更改了用戶,我在腳本中添加了whoami以確認它現在使用不同的用戶(它是)。我仍然得到完全相同的錯誤。我有Chrome 38,所以我會嘗試降級Chrome版本 – Steve 2014-11-11 11:33:21

+0

更新的答案,以刪除不起作用的選項 – SDET 2014-11-13 04:42:17

+0

我似乎無法找到降級Chrome的方式,我可以找到重定向的所有合法外觀下載我到Google Chrome下載頁面,這迫使我下載最新版本的Chrome。不過,它看起來像是要在Chrome 39中修復它https://code.google.com/p/chromium/issues/detail?id=422218 – Steve 2014-11-17 08:50:51

1

Chrome無法在Windows中以無頭模式運行。 你需要爲此使用HTMLdriver。

如果您非常需要它,您需要嘗試設置一臺vnc服務器並在其中運行。 http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/

+0

我不知道如果「無頭模式」對於我正在嘗試做的事情來說是正確的話,但它確實起作用,它在重建之前在我的機器上工作,它可以在另一臺服務器上和其他人的機器上工作。 Jenkins在「虛擬桌面」上啓動Chrome的一個實例,然後應該運行測試,但它不在我的機器上。 – Steve 2014-11-05 09:10:45

0

通過SDET答案幫我(upvoted),會話0是我的問題,但你並不需要AlwaysUp,你可以從一些啓動腳本由啓動詹金斯奴:javaws http://<jenkins-master>/computer/<node-name>/slave-agent.jnlp