Maison > Java > javaDidacticiel > le corps du texte

Pourquoi est-ce que je reçois l'exception « Référence d'élément obsolète » dans mes tests WebDriver ?

Linda Hamilton
Libérer: 2024-11-05 04:40:02
original
806 Les gens l'ont consulté

Why Am I Getting the

Référence d'élément obsolète : identification de la source de l'exception

Rencontrer l'exception "référence d'élément obsolète" lors de l'exécution de tests WebDriver peut être frustrant. Examinons les détails de l'erreur et explorons une solution pour résoudre ce problème.

Présentation de l'erreur

L'exception de « référence d'élément obsolète » se produit lorsque WebDriver tente de interagir avec un élément qui ne fait plus partie du DOM. Cela peut se produire pour diverses raisons, telles que :

  • L'élément a été supprimé du DOM avant que le WebDriver puisse effectuer son action.
  • La page a été actualisée ou rechargée, invalidant la précédente référence de l'élément.

Exemple de code

L'extrait de code fourni présente un scénario dans lequel cette erreur pourrait se produire :

<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>
Copier après la connexion

Raison de l'exception

Sur la base de la structure HTML fournie, l'erreur se produit probablement lorsque vous essayez de cliquer sur l'élément avec le XPath //*[@id='divContentHolder']/div[1]/ une[1]. Cela peut être dû au fait que l'élément a été supprimé ou modifié après la navigation initiale et la récupération de l'élément.

Solution

Pour résoudre ce problème, vous pouvez implémenter un mécanisme pour gérer le exception de référence d’élément obsolète. Une approche consiste à intercepter l'exception et à réessayer l'action, comme le montre l'extrait de code suivant :

<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>
Copier après la connexion

Notes supplémentaires

  • Il est essentiel d'identifier quelle ligne de code lève l'exception pour identifier la source du problème.
  • Recharger la page ou attendre qu'un élément spécifique devienne disponible pourrait également atténuer le problème.
  • Éviter d'utiliser des xpaths absolus et s'appuyer sur des localisateurs plus fiables peut améliorer la stabilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!