selenium - 在 Linux 上使用 Protractor 运行 selenium-chromedriver

标签 selenium selenium-webdriver webdriver protractor selenium-chromedriver

我正在使用 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

当我在 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)

尝试解决:

我看过this issue ,但独立的 Webdriver 服务器不是解决方案。

我查看了this issue但我的 selenium-wedriver 版本是2.42.1,所以,不是同样的错误。

版本:

$ 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

进度更新:

尝试获取 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

由此我得出结论,存在依赖性问题,并发现 Selenium requires Chrome(more) .

我使用 steps like this 在 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

这并不完全像那样工作,但在依赖项和 sudo apt-get install 来回几次之后,我想我已经安装了 Chrome:

$ google-chrome --version
Google Chrome 36.0.1985.143 

这使得 chromedriver 版本可以工作:

$ ./node_modules/protractor/selenium/chromedriver --version
ChromeDriver 2.10.267518

但是,运行 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)

最佳答案

您需要能够 headless 运行 Chrome 或 Firefox,为此您需要配置 Xvfb 等,否则如果没有正确的 $DISPLAY,Chrome 将无法启动。

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

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

关于selenium - 在 Linux 上使用 Protractor 运行 selenium-chromedriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294183/

相关文章:

java - 控制台输出 Selenium Webdriver

java - 使用 Selenium 网络驱动程序获取元素的绝对位置

javascript - 如何将属性设置为使用 selenium javascript?

alert - 在 Selenium WebDriver (Selenium 2) 中处理警报

java - Jbehave 无法找到多个故事

selenium - 是否可以使用 Selenium WebDriver 来驱动 PhantomJS?

java - 在 WebDriver 中获取元素,而不是通过 xpath

java - 使用 Java 在 Selenium WebDriver(又名 Selenium2)中使用 getPageSource()

python - 如何使用 Selenium 的 webdriver 和 Python 检查网页内容是否已更改?

ruby-on-rails - (rails) 脚本/插件安装 - 这是什么意思?