我们正在尝试自动化一个可公开访问的网站,然后点击其中一个链接,但是测试在TimeOut异常时失败,同时将元素定位如下:
From:Task:Protractor.waitForAngular() - Locator:By(link text,MY ACCOUNT) 下面的示例conf和spec文件。 请求有关如何解决此问题的帮助。
conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'chrome'
},
specs: ['test.js']
};
test.js
describe('test', function() {
it('should navigate', function(done) {
browser.get('https://ww2.tracfone.com');
element(by.linkText('MY ACCOUNT')).click();
done();
});
};
答案 0 :(得分:2)
我根据您发布的项目设置了一个示例项目,此测试似乎对我有用。我不知道您为什么会收到通常与非页面相关联的超时角度但设置browser.ignoreSynchronization = true
有助于解决此错误。
var ec = protractor.ExpectedConditions;
var timeout = 60000;
describe('test', function() {
it('should navigate', function(done) {
browser.ignoreSynchronization = true;
browser.get('https://ww2.tracfone.com')
var myAccount = element(by.linkText('MY ACCOUNT'));
browser.wait(ec.visibilityOf(myAccount)).then(function() {
myAccount.click();
})
done();
});
});
答案 1 :(得分:2)
找到您为webPage看到的问题的根本原因。看起来你的网站不断轮询$ timeout或$ http,Protractor将无限期地等待并暂停。
我已经监控了下面的http流量,看到你的应用频繁轮询,而Protractor只是等待。检查下面的屏幕抓取。(时间线中的绿色标记表示$ http呼叫 - https://ww2.tracfone.com/cgi-bin/tealeaf.pl)
有关您看到此错误的原因的详细信息是documented here。好。为此提出了不同的解决方案,有多种解决方法。我将简要介绍替代方案,并留给您选择最佳方案。
IgnoreSynchronization:在browser.ignoreSynchronization
之前将此标志 - browser.get()
设置为false并继续测试流程,并将其他页面的标志设置为true
查看here
Interval.js:我不是这方面的专家,但你可以探索更多here
对于持续轮询的任何内容,您应该使用$ interval (在Angular 1.2rc3中介绍)。
尝试使用不同的timeOut配置,看看您的应用轮询是否会在一段时间后停止
allScriptsTimeout:120000, getPageTimeout:120000, jasmineNodeOpts:{ defaultTimeoutInterval:120000 }