Selenium Java Продолжайте обновлять страницу, пока элемент не виден - PullRequest
0 голосов
/ 23 января 2019

Selenium Java Продолжайте обновлять страницу до тех пор, пока элемент не будет виден.

Мне нужно, чтобы страница обновлялась до тех пор, пока элемент не будет виден.

do{
        driver.navigate().refresh();
    //DEV
}while(!driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());

Этот код обновляется только один раз.Мне нужно обновить (10 или более раз), пока элемент не будет виден.

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Вы можете проверить размер элемента, подняв его, используя List<WebElement>, а затем обновить страницу, пока размер списка не станет больше 0 (так как размер списка этого элемента станет больше 0, когда отображается в интерфейсе пользователя).

Код для вышеуказанной логики может быть таким:

    int refreshCount = 10;    
    List<WebElement> element = driver.findElements(By.xpath("//[text()='UserID']"));    
    for (int i = 0; i < refreshCount; i++) {    
        if (element.size() > 0) {     
            // Do the operation here on the element    
        } else {    
            driver.navigate().refresh();    
        }     
    }
0 голосов
/ 24 января 2019

Вы можете использовать findElements вместо findElement или вы можете обработать исключение && внедрить счетчик для здравомыслия, как упомянуто @ Todor.

findElements() вернет пустой список, если не найдены соответствующие элементы вместоисключение.

do {
//xyz
} while(driver.findElements(By.xpath("//*[text()='UserID']")).isEmpty())

Это вернет true, если хотя бы один элемент найден, и false, если он не существует.

Из документов

Каждыйязыковых привязок предоставляет метод «Найти элемент» и «Найти элементы».Первый возвращает объект WebElement, соответствующий запросу, и выдает исключение , если такой элемент не может быть найден.Последний возвращает список веб-элементов, возможно, пустой, если ни один из элементов DOM не соответствует запросу.

0 голосов
/ 24 января 2019

findElement() выдает исключение, если элемент отсутствует - таким образом цикл вращается один раз, исключение выдается, и цикл останавливается. Так что вам нужно справиться с этим:

boolean displayed = false;
do{
  try{
    displayed = driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());
  } catch (NoSuchElementException){
    driver.navigate().refresh();
  }
} while(!displayed);

Не будет Херд, если вы добавите логику счетчика / таймера макс., Иначе, если элемент не появится, цикл будет вращаться бесконечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...