2016-12-07 27 views
1

セレンとファントムのフォームを送信してから、フォームが提出されたことを示すbr要素を検索して前のページに戻ります。時折タイムアウトは30代に割り当てられた時間を超えるとエラーが発生します。 TimeoutError: Waiting for element to be located By(xpath,//div[@id='ContactFormBody']/div/br) Wait timed out after 30003msSelenium wait error javascript

が、私は私のプログラムはこの問題が発生した場合にクラッシュしないようにこのエラーを処理する必要があります。さらに、誰かがselenium node.jsのための良い文書を言いたいのであれば、それは素晴らしいことでしょう!

// code generating wait error 
form.then(function(self){ 
    driver.wait(until.elementLocated(By.xpath("//div[@id='ContactFormBody']/div/br")), 30000) 
    .then(function(){ 
     driver.navigate().back(); 
    }); 
}); 

// attempt at handling error 
form.then(function(self){ 
    try{ 
     driver.wait(until.elementLocated(By.xpath("//div[@id='ContactFormBody']/div/br")), 30000) 
     .then(function(){ 
      driver.navigate().back(); 
     }); 
    } 
    catch(e){ 
     console.log("error occurred, script will continue.") 
    } 
}); 
+0

フォームの提出を示す 'br'を待っていますが、非常に信頼性が高いとは言えません。ありがとう。 – alecxe

+0

私は同意します!私は最初に、フォームがフォームが提出された別の表示であるフォームフィールドを消滅させるのを待つ/見ようとしていました。この状態の例や文書を見つけることができませんでした。 – nick

+0

'br'は定数ですが、フォームフィールドの代わりに追加されますが、フォーム提出後にテキストが続きます。 – nick

答えて

2

あなたは第二引数としてthen()にエラーコールバック関数を指定することができます。

  • Module selenium-webdriver/lib/promise

    driver.wait(until.elementLocated(By.xpath("//div[@id='ContactFormBody']/div/br")), 30000) 
        .then(function() { 
         driver.navigate().back(); 
        }, function (error) { 
         console.log("Error happened!"); 
         console.log(error); 
        }); 
    }); 
    

    このドキュメントページはWebDriverJSで使用して約束の良い概要を持っています

+0

偉大な答え、あなたの助けをありがとう、これは私が必要としていたものです! – nick