摘要
使用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();
那我该怎么做呢?
我不想做什么?
我不是要测试吐司的内容。现在,我根本不在乎吐司,我只想点击吐司模糊的按钮。
答案 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()