2017-08-01 8 views
1

複数のフレームからなるウェブサイトをテストしています。要素が変更されていない場合でも、サーバーはいつでもフレームを再生成できます。これはfindElementとのgetText間SeleniumでWebElementをリフレッシュする処理

driver.findElement(By.id("11")).getText(); 

中に発生した場合、StaleElementExcpetionがスローされます。私の現在の解決策は、複数回再試行することです。

for (int i = 0; i < 3; i++) { 
    try { 
     driver.findElement(By.id("11")).getText(); 

    } catch (StaleElementException e) { 
     // retry 
    }  
} 

これは本当にコード、何か良い解決策を沸かせますか?

答えて

2

コードを肥大化しないようにするための機能を記述しますが、この問題を解決するにはよりよい方法はないと思います。

ここで良いブログ記事:StaleElementException

0

まず我々は、特定のフレームに切り替え、その後、要素を見つける、あなたのgettextが存在するフレームに識別することがあります。

構文:

driver.switchTo().frame("frameName"); //name of the frame 
    driver.switchTo().frame(1); //index 

例:

 driver.switchTo().frame(1); 
    driver.findElement(By.xpath("//p")).getText(); 
    driver.switchTo().defaultContent(); 

注:

 driver.switchTo().defaultContent(); //Used default frame, I.E. If there are three frames in one page named as 1,2,3. If you want to switch from frame 2 to frame 3, In that case we are not able to switch directly to the frame 3, In this case what we have to do is 
    driver.switchTo().frame("2"); //frame 2 
    driver.switchTo().defaultContent();// main window - (Default page) while loading webpage 
    driver.switchTo().frame("3"); //frame 3 

理由は次のパスを見つけてください:StaleElementException

  1. 要素は完全に削除されました。
  2. 要素はもはやDOM

http://www.seleniumhq.org/exceptions/stale_element_reference.jsp

に取り付けられています。
関連する問題