单击元素,直到使用 isDisplayed 显示另一个元素

Click element until another element is displayed using isDisplayed

我想单击后退按钮,直到到达应用程序中的特定页面(我的 expectedElement 所在的页面)。这似乎不起作用...

它失败了,因为它找不到预期的元素。

function navigateBack() {
    var backButton = $('div.back');
    var expectedElement = $('span.some-specific-class');

    backButton.click().then(function () {
        if (expectedElement.isDisplayed()) {
            expectedElement.click();
        } else {
            navigateBack();
        }
    });
}

我稍作修改以在 isDisplayed() 上使用承诺。在缺失元素上调用 isDisplayed() 时 Protractor 会抛出错误...

var expectedElement = $('span.some-specific-class');

expectedElement.isDisplayed().then(function(isDisplayed) {
    if(isDisplayed)
        console.log('isDisplayed');
});

因此,除非这是无效语法,否则如果量角器会抛出调用 isPresent() / isDisplayed() 的错误,您如何检查元素是否存在或显示?!?

这样的事情对你有用吗?

function navigateBack() {
var EC = protractor.ExpectedConditions;
var isVisible = EC.visibilityOf(expectedElement);
var backButton = $('div.back');
var expectedElement = $('span.some-specific-class');

backButton.click().then(function () {
    browser.wait(isVisible, 5000, "failed to wait for element").then(function(result) {
        if(result){
            expectedElement.click();
        } else {
            navigateBack();
        }
    });
});

}

Handle the errorisDisplayed():

抛出
function navigateBack() {
    var backButton = $('div.back');
    var expectedElement = $('span.some-specific-class');

    backButton.click().then(function () {
        expectedElement.isDisplayed().then(function (isDisplayed) {
            if (isDisplayed) {
                expectedElement.click();
            } else {
                navigateBack();
            }
        }, function (err) {

        });
    });
}