Docker Selenium - 测试通过Chrome而不是Firefox

时间:2016-10-17 13:41:46

标签: selenium docker protractor

我有一个带有两个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   :retr       寻找超出角度的人         堆:           错误:无法在页面http://build-tool:8080/book/tests/directives/includes-coachcard/includes-coachcard-test.html上找到Angular   :retri       es寻找角度超标               at /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)               at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27               at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7               at process._tickCallback(node.js:369:9)           来自:任务:在控制流程中运行它("应该在检查时显示coachcard类型面板")               在对象。 (/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)               at 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浏览到测试文件并且加载正常 - 没有角度错误。

2 个答案:

答案 0 :(得分:1)

听起来像是时间问题,请参阅this document以获取有关量角器超时的参考信息。

如果它在Chrome上运行没问题,那么最有可能的问题将由链接文档中的建议修复:更新配置文件中的getPageTimeout。等待angular在应用程序中加载的默认时间是10秒。

答案 1 :(得分:0)

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

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

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

dom.webcomponents.enabled=true

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

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