运行 travis 上的硒罐 CI 来自量角器 node_modules 文件夹

Run selenium jar on travis CI from protractor node_modules folder

我正在设置 Travis,以便通过量角器执行端到端测试。 在我的 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 - Running 1 instances of WebDriver [18:59:15] E/local - Error code: 135 [18:59:15] E/local - Error message: No selenium server jar found at /home/travis/build/quirimmo/Qprotractor/node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.5.0.jar. Run 'webdriver-manager update' to download binaries.

知道为什么它看起来无法从 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 属性,因为这样它将 运行 一切都单独进行,无需手动启动 webdriver-manager

已在您的代码库中修复。您应该将 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');
    }
};

如果这对将来的其他人有用,请在此处发布答案。 正如这个link中解释得很好:

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`

我希望这会帮助其他人避免在这个问题上浪费几个小时的时间!