2017-11-23 12 views
0

Stale要素エラーが発生しました。私はそれを克服しようとしましたが、毎回失敗しました。私のプログラムの古い要素参照エラーを克服する方法

d.get("https://iaeme.com/ijciet/index.asp"); 
java.util.List<WebElement>link = d.findElements(By.className("lik")); 
for (int k=1 ; k<= link.size();k++) { 
    link.get(k).click();// stale element error goes here. 
    Thread.sleep(2000); 
    System.out.println(d.getCurrentUrl()); 
} 

これを処理する方法はありますか?

+0

あなたがリンクとして命名したこのリストのサイズは、どのようなものですしてみてください:文これで

link.get(k).click(); 

置き換え ? – DG4

+0

各リンクのクリックでインデックスページからナビゲートしていますか? – Grasshopper

+0

このURLはサイズが52のため、サイズは異なります – sara

答えて

0

例外をスローする文をtryブロックで囲み、staleElementReferenceExceptionをキャッチします。

d.get("https://iaeme.com/ijciet/index.asp"); 
java.util.List<WebElement>link = d.findElements(By.className("lik")); 
     for (int k=1 ; k<= link.size();k++) { 
      try{ 
       link.get(k).click();// stale element error goes here. 
      Thread.sleep(2000); 
      System.out.println(d.getCurrentUrl()); 
      }catch(StaleElementReferenceException e){ 
       // find the element again OR handle the exception in your way 
       } 
     } 

その他の方法は、各反復で要素を見つけることです。これにより、ページナビゲーション後のWebElementの新鮮さが保証されます。

d.findElement(By.xpath("(//*[@class='lik'])["+k+"]")).click(); 
+0

これは印刷を続けます - System.out.println(d.getCurrentUrl());何回も何回も 。何をすべきか ? – sara

+0

これは単なる汎用コードサンプルです。 staleElementReferenceExceptionが発生したステートメントに絞り込む必要があります。 –

+0

他のアプローチはありますか? – sara

0

d.get("https://iaeme.com/ijciet/index.asp"); 
java.util.List<WebElement>link = d.findElements(By.className("lik")); 
     for (int k=1 ; k<= link.size();k++) { 
      if(link.get(k).isDisplayed()){ 
       link.get(k).click();// stale element error goes here. 
       Thread.sleep(2000); 
       System.out.println(d.getCurrentUrl()); 
      } 
     } 
関連する問題