Нажатие кнопки Загрузить больше приводит к ошибке, указывающей, что элемент больше не виден

#java #selenium

Вопрос:

У меня есть экран поиска, где после ввода критериев поиска и поиска появится кнопка «Загрузить больше», если будет более 30 записей. Проблема в том, что он нажимает кнопку Загрузить больше, но приводит к исключению устаревшего элемента

Сценарий заключается в том, что мне нужно нажимать до тех пор, пока кнопка «Загрузить больше» не станет отключенной.

Ниже приведен мой код любые входные данные

Строки списка = driver.findElements(По.xpath(«//tbody[@role=’группа строк’]/tr»)); int rowcount = rows.size();

         String loadmoreXpath = AppXPathsConstants.buttonXpath_replace.replace("XXXX","Load More");
    
        if(driver.findElements(By.xpath(loadmoreXpath)).size()!= 0) 
        {
            
        WebElement loadmoreElem = DriverUtil.getFluentWaitElementByXPath(loadmoreXpath,20, driver);
    
        do
        {
            PageUtil.scrolltoBottom(driver);
            WebDriverWait wait = new WebDriverWait(driver,60);
            wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(@class,'mat-button-wrapper') and contains(normalize-space(),'Load More')]")));
            loadmoreElem.click();
            DriverUtil.waitTime(6000);
            WebDriverWait w = new WebDriverWait(driver,10);
             w.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(loadmoreXpath)));
        }

        while(driver.findElements(By.xpath("//span[contains(@class,'mat-button-wrapper') and contains(normalize-space(),'Load More')]")).size()>0);
        }
 

Трассировка стека:
И при запуске кода я получаю следующую проблему:
org.openqa.selenium.Исключение TimeoutException: Ожидаемое условие не выполнено: ожидание, пока элемент больше не будет виден: By.xpath: //span[содержит(@класс, «оболочка для кнопок») и содержит(нормализовать пространство (), «Загрузить больше»)] (попытка в течение 10 секунд с интервалом 500 миллисекунд)

Комментарии:

1. Можете ли вы поделиться URL-адресом?

2. @pmadhu — извините, не могу этого сделать

3. По крайней мере, поделитесь полным сообщением об ошибке.

4. @pmadhu — добавлена трассировка стека

5. WebElement loadmoreElems определяется вне цикла, переопределите его внутри цикла еще раз и попробуйте.

Ответ №1:

Я думаю, это потому, что вы определяете loadmoreElems (в цикле) после выполнения операции щелчка. Поэтому он нажимает на Load More кнопку один раз, потому что вы определили loadmoreElems вне цикла. После 1-го щелчка вы не определяете его перед операцией щелчка, и ранее определенное loadmoreElems значение больше не действует.

Определите это до этого и попробуйте:

 WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[contains(@class,'mat-button-wrapper') and contains(normalize-space(),'Load More')]")));
loadmoreElems = DriverUtil.getFluentWaitElementByXPath(loadmoreXpath,20, driver);
loadmoreElems.click();
if(!loadmoreElem.isDisplayed())...
 

Комментарии:

1. это не решает проблему, даже если она определена внутри или снаружи, это не проблема-если есть какие — либо другие входные данные, пожалуйста, дайте мне знать — @pmadhu

2. Щелкнул ли он Load more только один раз, как раньше. Или он щелкнул дважды?

3. только один раз он щелкнул

4. @Sandy — Сталкивались с подобной ситуацией. Проверьте этот код один раз, это может вам помочь. Просмотры в очках-показать больше