2016-01-13 70 views
0

我正在使用量角器和黄瓜,并注意到有些情况下我想捕获NoSuchElementError: No element found using locator: By.cssSelector("someCssLocatorHere")。然而,使用传统的try/catch块是行不通的,除非我打电话。然后()函数的两种回调和errback可扔的错误,这样我可以赶场它像以下:量角器TRY /捕捉问题

try{ 
    somePromise.then(function(){ 
    //callback function if promise gets resolved successfully 
    }, function(e){ 
    console.log(e); //errBack in case promise gets rejected or fails 
    throw e; <--------------- THROW error here so can catch it in catch block below 
    }); 
}catch(e){ 
    console.log('error:'+e); 
} 

而且上面的解决方案是/ Stackoverflow上的许多答案。所以我没有任何问题,但我会回答下面的自己的问题,向您展示处理此异常(NoSuchElementError: No element found using locator: By.cssSelector("someCssLocator"))的正确方法,而不用用try/catch块显式包装您的代码。

回答

0

我最近遇到这个问题,并注意到你不需要try/catch块。在量角器,就可以实现的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

下如此反复,你并不需要显式地添加试着抓。

总之,这种方法可行的原因是因为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.

还要注意,那么(NULL,函数(ERR))(未服用任何回调(而非NULL),但只有一个errback可;所以基本上,这是说我们不关心promise是否解决,我们只关心它是否失败,因此回调的NULL和errBack的函数(错误)。不需要将它封装在try/catch中,然后抛出错误的建议在很多回答Stackoverflow上。

希望这可以帮助那里的人在那里挣扎在量角器上,就像我做的那样