Javascript 无法使用下面使用量角器API的代码捕获错误

Javascript 无法使用下面使用量角器API的代码捕获错误,javascript,protractor,Javascript,Protractor,我创建了一个函数,在该函数中,我故意传递错误的定位器,以便捕获错误。。下面是代码 SafeClick:function(locator){ try { _elementIdentify = locator.isDisplayed().then(function(){ console.info('Element Displayed'); locator.click(); }, function(err) {

我创建了一个函数,在该函数中,我故意传递错误的定位器,以便捕获错误。。下面是代码

SafeClick:function(locator){
    try {
       _elementIdentify = locator.isDisplayed().then(function(){
          console.info('Element Displayed');
          locator.click();
       }, function(err) {
          console.error('Error Finding the Element', +err );
       });
    } catch(err) {
       console.info('Error occured');
    }
}

但是使用上面的代码,catch块中的语句不会被打印。

很可能您试图从回调中捕获错误。你不能那样做。回调函数中的内容是在不同的上下文中执行的,所以您永远不会从then回调中捕捉到该内容,即使您将其扔到了某个地方

编辑:要捕获错误,可以尝试这样编写:

SafeClick:function(locator){

       _elementIdentify = locator.isDisplayed().then(function(){
        try {
          console.info('Element Displayed');
          locator.click();
        }
        catch(err) {
          console.info('Error occured');
        }
       }, function(err) {
          console.error('Error Finding the Element', +err );
       });
}
这是从回调捕获异常的唯一方法。
作为旁注,你试图写的东西似乎没有必要。您应该知道使用量角器操作的UI的状态。如果它处于错误状态,您希望它正确地失败?

如何抛出错误?首先在不使用try-catch块的情况下运行此代码,并查看它是否在控制台中抛出错误。如果不使用try-catch块并传递错误的定位器,我可以在控制台中看到“NoTouchElement异常”以了解详细信息。但是我想知道更多,如果我能从一个返回promise的函数中捕获一个错误。在上面的代码中,isDisplayed()返回一个承诺“如果它处于错误的状态,您希望它正确地失败?”-绝对正确。正确。我已经尝试了您提供的上述代码,但仍然无法解决我的问题。这可能是因为引发您的异常(“NoTouchElement异常”)的承诺在承诺堆栈中处于较高的位置。这意味着当isDisplayed()运行时,它将返回一个承诺,该承诺将在一段时间后引发此异常。你抓不到它。我们为其返回的承诺附加一个then,但它将在原始代码(承诺回调)运行后执行。据我所知,这是不可能的。不过,该代码将捕获在您自己的回调中抛出的异常。