我有一个元素,使用CSS属性pointer-events: none;
使其无法点击。如何检查该元素是否可点击,因为在该元素上执行.click()
会抛出一个无法捕获的异常:UnknownError:unknown error: Element is not clickable at point
。由于这个错误,测试立即结束,而try catch无法捕获异常。该元素是一个链接,所以我只想检查重定向是否发生。
我有一个元素,使用CSS属性pointer-events: none;
使其无法点击。如何检查该元素是否可点击,因为在该元素上执行.click()
会抛出一个无法捕获的异常:UnknownError:unknown error: Element is not clickable at point
。由于这个错误,测试立即结束,而try catch无法捕获异常。该元素是一个链接,所以我只想检查重定向是否发生。
我不知道protractor,但是使用纯JS您可以做到:
window.getComputedStyle(element).getPropertyValue('pointer-events') == 'none';
然而,所有想要支持的浏览器可能都不支持getComputedStyle 。请查看MDN兼容矩阵,其中指出IE 8不支持此功能,但可能也不支持pointer-events CSS属性。
expect(browser.executeScript("return window.getComputedStyle(element).getPropertyValue('pointer-events')").toBe('none')
。 - Encore PTL如果你真的想使用Protractor,你可以使用以下代码:
expect(protractor.ExpectedConditions.elementToBeClickable(element)).not.toBe(true);
ExpectedConditions
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
browser.wait(EC.elementToBeClickable($('#abc')), 5000);
function isClickable(element) {
return element.isPresent().then((isPresent) => {
if (isPresent) {
return element.isDisplayed().then((isDisplayed) => {
if (isDisplayed) {
return element.isEnabled();
}
return false;
});
}
return false;
});
}
我写了一个小的检查实用方法,请记住它会在元素可点击时立即单击它:
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);
});
}
}
describe('App', () => {
it('should do something', () {
let btn = $('.cls');
browser.wait(testHelpers.isClickable(btn), 3000);
});
});