2017-01-09 31 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