#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 — Сталкивались с подобной ситуацией. Проверьте этот код один раз, это может вам помочь. Просмотры в очках-показать больше