如何使用Protractor测试检查元素是否可点击

时间:2014-12-02 23:49:52

标签: javascript testing protractor

我有一个元素不允许使用CSS属性进行点击pointer-events: none;如何检查该元素是否可点击,因为对该元素执行.click()会抛出异常无法捕获UnknownError: unknown error: Element is not clickable at point该元素是一个链接,所以我只想检查重定向是否发生,但由于此错误,它立即结束测试并尝试catch无法捕获异常。

4 个答案:

答案 0 :(得分:2)

我不了解量角器,但使用普通JS可以做到:

window.getComputedStyle(element).getPropertyValue('pointer-events') == 'none';

然而,对于您希望支持的所有浏览器中可能无法使用getComputedStyle的支持,请参阅MDN compatibility matrix,这表示IE 8中不支持,但它可能不支持指针事件无论如何 CSS属性。

答案 1 :(得分:2)

如果你真的想使用量角器,你可以使用以下方法:

expect(protractor.ExpectedConditions.elementToBeClickable(element)).not.toBe(true);

答案 2 :(得分:0)

我写了一个小的check实用程序方法,请记住它会在点击时立即点击元素:

import { ElementFinder, promise } from 'protractor';

export let testHelpers = {
  isClickable(el: ElementFinder): promise.Promise<boolean> {
    return new promise.Promise(resolve => {
      let interval = setInterval(() => {
        el.click().then(() => {
          clearInterval(interval);
          setTimeout(() => {
            resolve(true);
          }, 500);
        }, () => { });
      }, 100);
    });
  }
}

在您的测试代码中:     来自&#39; ../ src / core / e2e / helpers&#39 ;;

的mport {testHelpers}
describe('App', () => {
  it('should do something', () {
    let btn = $('.cls');
    browser.wait(testHelpers.isClickable(btn), 3000);
  });
});

答案 3 :(得分:0)

实际上有两种检查方法。

1)使用ExpectedConditions

var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
browser.wait(EC.elementToBeClickable($('#abc')), 5000);

如果找不到或不可点击,将返回错误。

2)使用量角器的isEnabledisDisplayedisPresent

据我所知,您可以创建isClickable,如果存在,显示并启用了元素,则将返回true;否则,将返回false:

function isClickable(element) {
    return element.isPresent().then((isPresent) => {
        if (isPresent) {
            return element.isDisplayed().then((isDisplayed) => {
                if (isDisplayed) {
                    return element.isEnabled();
                }
                return false;
            });
         }
         return false;
     });
}