selenium - Protractor webdriver-manager 需要很长时间才能启动 Selenium

标签 selenium jenkins protractor

我设法通过 CI 服务器上的 Jenkins 构建任务运行 Protractor 测试,但我遇到了一个问题,当我运行 webdriver-manager start 时,Selenium 服务器启动之前需要很长时间.

最终它启动并且控制台显示:

信息 - 在 0.0.0.0:4444 上启动 SocketListener

但这有时需要大约 5 分钟,而当我在 Vagrant VM 上尝试相同的操作时,它会立即启动。

我正在运行 headless Protractor 测试,因此我使用 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。

这可能是问题所在还是我在这里遗漏了一些东西?

最佳答案

该问题似乎与 Selenium 使用的随机性来源有关。

更多信息请点击:https://code.google.com/p/selenium/issues/detail?id=1301

TL;DR 解决方案:将 -Djava.security.egd=file:///dev/urandom 附加到启动 selenium 的 java 命令。您可能需要编辑 webdriver-manager 的配置。

关于selenium - Protractor webdriver-manager 需要很长时间才能启动 Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562098/

相关文章:

java在linux服务器上执行chromedriver

java - 使用 JMeter 运行 Selenium 脚本

python selenium send_key() 不起作用

javascript - 如何在 Python 中实现 Selenium HTML5 拖放解决方法

jenkins - 在 Jenkins 工作中通过 FTP 下载文件?

javascript - 如何让 Protractor 按下ESCAPE键?

python - 使用Selenium + Python + Jenkins捕获失败时的屏幕截图

javascript - 将 Jenkins 用于基于 Gulp 的项目

javascript - Protractor 使用邮件监听器获取电子邮件 : TypeError: deferred. fulfill 不是函数

angularjs - 影响数据库的 Angular e2e 测试