【问题标题】:Docker Selenium - Tests pass in Chrome but not FirefoxDocker Selenium - 测试通过 Chrome 但不是 Firefox
【发布时间】:2017-02-26 12:49:06
【问题描述】:

我有一个包含两个 Selenium 服务的 Docker Compose 文件:

  selenium-chrome:
    container_name: selenium-chrome
    image: selenium/standalone-chrome
    ports:
      - "4444:4444"
    networks:
      - teamcity-network

  selenium-firefox:
    container_name: selenium-firefox
    image: selenium/standalone-firefox
    ports:
      - "4448:4448"
    networks:
      - teamcity-network

我安装了另一个服务并安装了 Protractor。

这是我的量角器配置文件:

exports.config = {
  onPrepare: function () {
    var jasmineReporters = require('jasmine-reporters');
    jasmine.getEnv().addReporter(new jasmineReporters.TeamCityReporter());
  },
  framework: 'jasmine2',

  specs: [
    '/project/tests/**/*-spec.js'
  ],

  capabilities: {},

  multiCapabilities: [
    {
      'browserName': 'chrome',
      'shardTestFiles': true,
      'maxInstances': 2
    }
  ],

  'baseUrl': 'http://build-tool:8080',

  seleniumAddress: 'http://selenium:4444/wd/hub'
};

这运行成功,但如果我将浏览器名称更改为 firefox,并将 selenium 地址更改为我的 Firefox 容器 - 测试将失败。

1) 包含coachcard 指令应在选中时显示coachcard 类型面板

消息: 失败:在页面http://build-tool:8080/book/tests/directives/includes-coachcard/includes-coachcard-test.html 上找不到 Angular : 回溯 IES寻找角度超出 堆: 错误:在页面http://build-tool:8080/book/tests/directives/includes-coachcard/includes-coachcard-test.html 上找不到 Angular : 重试 es 寻找角度超出 在 /usr/lib/node_modules/protractor/built/browser.js:519:23 在 ManagedPromise.invokeCallback_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) 在 TaskQueue.execute_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) 在 TaskQueue.executeNext_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) 在 /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27 在 /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7 在 process._tickCallback (node.js:369:9) 来自:任务:在控制流中运行它(“检查时应该显示教练卡类型面板”) 在对象。 (/usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:79:14) 从异步测试: 错误 在套房。 (/project/tests/directives/includes-coachcard/includes-coachcard-test-spec.js:7:5) 在对象。 (/project/tests/directives/includes-coachcard/includes-coachcard-test-spec.js:4:1) 在 Module._compile (module.js:409:26) 在 Object.Module._extensions..js (module.js:416:10) 在 Module.load (module.js:343:32) 在 Function.Module._load (module.js:300:12)

有人知道为什么这适用于 Chrome 而不是 Firefox?

我的测试如下所示:

var TEST_PAGE = "/tests/directives/includes-coachcard/includes-coachcard-test.html";

describe("includes coachcard directive", function () {
    it("should show coachcard types panel when checked", function () {
        browser.get(TEST_PAGE);
        var panel = element(by.css('.test1 div.panel'));
        var checkbox = element(by.css('.test1 div.Checkbox-button'));

        expect(panel.isDisplayed()).not.toBeTruthy();
        checkbox.click();
        expect(panel.isDisplayed()).toBeTruthy();
    });
});

注意 - 我可以通过 HTTP 浏览到测试文件,它加载正常 - 没有 Angular 错误。

【问题讨论】:

  • 是不是因为你为firefox打开了4448端口而不是4444?
  • 4448 仅供我从我的主机访问。它毫无怨言地连接到 4444 上的 WebDriver。我应该在那里做 4448:4444 以便在我的主机上连接。
  • 您可以在 multiCapabilities 中设置浏览器,删除带有功能的行,这也可能导致问题,尝试为 firefox 功能创建没有 'shardTestFiles': true, 'maxInstances': 2
  • 嗨 @Hikaryu 谢谢你的建议,我已经修改了量角器配置文件以及 Gunderson 的建议,但我现在收到以下错误消息......(我粘贴到 Gunderson 的图像版本) tinypic.com/r/256fyux/9
  • @AntonRand 添加 allScriptsTimeout: 60000,如果出现则粘贴错误信息

标签: selenium docker protractor


【解决方案1】:

听起来像是时间问题,请参阅 this document 以了解量角器超时。

如果它在 Chrome 上运行没问题,那么最有可能的问题将通过链接文档中的建议得到解决:在您的配置文件中更新您的 getPageTimeout。等待angular 在应用中加载的默认时间为 10 秒。

【讨论】:

  • 您好,感谢您的帮助和建议。我已经尝试过了,但我现在收到以下错误消息:F##teamcity[testFailed name='should allow click if property is true' message='Failed: Error while running testForAngular: Timed out waiting for async script result after 11001ms|n构建信息:版本:|'2.50.0|',修订:|'1070ace|',时间:|'2016-01-27 18:43:24|'|n系统信息:主机:|'1ea5f2cb0d86| ', ip: |'172.18.0.3|', os.name: |'Linux|', os.arch: |'amd64|', os.version: |'4.4.8-boot2docker|', java.version: |'1.8.0_45-internal|'|n驱动信息:博士
  • 那是另一个超时问题,也记录在我链接的页面上。请参阅等待页面同步部分,将allScriptsTimeout: 60000 添加到您的配置中,默认为 11 秒。
【解决方案2】:

我发现我做错了什么。我正在运行的测试有一个 HTML 导入语句。

<link rel="import" href="thirdPartyScripts.html" />

这在我的本地 Firefox 上没有失败,因为我必须设置:

dom.webcomponents.enabled=true

在我的偏好中。我更改了我的代码,使其不再使用导入,但如果需要,可以在 Selenium 实例上设置此首选项。

Chrome 支持此功能,但 Firefox 不支持(默认情况下) - http://caniuse.com/#feat=imports

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多