【问题标题】:Running selenium-chromedriver using Protractor on linux在 Linux 上使用 Protractor 运行 selenium-chromedriver
【发布时间】:2014-10-07 06:52:21
【问题描述】:

我正在使用量角器对 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)

【问题讨论】:

    标签: selenium selenium-webdriver webdriver protractor selenium-chromedriver


    【解决方案1】:

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

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

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

    【讨论】:

    • 该项目不支持 Firefox,但您认为 xvfb 也会运行 Chrome 吗?另外,哇@那个要点。
    • 对我来说,实际的答案是针对 PhantomJS 运行这些。这可以很好地满足我的需求。一旦我们发现一个通过 Phantom 但在现实生活中失败的案例,我们将在 CI 可以使用的一致位置设置一个带有窗口 GUI 的 Selenium 服务器。
    • 酷!那你应该和幻影一起去!实际上,当我尝试 PhantomJS-Protractor 时,我遇到了一些不稳定的故障,所以放弃了它。希望你有更多的运气!
    • 是的,xvfb 适用于 Chrome 或我尝试过的任何需要在 linux 中显示的应用程序。
    【解决方案2】:

    我遇到了同样的问题,安装了 unity-gtk3-module 后就解决了!!

    yum install unity-gtk3-module

    Installing:
     PackageKit-gtk3-module                                      
     Updating:                                                          
    Installing for dependencies:
     PackageKit-glib                                                 
     adwaita-cursor-theme                                          
     adwaita-icon-theme                                             
     at-spi2-atk                                                   
     at-spi2-core                                                   
     cairo-gobject                                                  
     colord-libs                                                    
     gtk3                                                            
     json-glib                                                       
     libXevie                                                       
     libgusb                                                  
     rest                                                           
     Updating for dependencies:
     glib2
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多