Headless Chrome Circle CI - 错误:spawn /usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/bin/java ENOENT

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Headless Chrome Circle CI - 错误:spawn /usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/bin/java ENOENT相关的知识,希望对你有一定的参考价值。

我试图在无头镀铬的Circle CI中进行测试。我使用的是selenium服务器版本3.8.1和chromedriver版本2.34

protractor_conf.js由chrome功能组成:

var chromeCapabilities = {
   browserName: 'chrome',
   chromeOptions: {  
     args: [
     'headless','--show-fps-counter=false', '--remote-debugging-port=2222', '--disable-gpu'
     ]
   }
}

我的sh脚本包含以下用于webdriver-manager的命令,然后运行测试:

./node_modules/protractor/bin/webdriver-manager clean
./node_modules/protractor/bin/webdriver-manager update --gecko false --versions.standalone 3.8.1 --versions.chrome 2.34
./node_modules/protractor/bin/webdriver-manager start &

echo "*** Run script for e2e tests"
gulp e2e

我在m circle.yml中添加了这些以安装最新版本的稳定chrome并启动无头监听localhost:

dependencies:
    post:
     # Install the latest Chrome
      - curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
      - sudo dpkg -i google-chrome.deb
      - sudo sed -i 's|HERE/chrome"|HERE/chrome" --disable-setuid-sandbox|g' /opt/google/chrome/google-chrome
      - rm google-chrome.deb
    before_install:
      - google-chrome --headless --remote-debugging-port=2222 --disable-gpu http://localhost &

所以,当我现在运行我的构建时,测试根本不运行。日志说:

** Updating webdriver **
[05:46:11] W/file_manager - path does not exist 
/home/ubuntu/pharma/test/node_modules/protractor/node_modules/webdriver-
manager/selenium
[05:46:11] I/file_manager - creating folder 
/home/ubuntu/pharma/test/node_modules/protractor/node_modules/webdriver-
manager/selenium
[05:46:12] I/update - chromedriver: unzipping chromedriver_2.34.zip
[05:46:12] I/update - chromedriver: setting permissions to 0755 for 
/home/ubuntu/pharma/test/node_modules/protractor/node_modules/webdriver-
manager/selenium/chromedriver_2.34
[05:46:13] I/start - java -Djava.security.egd=file:///dev/./urandom -Dwebdriver.chrome.driver=/home/ubuntu/pharma/test/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.34 -jar /home/ubuntu/pharma/test/node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.8.1.jar -port 4444
[05:46:13] I/start - seleniumProcess.pid: 24198

05:46:13.642 INFO - Selenium build info: version: '3.8.1', revision: '6e95a6684b'
05:46:13.643 INFO - Launching a standalone Selenium Server
2018-01-12 05:46:13.740:INFO::main: Logging initialized @385ms to org.seleniumhq.jetty9.util.log.StdErrLog
05:46:13.781 INFO - Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()`
05:46:13.799 INFO - Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
05:46:13.801 INFO - Using `new EdgeOptions()` is preferred to `DesiredCapabilities.edge()`
05:46:13.803 INFO - Driver class not found: com.opera.core.systems.OperaDriver
05:46:13.803 INFO - Using `new OperaOptions()` is preferred to `DesiredCapabilities.operaBlink()`
05:46:13.803 INFO - Using `new SafariOptions()` is preferred to `DesiredCapabilities.safari()`
05:46:13.804 INFO - Driver class not found: org.openqa.selenium.phantomjs.PhantomJSDriver
05:46:13.845 INFO - Driver provider class org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
 registration capabilities Capabilities {browserName: internet explorer, ensureCleanSession: true, platform: WINDOWS, version: } does not match the current platform LINUX
05:46:13.845 INFO - Driver provider class org.openqa.selenium.edge.EdgeDriver registration is skipped:
 registration capabilities Capabilities {browserName: MicrosoftEdge, platform: WINDOWS, version: } does not match the current platform LINUX
05:46:13.846 INFO - Driver provider class org.openqa.selenium.safari.SafariDriver registration is skipped:
 registration capabilities Capabilities {browserName: safari, platform: MAC, version: } does not match the current platform LINUX
05:46:13.891 INFO - Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
05:46:13.892 INFO - Using `new EdgeOptions()` is preferred to `DesiredCapabilities.edge()`
05:46:13.892 INFO - Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()`
05:46:13.893 INFO - Using `new OperaOptions()` is preferred to `DesiredCapabilities.operaBlink()`
05:46:13.893 INFO - Using `new SafariOptions()` is preferred to `DesiredCapabilities.safari()`
05:46:13.902 INFO - Using the passthrough mode handler
2018-01-12 05:46:13.932:INFO:osjs.Server:main: jetty-9.4.7.v20170914
2018-01-12 05:46:13.970:WARN:osjs.SecurityHandler:main: ServletContext@o.s.j.s.ServletContextHandler@2db7a79b{/,null,STARTING} has uncovered http methods for path: /
2018-01-12 05:46:13.978:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@2db7a79b{/,null,AVAILABLE}
2018-01-12 05:46:13.998:INFO:osjs.AbstractConnector:main: Started ServerConnector@67b467e9{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
2018-01-12 05:46:13.999:INFO:osjs.Server:main: Started @644ms
05:46:13.999 INFO - Selenium Server is up and running
[07:02:53] Using gulpfile ~/pharma/test/gulpfile.babel.js
[07:02:53] Starting 'set-envVars'...
[07:02:53] Finished 'set-envVars' after 245 μs
[07:02:53] Starting 'set-directories'...
[07:02:53] Finished 'set-directories' after 428 μs
[07:02:53] Starting 'e2e'...
--> Running tests using command: ./node_modules/.bin/protractor ./protractor_e2e_conf.js
Logger: Output file - /home/ubuntu/pharma/test/output/e2e/logs/console.log
[07:02:54] [INFO] Report destination:   /home/ubuntu/pharma/test/output/e2e/logs/e2eTests.html
[07:02:54] [INFO] [07:02:54] I/launcher - Running 1 instances of WebDriver
[07:02:55] [INFO] [07:02:55] I/testLogger - 
------------------------------------

[07:02:55] [INFO] [07:02:55] I/testLogger - [Chrome] PID: 24232
[Chrome] Specs: /home/ubuntu/pharma/test/e2e/spec/targeting/data_upload/uploadAccount_spec.js
[Chrome] 
[Chrome] Logger: Output file - /home/ubuntu/pharma/test/output/e2e/logs/console.log
[Chrome] [07:02:55] [INFO] [07:02:55] I/local - Starting selenium standalone server...
[Chrome] events.js:160
[Chrome]       throw er; // Unhandled 'error' event
[Chrome]       ^
[Chrome] 
[Chrome] Error: spawn /usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/bin/java ENOENT
[Chrome]     at exports._errnoException (util.js:1018:11)
[Chrome]     at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
[Chrome]     at onErrorNT (internal/child_process.js:367:16)
[Chrome]     at _combinedTickCallback (internal/process/next_tick.js:80:11)
[Chrome]     at process._tickCallback (internal/process/next_tick.js:104:9)

使用的版本:

  • Chrome浏览器版本:Google Chrome 63.0.3239.132
  • 量角器:v5.2.2
  • Chromedriver拉链:2.34
  • Selenium独立:3.8.1
  • 圈CI:1.0

我错过了什么?任何帮助,将不胜感激。

答案

解:

circle ci上安装的默认java版本是1.7。我强迫它安装1.8 jdk:

  • 去圈ci构建测试命令并使用:java --version命令检查安装的java版本。那里有v1.7表格。
  • 然后,我修改我的Dockerfile使用jdk 8使用:FROM openjdk:8这将覆盖安装的v1.7并强制使用1.8解决了我的问题。

以上是关于Headless Chrome Circle CI - 错误:spawn /usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/bin/java ENOENT的主要内容,如果未能解决你的问题,请参考以下文章

Headless Chrome入门

chrome headless Manual 模式渲染网页

使用 `google-chrome --headless` 时如何设置浏览器窗口大小?

Python 爬虫杂记 - Chrome Headless

TestCafe & chrome:headless : 如何强制浏览器语言(语言环境)

headless chrome设置最大窗口模式