2016-01-13 69 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上。

希望這可以幫助那裏的人在那裏掙扎在量角器上,就像我做的那樣