【问题标题】:Run selenium jar on travis CI from protractor node_modules folder从量角器 node_modules 文件夹在 travis CI 上运行 selenium jar
【发布时间】:2017-08-18 12:18:37
【问题描述】:

我正在设置 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] 电子/本地 - 错误代码:135 [18:59:15] 电子/本地 - 错误消息:否 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

非常感谢,任何帮助将不胜感激!

附言。我已经在其他项目中使用 Travis 手动运行 webdriver-manager 然后从 protractor.config.js 指向 selenium 地址,但我不想要那个解决方案,我想继续通过 seleniumServerJar 属性,因为通过这种方式,它将单独运行所有内容,而无需手动启动webdriver-manager

【问题讨论】:

  • 为什么不在 before_script 中全局安装 webdriver-manager?
  • 嗨@TarunLalwani,首先非常感谢您的评论。我确实尝试过,但没有运气。之后我总是得到同样的错误。当您手动执行webdriver-manager 然后从protractor.config.js 指向该URL 时,此解决方案可以正常工作。有意义吗?
  • 您可以提供任何我可以玩的示例存储库吗?
  • 当然感谢@TarunLalwani。它仍在开发中,但它与我在这里谈论的 Travis 相关。尝试克隆它,创建一个分支,如果你启动 PR,你应该直接在 Travis 上触发相同的工作:github.com/quirimmo/qprotractor p.s.我认为目前你会触发这项工作,即使只是推动你的分支

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


【解决方案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');
    }
};

【讨论】:

  • 您是否阅读了 github 上的 cmets 并阅读了我所说的问题:“我已经能够手动启动 webdriver-manager 并使用 selenium 地址作为属性来做到这一点?”
  • @quirimmo,哈哈,我的错。给我几分钟
  • 没问题,非常感谢您的帮助 :) 如果您对此项目感兴趣并且愿意,我们也可以继续合作 :)
  • @quirimmo,查看最新的github.com/quirimmo/Qprotractor/pull/5
【解决方案2】:

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

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`

我希望这将帮助其他人避免浪费几个小时来解决这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多