我正在设置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
答案 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`
我希望这可以帮助别人避免在这个问题上浪费几个小时的时间!