需要关于try-catch的帮助

use*_*600 6 javascript testing promise angularjs protractor

我在量角器测试中尝试使用try-catch块,请参阅下面的代码:

try {
    element(by.id('usernameas')).sendKeys(data);
}
catch(err) {
    console.log('error occured');
} 
Run Code Online (Sandbox Code Playgroud)

我故意传递错误的定位器来检查它是否进入catch块,目前它NoSuchElementError在命令提示符和测试执行停止时给出了错误而不是进入catch块.

请建议.

Eit*_*eer 16

对元素(locator).sendKeys的调用返回一个已解决或拒绝的promise.承诺是测试控制流程的一部分.

对元素(locator)本身的调用不会抛出错误,它是被拒绝的承诺.如果找不到元素,则实际上希望整个测试失败,因为无法完成scneario.

要获取错误消息,您可以使用promise回调,如下所示.

重要提示:如果您自己处理承诺失败,您的测试不会失败,因此您最好重新抛出它

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');
}
Run Code Online (Sandbox Code Playgroud)

控制台输出是(修剪):

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 .....
Run Code Online (Sandbox Code Playgroud)