Maison >Java >javaDidacticiel >Comment gérer les erreurs « Référence d'élément obsolète » dans Selenium pour les pages Web dynamiques ?

Comment gérer les erreurs « Référence d'élément obsolète » dans Selenium pour les pages Web dynamiques ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 00:24:02605parcourir

How to Handle

Gestion des erreurs : correction de la « référence d'élément obsolète » pour les liens dynamiques

Les éléments Web peuvent devenir obsolètes et se détacher du document de la page lors d'un Web dynamique changements de pages. Cela peut conduire à des erreurs de « référence d'élément obsolète » lors de la tentative d'interaction avec ces éléments. Un cas particulier se présente lors de la navigation dans des menus ou des onglets qui chargent du nouveau contenu.

Dans l'exemple fourni, Selenium tente de cliquer sur un lien dans une liste de plusieurs liens identiques. L'erreur « Référence d'élément obsolète : l'élément n'est pas attaché au document de page » se produit car la référence d'élément devient obsolète après les modifications de la structure de la page sous-jacente.

Pour résoudre ce problème, nous pouvons exploiter la gestion des exceptions et réinitialiser la référence de l'élément après le rechargement du contenu de la page. L'extrait de code modifié suivant illustre cette approche :

<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&#160;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>

En incorporant la gestion des exceptions, nous réinitialisons la référence de l'élément dans le bloc try-catch, garantissant que la référence la plus à jour est utilisée pour interactions. Cela atténue efficacement l'erreur « référence d'élément obsolète » et permet une navigation réussie dans la page Web dynamique.

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!

Déclaration:
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