如何使用量角器检查元素是否无法点击?

时间:2015-01-09 11:39:30

标签: javascript node.js protractor functional-testing

测试一个元素是否可以使用量角器进行测试是微不足道的,但是我一直在试图弄清楚如何检查一个元素是否可点击

我试图将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.
    })
;

4 个答案:

答案 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)使用量角器的isEnabledisDisplayedisPresent

据我所知,您可以创建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)

为我工作。