测试一个元素是否可以使用量角器进行测试是微不足道的,但是我一直在试图弄清楚如何检查一个元素是否不可点击
我试图将click函数包装在try / catch中,以便在尝试单击它时抛出错误时应该捕获它并让测试通过;但是,这不起作用。
以下是我执行检查的方法的代码:
return this.shouldSeeDisabledFunds()
.then(function() {
var clickable = true;
try {
fundsElem.first().click();
} catch (e) {
clickable = false;
console.log(clickable);
} finally {
console.log(clickable);
}
console.log(clickable);
// All the way through, clickable is still true, and the console log in the
// catch is not called. I believe this is because click is asynchronous.
})
;
答案 0 :(得分:9)
我找到了适用于此的解决方案。当click()
返回一个promise时,你可以简单地.then
离开它并抛出成功的click处理程序并覆盖catch处理程序,如果该元素不可点击,则不执行任何操作使测试通过。
return this.shouldSeeDisabledFunds()
.then(function() {
fundsElem.first().click()
.then(
function() {
throw "Can click Funds element that should be disabled";
},
function() {}
)
;
})
;
答案 1 :(得分:3)
可能在您的情况下不适用,但检查元素是否可点击的更好方法是检查它是否可见且已启用:elem.isDisplayed()
和elem.isEnabled()
。这样你就不会在你不应该的时候不小心点击按钮。
Fyi,将有一个图书馆来帮助处理这样的案件:https://github.com/angular/protractor/pull/1703
答案 2 :(得分:0)
实际上有两种检查方法。
1)使用ExpectedConditions
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to not be clickable.
browser.wait(EC.not(EC.elementToBeClickable($('#abc'))), 5000);
如果发现可点击,它将返回错误。
2)使用量角器的isEnabled
,isDisplayed
和isPresent
据我所知,您可以创建isNotClickable
,仅当存在,显示或启用元素时,它才会返回false;否则,将返回true:
function isNotClickable(element) {
return element.isPresent().then((isPresent) => {
if (isPresent) {
return element.isDisplayed().then((isDisplayed) => {
if (isDisplayed) {
return !element.isEnabled();
}
return true;
});
}
return true;
});
}
答案 3 :(得分:-4)
验证Clickable: element.isDisplayed()。toBe(true)
不可点击: element.isDisplayed()。toBe(false)
为我工作。