Selenium WebDriver での古い要素参照例外を解決するにはどうすればよいですか?

DDD
リリース: 2024-11-17 20:13:02
オリジナル
1007 人が閲覧しました

How to Resolve the Stale Element Reference Exception in Selenium WebDriver?

Selenium WebDriver の古い要素参照例外: トラブルシューティングと解決策

Selenium WebDriver の古い要素参照例外は、以前に取得した WebElement 参照が無効になると発生します。基礎となる DOM の変更が原因です。この問題は、要素が動的に更新または削除され、既存の参照が廃止されると発生します。

例外の原因

例外は次の場合に発生する可能性があります。

  • DOM は、JavaScript を使用した要素の置換など、動的に操作されます。
  • AJAX リクエストによりページが更新され、要素の削除または再作成が行われます。
  • ブラウザ エンジン自体が、パフォーマンスの最適化のための DOM。

サンプル コードと例外の詳細

ダイアログ ボックスが開くと DOM が変更されるため、提供されたコード スニペットでは要素の認識中に例外が発生します。

WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));
ログイン後にコピー

エラー トレースに次のメッセージが表示されます:

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
ログイン後にコピー

解決策: WebElement リファレンスを更新します

この問題を解決するには、WebElement 参照を無効にする可能性のある DOM 変更を行った後、WebElement 参照を更新する必要があります。一般的に使用される解決策は次のとおりです。

  • ExpectedConditions を使用して要素が再び表示されるまで明示的に待機します。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("createForm:dateInput_input")));
ログイン後にコピー
  • JavaScript エグゼキューターを使用して要素を直接見つけます。
WebElement textElement = (WebElement) ((JavascriptExecutor) driver)
    .executeScript("return document.querySelector('input[name=\"createForm:dateInput_input\"]')");
ログイン後にコピー
  • driver.navigate().refresh() を使用してページを更新し、要素を再度見つけます。

追加のヒント

  • 複数のアクションにわたって WebElement 参照を使用することは避けてください。各アクションの後に参照を更新します。
  • テスト実行中に古い要素の例外がないか定期的にチェックし、回復メカニズムを組み込みます。
  • ExpectedConditions や WebDriverWait などの動的な DOM 変更を処理するために WebDriver の組み込みメカニズムを使用します。クラス。

以上がSelenium WebDriver での古い要素参照例外を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート