从量角器node_modules文件夹中运行travis CI上的selenium jar

时间:2017-08-18 12:18:37

标签: javascript selenium protractor travis-ci e2e-testing

我正在设置Travis,以便通过量角器执行e2e测试。 在我的protractor.config.js我有以下内容:

seleniumServerJar: './node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.5.0.jar'

所以实际上它指的是protractor插件中默认包含的selenium jar。

然后我使用插件gulp-protractor来执行指向右protractor.config.js的测试。

在当地,一切都像魅力一样。

但是当试图在Travis上执行此操作时,我收到以下错误:

  

[18:59:15] I / launcher - 运行1个WebDriver实例[18:59:15]   E / local - 错误代码:135 [18:59:15] E / local - 错误消息:否   找到了selenium服务器jar   /home/travis/build/quirimmo/Qprotractor/node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.5.0.jar。   运行'webdriver-manager update'下载二进制文件。

知道为什么它看起来无法从node_modules子文件夹中检索jar吗?

这是我的.travis.yml配置,实际上非常简单:

sudo: required
dist: trusty

addons:
  chrome: stable

language: node_js
node_js:
  - '6.11'

before_script:
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start
  - sleep 3

install:
  - npm install

script:
  - echo "Triggered!"
  - gulp protractor-test

非常感谢,任何帮助都会非常感激!

P.S。我已经在Travis手动运行webdriver-manager然后指向protractor.config.js的硒地址的其他项目中做了这个,但是我不想要那个解决方案,我想继续seleniumServerJar 1}}属性,因为通过这种方式它可以单独运行所有内容而无需手动启动webdriver-manager

2 个答案:

答案 0 :(得分:1)

修复了你的回购。您应该将before_script更改为

before_script:
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start
  - sleep 3
  - npm install -g webdriver-manager
  - webdriver-manager update
  - webdriver-manager start &
  - sleep 3

然后在protactor.confg.js添加seleniumAddress

exports.config = {
    seleniumAddress: 'http://127.0.0.1:4444/wd/hub/',
    specs: [
        './test/base-protractor.spec.js',
        './test/element-finder.spec.js',
        './test/element-array-finder.spec.js'
    ],
    onPrepare: function() {
        require('./index');
    }
};

答案 1 :(得分:0)

如果这对将来的其他人有用,请在此处发布答案。 正如在这个链接中所解释的那样:

https://github.com/angular/protractor/issues/3225

您需要手动触发selenium服务器的安装。

因此,在travis文件的install块中,您只需添加以下内容:

install:
  - npm install
  - node_modules/protractor/bin/webdriver-manager update

然后在protractor.config.js内,获取已安装的selenium服务器的当前版本:

const SELENIUM_FOLDER = './node_modules/protractor/node_modules/webdriver-manager/selenium';
const fs = require('fs');
let res, seleniumVersion;
fs.readdirSync(SELENIUM_FOLDER).forEach(file => {
    res = file.match(/selenium-server-standalone-(\d{1}.\d{1}.\d{1}).jar/i);
    if (res) {
        seleniumVersion = res[1];
    } 
})
if (!seleniumVersion) {
    throw new Error('No selenium server jar found inside your protractor node_modules subfolder');
}

然后以这种方式执行:

seleniumServerJar: `./node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-${seleniumVersion}.jar`

我希望这可以帮助别人避免在这个问题上浪费几个小时的时间!