2017-01-09 82 views
2

所以我使用Selenium的WebDriverJS的JavaScript實現。我對WebDriverJS比較陌生,我想知道爲什麼代碼在Try塊中崩潰?它甚至從來沒有到達Catch區塊。這裏是我的代碼:Selenium在Try塊中崩潰

try 
    { 
     driver.findElement(this.By.xpath("html/body/form/div[4]/div[1]/center[1]/div[15]/div[1]/a[1]/img[1]")).click(); 
    catch (err) 
    { 
     driver.findElement(this.By.xpath("html/body/form/div[3]/div[1]/center[1]/div[15]/div[1]/a[1]/img[1]")).click(); 
    } 

然後我在控制檯中此錯誤消息:

NoSuchElementError:沒有這樣的元素:找不到元素:{「方法」:「的XPath」,「選擇」: 「html/body/form/div [4]/div [1]/center [1]/div [15]/div [1]/a [1]/img [1]」}

正如你所能看,這個錯誤來自Try塊內的代碼。

有沒有什麼辦法可以讓代碼繼續執行,儘管出現這個錯誤?

+1

您的catch語句可能也會拋出錯誤。 –

+0

不,我已經測試了catch塊中的代碼,它工作正常。 – maximus009

+1

xpath也非常挑剔。最好使用css路徑,比如this.By.css(「div.someClass> a> img:nth-​​child(2)」)。您可以使用document.querySelector(「div.someClass」)在您的瀏覽器控制檯中測試CSS路徑 –

回答

0

WebdriverJS異步觸發「findElements」(docs here),這意味着您的語句將清除try catch,然後回調拋出錯誤。要正確捕捉錯誤,請使用以下代碼:promise pattern

// Original implementation  
driver.findElement({id: 'my-button'}).click(); 

// Promise usage, my preference 
driver.findElement({id: 'my-button'}).then(function(el) { 
    return el.click(); 
}).catch(function(err){ 
    //handle error here 
}) 

// Another way to resolve the error 
driver.findElement({id: 'my-button'}).then(el, function (err) { 
    if (err && err.name === "NoSuchElementError"){ 
    return console.log("Element was missing!"); 
    } 

    return el.click(); 
}); 
+1

非常感謝,這項工作非常完美。 – maximus009