ChromeDriver ไม่สามารถเริ่มทำงานได้เมื่อ Selenium เริ่มต้นผ่าน Jenkins (Mac OS X)

การกำหนดค่า: Mac OS X 10.8.5, java 1.6.0_65, Selenium 2.37, Jenkins 1.538, Chrome 30.0.1599.101, ChromeDriver v2.6.232908 และ Firefox 25.0 ฉันกำลังรันการทดสอบโดยใช้ PHPUnit 3.7.28 และ PHP 5.3.22 (โดยใช้ PHPUnit_Extensions_Selenium2TestCase)

(1) ถ้าฉันเริ่ม Selenium ด้วยตนเองดังนี้:

 $ java -jar ~/Downloads/selenium-server-standalone-2.37.0.jar  -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver

ฉันสามารถทำการทดสอบตามที่คาดไว้

(2) อย่างไรก็ตาม ถ้าฉันเริ่ม Selenium ผ่าน Jenkins:

 # launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist 

จากนั้นทำการทดสอบ ฉันได้รับข้อผิดพลาด:

$ phpunit --verbose tests/classes/core/admin_campaignhome_loads.php 
PHPUnit 3.7.28 by Sebastian Bergmann.

E

Time: 20.56 seconds, Memory: 5.25Mb

There was 1 error:

1) AdminTest::testLoginToBackend
PHPUnit_Extensions_Selenium2TestCase_WebDriverException: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.6.232908,platform=Mac OS X 10.8.5 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20.53 seconds
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00'
System info: host: 'Pauls-iMac.local', ip: '192.168.1.18', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.5', java.version: '1.6.0_65'
Driver info: org.openqa.selenium.chrome.ChromeDriver

/usr/local/php5-20130308-201415/lib/php/PHPUnit/TextUI/TestRunner.php:349
/usr/local/php5-20130308-201415/lib/php/PHPUnit/TextUI/Command.php:176
/usr/local/php5-20130308-201415/lib/php/PHPUnit/TextUI/Command.php:129

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

(3) Firefox + Selenium ผ่าน Jenkins ช่วยให้ฉันทำการทดสอบตามที่คาดไว้

jenkins.log มีดังต่อไปนี้:

14:51:11.439 INFO - Executing: [new session: {browserName=chrome}] at URL: /session)
14:51:11.440 INFO - Creating a new session for Capabilities [{browserName=chrome}]
Starting ChromeDriver (v2.6.232908) on port 33014
14:51:31.972 WARN - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00'
System info: host: 'Pauls-iMac.local', ip: '192.168.1.18', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.5', java.version: '1.6.0_65'
Driver info: driver.version: unknown
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
    at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:176)
    at org.openqa.selenium.remote.server.DefaultSession.<init>(DefaultSession.java:112)
    at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:89)
    at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:104)
    at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:63)
    at org.openqa.selenium.remote.server.rest.ResultConfig.handle(ResultConfig.java:205)
    at org.openqa.selenium.remote.server.JsonHttpRemoteConfig.handleRequest(JsonHttpRemoteConfig.java:192)
    at org.openqa.selenium.remote.server.DriverServlet.handleRequest(DriverServlet.java:201)
    at org.openqa.selenium.remote.server.DriverServlet.doPost(DriverServlet.java:167)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.openqa.selenium.remote.server.DriverServlet.service(DriverServlet.java:139)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.openqa.jetty.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
    at org.openqa.jetty.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:677)
    at org.openqa.jetty.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
    at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1526)
    at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1479)
    at org.openqa.jetty.http.HttpServer.service(HttpServer.java:914)
    at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820)
    at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:986)
    at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837)
    at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.java:243)
    at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:357)
    at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00'
System info: host: 'Pauls-iMac.local', ip: '192.168.1.18', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.5', java.version: '1.6.0_65'
Driver info: driver.version: unknown
    at org.openqa.selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.java:72)
    at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance(DefaultDriverFactory.java:56)
    at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:215)
    at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:1)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:169)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.openqa.selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.java:62)
    ... 9 more
Caused by: org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.6.232908,platform=Mac OS X 10.8.5 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20.53 seconds
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00'
System info: host: 'Pauls-iMac.local', ip: '192.168.1.18', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.5', java.version: '1.6.0_65'
Driver info: org.openqa.selenium.chrome.ChromeDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:111)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:115)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:150)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:129)
    ... 14 more
14:51:31.974 WARN - Exception: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.6.232908,platform=Mac OS X 10.8.5 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20.53 seconds
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00'
System info: host: 'Pauls-iMac.local', ip: '192.168.1.18', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.5', java.version: '1.6.0_65'
Driver info: org.openqa.selenium.chrome.ChromeDriver

person Paul Schreiber    schedule 06.11.2013    source แหล่งที่มา


คำตอบ (1)


เป็นเพราะอินสแตนซ์ที่เริ่มต้นของเจนกินส์ไม่มีความสามารถของ Chrome

ดูที่

http://localhost:4444 

เพื่อดูความสามารถที่มีอยู่

คุณสามารถเพิ่มความสามารถเพิ่มเติมได้ด้วย

java -jar selenium-server-standalone-2.37.0.jar -role node \
    -hub http://localhost:4444/grid/register  \
    -browser "browserName=chrome,version=25,maxInstances=5" \
    -Dwebdriver.chrome.driver="/usr/local/bin/chromedriver" \ 
    -host localhost \
    -port 5556

คุณสามารถใช้การตั้งค่า -port ที่แตกต่างกันเพื่อหมุนความสามารถหลายอย่างจากเครื่องเดียวกัน หรือแม้แต่เชื่อมต่อจากเครื่องอื่นโดยเปลี่ยน -hub เป็นที่อยู่จริงของเซิร์ฟเวอร์ซีลีเนียม


แก้ไข

ฉันสร้างปัญหาของคุณขึ้นมาใหม่ด้วยการเชื่อมต่อไดรเวอร์ Chrome โดยไม่มี

-Dwebdriver.chrome.driver='...'

I'm on v2.33.0

13:18:44.922 คำเตือน - ข้อยกเว้นถูกส่งออกมา java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException ข้อมูลการสร้าง: เวอร์ชัน: '2.33.0', การแก้ไข: '4e90c97', เวลา : '22-05-2556 15:32:38' ข้อมูลระบบ: os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-55-generic', java.version: ข้อมูลไดรเวอร์ '1.7.0_45': driver.version: ไม่ทราบที่ java.util.concurrent.FutureTask.report (FutureTask.java:122) ที่ java.util.concurrent.FutureTask.get (FutureTask.java:188) ที่ org openqa.selenium.remote.server.DefaultSession.execute (ค่าเริ่มต้นเซสชัน.java:176)

ดังนั้นฉันสงสัยว่าปลั๊กอิน Selenium-jenkins ที่คุณใช้ไม่มีชุด Chromedriver หรือมีอันที่ไม่ถูกต้อง มีบันทึกที่ต้องตรวจสอบ (ฉันไม่มีตารางซีลีเนียมในเจนกินส์ของฉันอีกต่อไป) หรืออาจเพิ่มเส้นทางไปยัง Chromedriver ไปยังเส้นทางของคุณเช่นเดียวกับในกระทู้นี้ https://groups.google.com/ฟอรั่ม/?fromgroups#!topic/selenium-users/-3LJ3wma3RE

person KeepCalmAndCarryOn    schedule 06.11.2013
comment
1. หากฉันดูที่ localhost:8080/selenium ก่อนใช้งาน ฉันเห็น Chrome อยู่ในรายการแล้ว (http://192.168.1.18:4445 {seleniumProtocol=WebDriver, platform=MAC, browserName=chrome, maxInstances=5, jenkins.nodeName=(master)} Idle) ถ้าฉันรันคำสั่งของคุณ ฉันเห็นอินสแตนซ์ชุดที่สอง (http://localhost:5556 {platform=MAC, seleniumProtocol=WebDriver, browserName=chrome, maxInstances=5, version=30}) ทำไมเป็นอย่างนั้น? 2. มีวิธีให้ Jenkins เริ่มต้นอินสแตนซ์ Selenium ด้วยการรองรับ Chrome หรือไม่ ดูเหมือนแปลกที่ต้องเพิ่มโหนดในแต่ละครั้ง - person Paul Schreiber; 07.11.2013
comment
ฉันอัปเดตคำตอบแล้ว แต่ฉันคิดว่าเจนกินส์ไม่พบไฟล์ Chromedriver - person KeepCalmAndCarryOn; 07.11.2013
comment
Chromedriver อยู่ใน /usr/bin ฉันยังตั้งค่าเส้นทาง ChromeDriver ด้วยตนเองใน Jenkins/Selenium config ด้วย - person Paul Schreiber; 07.11.2013
comment
ไม่แน่ใจว่าการระบุเส้นทาง Chromedriver เป็นตัวแปรโกลบอลเจนกินส์นั้นถูกต้องมากน้อยเพียงใด ซึ่งควรอยู่ใน build agent ดีกว่า - person Nakilon; 01.09.2015