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