ホームページ  >  記事  >  Java  >  Selenium で「古い要素参照」例外を処理する方法は?

Selenium で「古い要素参照」例外を処理する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 17:16:01549ブラウズ

How to Handle

古い要素参照: 原因の解明と解決策の発見

Selenium では、「古い要素参照」例外が発生するとイライラすることがあります。これは、参照されている要素がページ ドキュメントに関連付けられていないことを示しているためです。このエラーは、DOM に動的読み込みやページ ナビゲーションなどの大幅な変更が加えられたときによく発生します。

この問題を解決するには、例外をトリガーしたコード行を正確に特定することが重要です。提供されたコードでは、エラーの原因となる行は次のとおりです。

<code class="java">driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click();</code>

この行は、フォーマットされた XPath 文字列に基づいて要素をクリックしようとします。ただし、クリックが実行されるまでに基になる要素が削除または変更されている可能性があり、古い要素参照例外が発生します。

この問題の根本的な原因は、コードの実行時に DOM が安定していないことです。 。これに対処するには、要素をクリックする前に要素が再度利用可能になるまで待機する再試行メカニズムを実装することを検討できます。このような再試行の例を次に示します。

<code class="java">try {
    // Attempt to click on the element
    driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click();
} catch (org.openqa.selenium.StaleElementReferenceException ex) {
    // Element is not yet available, so wait and try again
    Thread.sleep(200); // Replace with appropriate wait time
    driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click();
}</code>

クリックを再試行する前に待機時間を導入することで、コードは DOM に安定するのに十分な時間を与え、続行する前に要素が存在しクリック可能であることを確認します。

以上がSelenium で「古い要素参照」例外を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。