我想尝试单击ElementFinder,以便在单击期间发生错误的情况下,测试不会被标记为失败,并且不会在控制台上放置任何错误。
不幸的是,我的方法:
static tryToClick(elem: ElementFinder) {
// I want to ignore all errors, just try to click and if not proceed
if (elem.isPresent() && elem.isDisplayed() && elem.isEnabled()) {
try {
browser.wait(protractor.ExpectedConditions.elementToBeClickable(elem), 999).then(function() {
elem.click().then(function() {try {} catch (error) {} } );
});
} catch (error) {}
}
}
在控制台上仍然产生错误:
- 失败:过时的元素引用:元素未附加到页面文档中
因此,我不明白为什么在try-catch块中未对其进行处理。
答案 0 :(得分:2)
您的try-catch
无法正常工作,因为错误发生在promise之内。
可以通过以下三种方式来兑现承诺拒绝:
使用承诺的.catch(...)
功能
elem.click().catch((err) => { // Do some error handling stuff in here });
使用.then(...)
的拒绝功能
elem.click().then(() => {
// Do something
}, (err) => {
//Do some error handling stuff in here
});
将try-catch
与async-await
组合使用
static async tryToClick(elem: ElementFinder) {
// I want to ignore all errors, just try to click and if not proceed
if (elem.isPresent() && elem.isDisplayed() && elem.isEnabled()) {
try {
await browser.wait(protractor.ExpectedConditions.elementToBeClickable(elem), 999);
await elem.click();
} catch (error) {}
}
}