我尝试使用wait()方法而不是sleep(),但它不起作用。 我有代码:
browser.actions().click(filter_field).perform();
browser.sleep(3000);
if (baloon_info.isPresent()) { //some expections }
else { expect(true).toBe(false); }
现在我想做点什么:
var present_pri = browser.wait(function () {
return balloon_info.isPresent();
}, 3000);
if (present_pri) { //some expections }
else { expect(true).toBe(false); }
但如果气球不存在,我会收到错误消息:Wait timed out after 3117ms
而不是expected true to be false
(present_pri == false)
我试着写:
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(balloon_warning), 3000);
expect(balloon_warning.isPresent()).toBeTruthy();
但我总是有同样的错误。我做错了什么?
答案 0 :(得分:5)
您需要处理等待超时错误:
browser.wait(EC.presenceOf(balloon_warning), 3000).then(function () {
// success handler
}, function (error) {
expect(true).toBe(false);
});
答案 1 :(得分:3)
最后我找到了另一个解决方案:
browser.wait(function () {
return balloon_info.isPresent();
}, 3000).then(function () {
// success handler
}).thenCatch(function () {
expect(true).toBe(false);
});
答案 2 :(得分:3)
根据您的问题,我理解的是您正在尝试查找DOM中是否存在元素(但是,它并不一定意味着它应该显示)。您正在等待错误,因为您正在等待DOM中不存在的元素。因此,如上所示,它会引发错误。要解决它,请尝试期待元素的存在而不等待它。因为默认情况下,量角器具有预定义的等待时间,用于检查DOM中是否存在元素。这是一个小片段 -
it('Check for presence of the element', function(){
expect(balloon_warning.isPresent()).toBe(true);
}, 60000); //extra timeout of 60000 so that async error doesn't show up
现在,如果您想不惜任何代价使用等待,请查看以下示例 -
it('Check for element with wait time of 3000 ms', function(){
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(balloon_warning), 3000).then(function(){
expect(balloon_warning.isPresent()).toBeTruthy();
},function(err){
console.log('error');
});
}, 60000);
此处如果未找到element,则wait函数将抛出错误并在控制台中打印。希望它有所帮助。