Исключение: org.openqa.selenium.StaleElementReferenceException: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы - PullRequest
0 голосов
/ 11 февраля 2020

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

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

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

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

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

 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 Ответ

0 голосов
/ 11 февраля 2020

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

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

...