1

如果元素没有变得可见,是否可以在ExpectedConditions.visibilityOf上等待而不会失败?我想处理一种情况,其中按钮可能已通过动画变为可见并将其单击。量角器等待条件不应该在超时后失败

browser.wait(conditions.visibilityOf(button), 500).then(function (visible) { 
    if (visible) { 
     return button.click().then(function() {/*...*/}); 
    } 
}); 
+0

为什么不只是你使用'browser.wait(500)'?它将等待500毫秒,然后执行后面的任何操作,而不管元素的可见性如何。然后您可以尝试选择元素或检查其可见性。 –

+0

@JeremyThille可能,但它会一直等待500毫秒,即使按钮在1ms后可见。 – hansmaad

回答

11

我发现,我可以处理wait返回抑制超时错误拒绝承诺:

browser.wait(conditions.visibilityOf(button), 500).then(function() { 
    // It is visible 
    return button.click().then(function() {/*...*/});  

}, function() { 
    // It is not visible 
    if (shouldExpectVisibility) { 
     // If I want to fail, I could reject again 
     return protractor.promise.rejected('No such button'); 
    } 
    else { 
     // If I don't want to fail, I do nothing 
    } 
}); 
+0

谢谢!帮助解决我今天遇到的同样的问题! – Gunderson