我正在尝试在量角器测试中使用 try-catch 块,请参阅以下代码:
try {
element(by.id('usernameas')).sendKeys(data);
}
catch(err) {
console.log('error occured');
}
我故意传递错误的定位器来检查它是否进入 catch 块,目前它NoSuchElementError
在命令提示符下给我错误并且测试执行停止而不是进入 catch 块。
请建议。
我正在尝试在量角器测试中使用 try-catch 块,请参阅以下代码:
try {
element(by.id('usernameas')).sendKeys(data);
}
catch(err) {
console.log('error occured');
}
我故意传递错误的定位器来检查它是否进入 catch 块,目前它NoSuchElementError
在命令提示符下给我错误并且测试执行停止而不是进入 catch 块。
请建议。
对 element(locator).sendKeys 的调用返回一个已解决或拒绝的承诺。承诺是测试控制流的一部分。
对 element(locator) 本身的调用不会引发错误,它是被拒绝的承诺。如果你找不到一个元素,你实际上希望你的整个测试失败,因为 scneario 无法完成。
要获取错误消息,您可以使用承诺回调,如下所示。
重要说明:如果你自己处理承诺失败,你的测试不会失败,所以你最好重新抛出它
try {
element(by.id('usernameas')).sendKeys(data).then(function() {
console.log('keys sent successfully');
}, function(err) {
console.error('error sending keys ' + err);
throw err;
});
}
catch(err) {
console.log('error occured');
}
控制台输出是(修剪):
error sending keys NoSuchElementError: no such element
(Session info: chrome=31.0.1650.63)
(Driver info: chromedriver=2.8.241075,platform=Windows NT 6.1 S .....
我最近遇到了这个问题,并注意到你不需要 try/catch 块。在 Protractor 中,您可以实现如下所示的 try/catch:
try { <---------------------------- Traditional TRY/CATCH method
loadWebApp();
login();
openUserPreferences();
changePassword();
} catch (err) {
console.error(
"An error was thrown! " + err);
}
loadWebApp().
then(login).
then(openUserPreferences).
then(changePassword).
then(null, function(err) { <----------------- PROTRACTOR equivalent of try/catch
console.error(
"An error was thrown! " + err);
});
这是我从中获得此信息的来源:https
://code.google.com/p/selenium/wiki/WebDriverJs#Promises
下Value Propagation and Chaining
同样,您不需要显式添加 try/catch。
简而言之,这个方法起作用的原因是因为a promise can either be RESOLVED or REJECTED and in case of a rejected or failed promise, this line [ then(null, function(err) { ... } ] will act as the CATCH block.
还要注意 then(null, function(err))( 没有接受任何回调,而只是一个 errBack; 所以基本上,这是说我们不关心承诺是否得到已解决,我们只关心它是否失败,因此回调的 NULL 和 errBack 的函数(错误)。
无需将其包装在 try/catch 中,然后按照上面接受的答案(@Eitan Peer)的建议抛出错误).
希望这可以帮助像我一样在量角器上苦苦挣扎的人。