我有一个带有两个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浏览到测试文件并且加载正常 - 没有角度错误。
答案 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