我设法让Protractor测试在CI服务器上通过Jenkins构建任务运行,但我遇到了这样的问题:当我运行webdriver-manager start时,Selenium服务器启动之前需要花费很长时间。
最终它启动,控制台显示:
INFO - Started SocketListener on 0.0.0.0:4444
但这有时需要大约5分钟,而当我在Vagrant VM上尝试相同的操作时,它会立即启动。
我正在运行无头量角器测试,所以我使用xvfb-run来运行webdriver-manager start。
下面是我使用的shell脚本:
#!/bin/sh
export DISPLAY=:1
Xvfb $DISPLAY -ac -screen 0 1280x1024x8 &
sleep 1
xvfb-run webdriver-manager start --standalone 这会立即在Vagrant VM上启动Selenium服务器,但在CI服务器上需要很长时间。以下是CI服务器上脚本的输出:
jenkins@vps1:~/workspace/cms$ ./runWebdriver
Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension SECURITY
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension DRI3
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension GLX
jenkins@vps1:~/workspace/cms$ seleniumProcess.pid: 27952
21:21:21.633 INFO - Launching a standalone server
Setting system property webdriver.chrome.driver to /var/lib/jenkins/.nvm/versions/io.js/v2.0.2/lib/node_modules/protractor/selenium/chromedriver
21:21:21.760 INFO - Java: Oracle Corporation 24.79-b02
21:21:21.760 INFO - OS: Linux 3.13.0-53-generic amd64
21:21:21.810 INFO - v2.45.0, with Core v2.45.0. Built from revision 5017cb8
21:21:21.960 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: LINUX
21:21:22.108 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
21:21:22.109 INFO - Version Jetty/5.1.x
21:21:22.111 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
21:21:22.112 INFO - Started HttpContext[/selenium-server,/selenium-server]
21:21:22.112 INFO - Started HttpContext[/,/] <-- this is where it hangs几分钟后,它终于运行了,我可以执行Protractor测试,但这非常烦人,不适合在CI服务器上运行测试。
在Vagrant VM上,Selenium服务器立即启动,并且到目前为止输出是相同的:
19:47:08.507 INFO - Java: Oracle Corporation 24.65-b04
19:47:08.509 INFO - OS: Linux 3.13.0-44-generic amd64
19:47:08.536 INFO - v2.45.0, with Core v2.45.0. Built from revision 5017cb8
19:47:08.663 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: LINUX
19:47:08.760 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
19:47:08.762 INFO - Version Jetty/5.1.x
19:47:08.763 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
19:47:08.764 INFO - Started HttpContext[/selenium-server,/selenium-server]
19:47:08.765 INFO - Started HttpContext[/,/]
19:47:08.800 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@14b43af3
19:47:08.801 INFO - Started HttpContext[/wd,/wd]
19:47:08.807 INFO - Started SocketListener on 0.0.0.0:4444
19:47:08.808 INFO - Started org.openqa.jetty.jetty.Server@16692a88两台机器都运行Ubuntu 14.04,但是内核版本和Java版本略有不同(参见输出),CI服务器上的Protractor版本是2.1.0,在VM 1.8.0上是2.1.0。
这可能是问题所在,还是我遗漏了什么?
发布于 2015-08-18 01:09:46
这个问题似乎与Selenium使用的随机性来源有关。
更多信息请点击此处:https://code.google.com/p/selenium/issues/detail?id=1301
DR解决方案:将-Djava.security.egd=file:///dev/urandom附加到启动selenium的java命令中。您可能需要编辑webdriver-manager的配置。
发布于 2016-03-30 13:55:29
对于那些正在使用吞咽量角器的人。您可以在seleniumArgs属性中传递java.security.egd。
seleniumArgs: ['--proxy=http://xxx:8080', '-Djava.security.egd=file:///dev/urandom']为了让chrome在docker上工作,我不得不在特权模式下运行。在docker compose中:
privileged: truehttps://stackoverflow.com/questions/30562098
复制相似问题