エラー処理: 動的リンクの「古い要素参照」の修正
動的 Web 中に Web 要素が古くなり、ページ ドキュメントから切り離される可能性がありますページが変わります。これにより、これらの要素を操作しようとすると「古い要素参照」エラーが発生する可能性があります。新しいコンテンツをロードするメニューやタブをナビゲートするときに、特定のケースが 1 つ発生します。
この例では、Selenium は複数の同一リンクのリスト内のリンクをクリックしようとします。 「古い要素参照: 要素がページ ドキュメントにアタッチされていません」というエラーは、基礎となるページ構造が変更された後に要素参照が古くなるため発生します。
この問題を解決するには、例外処理を利用して再初期化できます。ページコンテンツがリロードされた後の要素参照。次の変更されたコード スニペットは、このアプローチを示しています。
<code class="java">public static void main(String[] args) throws InterruptedException { WebDriver driver = new ChromeDriver(); driver.navigate().to("url......"); driver.findElement(By.id("Login1_txtEmailID")).sendKeys("[email protected]"); driver.findElement(By.id("Login1_txtPassword")).sendKeys("Testing1*"); driver.findElement(By.id("Login1_btnLogin")).click(); List<WebElement> LeftNavLinks = driver.findElements(By.xpath("//*[@id='sliding-navigation']//a")); Thread.sleep(1000); String ben = "Benefit Status"; for (WebElement e : LeftNavLinks) { String linkText = e.getText(); System.out.print(i + " " + linkText + "\n"); if (linkText.equals(ben)) { String BenefitStatLi = "//*[@id='sliding-navigation']/li[%s]/a"; System.out.print(i + " " + linkText + "\n"); try { driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click(); driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click(); } catch (org.openqa.selenium.StaleElementReferenceException ex) { driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click(); driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click(); } } i++; } }</code>
例外処理を組み込むことで、try-catch ブロック内の要素参照を再初期化し、最新の参照が確実に使用されるようにします。相互作用。これにより、「古い要素参照」エラーが効果的に軽減され、動的 Web ページ内で正常にナビゲーションできるようになります。
以上が動的 Web ページの Selenium で「古い要素参照」エラーを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。