在linux上使用Protractor运行selenium-chromedriver

Sim*_*lGy 14 selenium webdriver selenium-chromedriver selenium-webdriver protractor

我正在使用量角器对Angular应用程序运行测试.它们适用于我的OSX环境,但不适用于TeamCity尝试运行它的Linux.

当我在我的本地OSX环境中运行此命令时,它可以工作(在我的同事机器上测试):

./node_modules/protractor/bin/protractor protractor.conf.js

Using ChromeDriver directly...
..
Finished in 5.55 seconds
2 tests, 2 assertions, 0 failures
Run Code Online (Sandbox Code Playgroud)

当我在Linux机器上运行它,或者TeamCity作业尝试运行它时,它会失败:

./node_modules/protractor/bin/protractor protractor.conf.js

Using ChromeDriver directly...

/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/util.js:87
          Error('Timed out waiting for the WebDriver server at ' + url));
          ^
Error: Timed out waiting for the WebDriver server at http://127.0.0.1:52959/
    at Error (<anonymous>)
    at onResponse (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/util.js:87:11)
    at /usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/util.js:42:21
    at /usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/http/http.js:96:5
    at ClientRequest.<anonymous> (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:136:7)
    at ClientRequest.EventEmitter.emit (events.js:95:17)
    at Socket.socketErrorListener (http.js:1547:9)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:440:14
    at process._tickCallback (node.js:415:13)
==== async task ====
WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:131:49)
    at Function.webdriver.WebDriver.createSession (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:111:30)
Run Code Online (Sandbox Code Playgroud)

试图解决:

我已经看过这个问题,但是一个独立的webdriver服务器是没有解决方案的.

我看了这个问题但是我的版本的selenium-wedriver是2.42.1,所以,不是同一个bug.

版本:

$ node --version
v0.10.26

$ ./node_modules/protractor/bin/protractor --version
Version 1.0.0

$ uname -mrs
Linux 3.11.0-15-generic x86_64
Run Code Online (Sandbox Code Playgroud)

进度更新:

试图获得chrome-webdriver暴露问题的版本:

$ ./node_modules/protractor/selenium/chromedriver --version
./node_modules/protractor/selenium/chromedriver: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

由此我得出结论,存在依赖性问题,发现Selenium需要Chrome.(更多).

我使用以下步骤在Linux机器上安装了Chrome :

sudo apt-get install libxss1 libappindicator1 libindicator7
sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb
Run Code Online (Sandbox Code Playgroud)

这不是那样的,但经过一些依赖的来回,sudo apt-get install我认为我安装了Chrome:

$ google-chrome --version
Google Chrome 36.0.1985.143 
Run Code Online (Sandbox Code Playgroud)

这使得chromedriver版本工作:

$ ./node_modules/protractor/selenium/chromedriver --version
ChromeDriver 2.10.267518
Run Code Online (Sandbox Code Playgroud)

但是,运行Protractor仍然不起作用:

$ ./node_modules/protractor/bin/protractor protractor.conf.js
Using ChromeDriver directly...

/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:109
  var template = new Error(this.message);
                 ^
UnknownError: unknown error: Chrome failed to start: exited abnormally
  (Driver info: chromedriver=2.10.267518,platform=Linux 3.11.0-15-generic x86_64)
    at new bot.Error (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:109:18)
    at Object.bot.response.checkResponse (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
Run Code Online (Sandbox Code Playgroud)

Leo*_*cci 8

您需要能够运行Chrome或Firefox无头,因此您需要配置Xvfb等,否则Chrome将无法在没有正确的$ DISPLAY的情况下启动.

您也可以使用PhantomJS,但是,恕我直言,这对e2e测试有什么好处,因为它不是真正的浏览器.

这就是我成功用于连续测试的方法:https://github.com/elgalu/docker-selenium