我正在尝试对基于浏览器的应用程序进行e2e测试,该应用程序向设备发送操作然后对其进行监控。然后,网页从应用程序获取更新,但不会自动刷新。我的以下代码的目的是刷新浏览器以获取操作状态的更新,启动循环计数器,检查操作的状态,是否状态是否已修复 - 将该状态发送到控制台并退出循环,否则增加计数器并重复循环,直到计数器到期或修复或失败或返回锁定状态。此外,将最终操作状态发送到控制台。
代码如下:
browser.sleep(30000);
browser.refresh();
for (var i = 0; i < 50; ++i) {
console.log('i is: ', i);
element(by.css('.deployment-card-status, result.status')).getText().then(function(text){
var action_status = text;
if (action_status == 'Fixed'){
console.log('Action Passed');
break();
}
else {
browser.sleep(30000);
browser.refresh();
}
if (action_status == 'Failed' || action_status == 'Blocked'){
console.log('Action Failed');
}
});
}
网页是用角度js编写的,我试图用Protractor和Jasmine框架测试它。
问题是以下错误代码:
错误代码:100 收到的信号:null 在http://localhost:4444/wd/hub使用selenium服务器 [launcher]运行WebDriver的1个实例 [launcher]错误:SyntaxError:意外的令牌
我无法确定这个意外的令牌是什么?
答案 0 :(得分:2)
首先,您不应该致电break()
,而是应该使用break;
。
尽管如此,后续问题是break
不会对此产生任何影响,因为你实际上并不在循环中(好吧,如果你从上到下阅读代码,是的,但是我们工作在这里的异步环境中,此时在promise解析函数内部)。因此,您会收到SyntaxError: Illegal break statement
错误。
解决问题的一种方法是使用done()
函数 - 来自茉莉花测试的“返回”:
it("should test something", function (done) {
browser.sleep(30000);
browser.refresh();
for (var i = 0; i < 50; ++i) {
console.log('i is: ', i);
element(by.css('.deployment-card-status, result.status')).getText().then(function(text){
var action_status = text;
if (action_status == 'Fixed'){
console.log('Action Passed');
done();
}
else {
browser.sleep(30000);
browser.refresh();
}
if (action_status == 'Failed' || action_status == 'Blocked'){
console.log('Action Failed');
}
});
}
});
答案 1 :(得分:1)
您不应该使用for
循环,因为循环中的代码是异步的。您正在处理Promises
,因此正确的方法是将代码放在函数中并再次调用它,直到您获得预期的状态:
(function checkActionStatus(i) {
console.log('i is: ', i);
$('.deployment-card-status, result.status').getText().then((action_status) => {
// break if the status is Fixed or Failed or Blocked
if (/^(Fixed|Failed|Blocked)$/.test(action_status)) {
console.log('Action ', action_status);
return;
}
// wait, refresh and retry if the counter is not expired
if (++i < 50) {
browser.sleep(1000);
browser.refresh();
checkActionStatus(i);
}
});
})(0);