等待吐司在量角器

时间:2017-02-06 15:57:26

标签: javascript angularjs protractor toastr angular-toastr

摘要

使用Protractor测试AngularJS webapp时,如何等待所有toast消失?

更多详情

我有一个AngularJS应用程序,我正在使用Protractor进行测试。我正在使用angular-toastr在应用程序中发生事件时显示通知。

在测试中的某一点,我无法点击按钮,因为Toast当前正在阻止该按钮。我得到的错误是:

Element is not clickable at point (898, 712). Other element would receive the click: <div id="toast-container" {...}

所以我想在继续之前等待吐司消失。由于angular-toastr不使用$timeout,我无法使用browser.waitForAngular();

执行此操作

那我该怎么做呢?

我不想做什么?

我不是要测试吐司的内容。现在,我根本不在乎吐司,我只想点击吐司模糊的按钮。

3 个答案:

答案 0 :(得分:0)

您可以等待元素不存在(或者不显示):

browser.wait(function () {
    return $('#toast-container').isPresent().then(function (toastPresent) {
        return !toastPresent;
    });
}, 10000);

答案 1 :(得分:0)

我在这篇博文中找到了一个起点:http://docsplendid.com/archives/209

我调整了一下与toastr合作,这就是它最终的结果:

var hasClicked = false;

browser.wait(function() {
    var deferred = protractor.promise.defer();

    var elements = element.all(by.className('toast'));
    var count = elements.count().then(function (result) {
        // If there are toasts active, click them to hide them faster.
        if (result > 0 && !hasClicked) {
            elements.click();
            hasClicked = true;
        }
        deferred.fulfill(result === 0);
    });

    return deferred.promise;
});

答案 2 :(得分:0)

不是您的任务的答案,但您可以点击 Toastr 消息使其消失,然后再尝试点击被遮挡的按钮。

element(by.css(".toast-message")).click()