古い要素参照: 例外のソースの特定
WebDriver テストの実行中に「古い要素参照」例外が発生するとイライラすることがあります。エラーの詳細を詳しく調べて、この問題を解決するための解決策を検討してみましょう。
エラーの概要
WebDriver が次のことを試みると、「古い要素参照」例外が発生します。 DOM の一部ではなくなった要素と対話します。これは、次のようなさまざまな理由で発生する可能性があります。
コード例
提供されたコード スニペットは、このエラーが発生する可能性のあるシナリオを示しています。
<code class="java">public static void main(String[] args) throws InterruptedException { // ... List<WebElement> LeftNavLinks = driver.findElements(By.xpath("//*[@id='sliding-navigation']//a")); for (WebElement e : LeftNavLinks) { if(e.getText().equals("Benefit Status")) { driver.findElement(By.xpath(String.format("//*[@id='sliding-navigation']/li[%s]/a", i))).click(); driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click(); } i++; } }</code>
例外の理由
提供された HTML 構造に基づくと、xpath //*[@id='divContentHolder']/div[1]/ を持つ要素をクリックしようとするとエラーが発生する可能性があります。 a[1]。これは、最初のナビゲーションと要素の取得後に要素が削除または変更されたことが考えられます。
解決策
この問題を解決するには、古い要素参照の例外。 1 つのアプローチは、次のコード スニペットに示すように、例外をキャッチしてアクションを再試行することです。
<code class="java">try { driver.findElement(By.xpath("//*[@id='divContentHolder']/div[1]/a[1]")).click(); } catch (org.openqa.selenium.StaleElementReferenceException ex) { // Retry the action here driver.findElement(By.xpath("//*[@id='divContentHolder']/div[1]/a[1]")).click(); }</code>
補足説明
以上がWebDriver テストで「Stale Element Reference」例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。