我有一个元素不允许使用CSS属性进行点击pointer-events: none;
如何检查该元素是否可点击,因为对该元素执行.click()
会抛出异常无法捕获UnknownError: unknown error: Element is not clickable at point
该元素是一个链接,所以我只想检查重定向是否发生,但由于此错误,它立即结束测试并尝试catch无法捕获异常。
答案 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)使用量角器的isEnabled
,isDisplayed
和isPresent
据我所知,您可以创建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;
});
}