2017-01-09 7 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(); 
    } 

そしてIはコンソールでこのエラーメッセージを得る:

NoSuchElementError:そのような要素:要素が見つかりません:{ "方法": "のXPath"、 "セレクタ":/div [1]/a [1]/img [1] "}

可能な限り、このエラーは、Tryブロック内のコードから発生します。

このエラーが発生してもコードを実行し続ける方法はありますか?

+1

を使用してください。キャッチ文にもエラーが発生する可能性があります。 –

+0

いいえ、私はすでにcatchブロック内のコードをテストしました。正しく動作しています。 – maximus009

+1

xpathも非常に厄介です。 this.By.css( "div.someClass> a> img:nth-​​child(2)")のようなCSSパスを使用する方が良いです。 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

関連する問題