Как преодолеть исключение ссылки на элемент состояния

Я пытаюсь автоматизировать следующие действия:

  1. Запуск https://www.flipkart.com> Щелкните "Мобильные телефоны"> "Наведите указатель мыши" на "Электроника", а затем щелкните "Ми".

Я получаю Expection в "основном" состоянии потока Ссылка на элемент: элемент не прикреплен к документу страницы в методе miButton ().

Пожалуйста, обратитесь к разделу с подробностями об ошибке.

HTML код

Нажатие кнопки Mi - HTML

Базовый класс:

public class Base {
    
        static WebDriver driver;
        
        
    public void setupBrowser(String browser, String url) {
        String currDir = System.getProperty("user.dir");
        
        if (browser.equalsIgnoreCase("chrome")) {
            System.setProperty("webdriver.chrome.driver", currDir + "\\drivers\\chromedriver.exe");
            driver = new ChromeDriver();
        }
        else if (browser.equalsIgnoreCase("firefox")) {
            System.setProperty("webdriver.gecko.driver", currDir + "\\drivers\\geckodriver.exe");
            driver = new FirefoxDriver();
        }
        else if (browser.equalsIgnoreCase("edge")) {
            System.setProperty("webdriver.edge.driver", currDir + "\\drivers\\msedgedriver.exe");
            driver = new EdgeDriver();
        }
        else {
            System.out.println("Valid browser not found therefore quitiing");
            System.exit(0);
        }
        
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
        if (url != "") 
            driver.get(url);
        else
            driver.get("about:blank");          
    }
    
    public void closeBrowser() {
        driver.close();
    }

    

Класс страницы

    public class pagetest extends Base{
    
        Actions action;
    
        public void closebtn() {
            driver.findElement(By.cssSelector("button._2doB4z")).click();  
        }
    
        public void mibutton() {
            WebElement mobiles = driver.findElement(By.xpath("//div[text()='Mobiles']"));  
    
            action = new Actions(driver);
            action.moveToElement(mobiles).click().perform();
    
    
            WebElement electronicsmenu = driver.findElement(By.xpath("//span[text()='Electronics']"));
            action.moveToElement(electronicsmenu).click().perform();
    
            List <WebElement> value = driver.findElements(By.xpath("//div[@class='_1kidPb']/div[@class='_1QrT3s']//a");
            for(WebElement elem:value) {
                if (elem.getText().equals("Mi")) {
                    elem.click();
                }
            }
    
            WebElement label = driver.findElement(By.xpath("//p[text()='Latest from MI : ']"));
            System.out.println("The Label 'Latest from MI' is present : " +label.isEnabled());
        }
    
    public static void main(String[] args) {
            pagetest obj = new pagetest();
            obj.setupBrowser("chrome", "https://www.flipkart.com/");
            obj.closebtn();
            obj.mibutton();
        }
    
    }

Детали ошибки

Исключение в потоке "main" org.openqa.selenium.StaleElementReferenceException: ссылка на устаревший элемент: элемент не прикреплен к документу страницы (Информация о сеансе: chrome = 89.0.4389.90) Для документации по этой ошибке посетите: https://www.seleniumhq.org/exceptions/stale_element_reference.html

Пожалуйста, сделайте отступ в коде как в блоке кода. Это слишком сложно читать. Нам также понадобится репрезентативный образец HTML-кода, с которым вы имеете дело, а также сообщение об ошибке и трассировку стека. Нам также необходимо знать, какой язык программирования вы используете. Пожалуйста, добавьте тег к вашему вопросу, относящийся к вашему языку программирования.

Greg Burghardt 30.03.2021 17:30

Прежде всего, избегайте поиска элементов по тексту. На странице может быть много элементов с одинаковым текстом, но не каждый видимый и / или интерактивный или даже прикрепленный к странице документа. Используйте явное ожидание, если исключение StaleElementReferenceException сохраняется.

pburgr 06.04.2021 14:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
21
0

Другие вопросы по теме