量角器:等待方法不起作用

时间:2015-08-05 09:12:23

标签: angularjs asynchronous timeout jasmine protractor

我尝试使用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();

但我总是有同样的错误。我做错了什么?

3 个答案:

答案 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函数将抛出错误并在控制台中打印。希望它有所帮助。