让我解释一下情况,我目前正在使用Protractor测试AngularJS网站,我根本没有开发它。
问题在于,绝对随机地有时未渲染该网站。只是空白,标题不同:
不知道为什么,这也不是我的问题。
但是,当使用量角器进行测试时,它显然崩溃了。
所以我想用一个临时解决方案绕过这个问题:
function specialRefreshFunction() {
cpt=0;
browser.get('https://blablabla');
browser.waitForAngular();
var title = browser.getTitle();
while (title != "VideoGame") {
cpt=cpt+1;
//sleep(1000);
//browser.sleep(1000);
browser.get('https://blablabla');
browser.waitForAngular();
//browser.navigate().refresh();
console.log("fail "+cpt);
}
console.log("Correct title " + title);}
我的解决方案不起作用。我是NodeJS和Protractor的新手,因此代码可能是胡说八道。
谢谢!
答案 0 :(得分:0)
您可以选择browser.wait
let EC = protractor.ExpectedConditions;
browser.wait(
EC.presenceOf($('#some-element')),
10000,
'Element did not appear after route change'
).then(function() {}, function() {
browser.refresh();
});
在此特定示例中,量角器将等待10秒,以使元素#some-element
出现在页面上。 browser.wait
返回一个Promise,因此您可以处理两种情况-当出现元素或未出现元素时。只需放置一些特定的选择器而不是页面上显示的$('#some-element')
,您就可以认为页面已加载
但是,如果仅依靠标题值,则可以使用titleContains
var EC = protractor.ExpectedConditions;
// Waits for the title to contain 'foo'.
browser.wait(EC.titleContains('foo'), 5000);
答案 1 :(得分:0)
尝试创建这样的自定义承诺:
public vierifyPageTitle() {
return new Promise((resolve, reject) => {
const refreshUserData = setInterval(() => {
return browser.getTitle().then((title) => {
if (title === 'VideoGame') {
clearInterval(refreshUserData);
resolve(title);
}
}, (err) => {
browser.refresh();
reject(err);
});
}, 1000);
});
}
如果标题不符合预期,则每1000毫秒刷新一次。