Исключение: org.openqa.selenium.StaleElementReferenceException: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы

При попытке проверить, отображается предупреждение или нет, отображается исключение ссылки на устаревший элемент. Я использовал все следующие методы для обработки диалогового окна Alert, но оно показывает исключение.

  1. JS Executor
  2. Класс роботов
  3. WebDriver Wait
  4. .click () метод
  5. Класс действий

Все элементы присутствуют, пока я проверяю вручную. Когда я автоматизирую это, это показывает исключение ... Но я не знаю, где это происходит ?? !! ... Модуль входа

Код определения шага:

(В этом коде я использую класс Action)

 public void alert_msg_display() throws Throwable {
        WebElement x= driver.findElement(By.xpath("//button[@data-hover='LOGIN NOW']")); //Login button path
        actionClick(driver, x);
        WebElement y= driver.findElement(By.xpath("//md-dialog[@aria-label='Alert']/md-dialog-content/div")); // Alert message text path
        String a= y.getText();
        WebElement z= driver.findElement(By.xpath("//button[@ng-click='hide()']")); // Alert box close button path
        actionClick(driver, z);
        String a1 = "Please Enter Branch Id";
        driver.findElement(By.xpath("//input[@ng-model='Branchid']")).sendKeys("HO");
        actionClick(driver, x);
        String b= y.getText();
        actionClick(driver, z);
        String b1 = "Please Enter Username (Email Id)";
        driver.findElement(By.xpath("//input[@ng-model='Username']")).sendKeys("testmail"); 
        actionClick(driver, x);
        String c= y.getText();
        actionClick(driver, z);
        String c1 = "Please Enter Username (Email Id)";
        driver.findElement(By.xpath("//input[@ng-model='Username']")).clear();
        driver.findElement(By.xpath("//input[@ng-model='Username']")).sendKeys("xxxxx.rt@yyyyy.com");
        actionClick(driver, x);
        String d= y.getText();
        actionClick(driver, z);
        String d1 = "Please Enter Password";
        driver.findElement(By.xpath("//input[@name='password']")).sendKeys("abcde");
        actionClick(driver, x);
        String e= y.getText();
        actionClick(driver, z);
        String e1 = "LOGIN FAILED, PLEASE CHECK YOUR USERNAME OR PASSWORD";
       if (a.equals(a1) && b.equals(b1) && c.equals(c1) && d.equals(d1) && e.equals(e1))
            test.log(LogStatus.PASS, "Test Case ID: LOG_006 to LOG_010 - Pass");
        else
            test.log(LogStatus.FAIL, "Test Case ID: LOG_006 to LOG_010 - Fail");
    }

Код файла бегуна

public void actionClick(WebDriver driver, WebElement a) {
    Actions action = new Actions(driver);
    action.moveToElement(a).click().build().perform();
}

Всего 1 ответ


Движение, которое вы нажимаете на элемент «Войти сейчас» (x), ссылки на x & y будут обновлены. Поэтому вы не можете использовать x & y, которые указывают на старые ссылки и которые приведут к исключению Statle Element.

Решением будет получение элемента каждый раз, когда вы захотите нажать на x & y, чтобы у вас была последняя ссылка на элементы.


Есть идеи?

10000