Нужна общая функция Selenium framework для видимости следующего элемента

Нужна общая функция Selenium framework для видимости следующего элемента. У меня есть веб-приложение, загрузка которого занимает немного больше времени, и я создаю для него инфраструктуру автоматизации java Selenium. В настоящее время я использую:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("<xpath>")));

Но используя его для каждого элемента, например, когда я нажимаю на элемент A, затем жду загрузки элемента B, затем нажимаю на элемент B, затем жду элемент C, затем нажимаю на элемент C.

Я хочу исключить этап ожидания для каждого элемента, которому нужна общая функция, которую можно использовать для смягчения этого. Я новичок в селене, поэтому подробное объяснение с примером кода будет очень признательно.

Заранее спасибо.


person Amirtaraj R    schedule 24.07.2019    source источник
comment
ExpectedConditions методы являются распространенным способом сделать это.   -  person Guy    schedule 24.07.2019
comment
Сделали отдельный базовый класс для этих общих функций, поэтому может кто-нибудь рассказать, как это можно сделать? Если мне просто нужно вызвать функцию из базового класса, тогда было бы хорошо, или ее можно было бы обрабатывать для всех строк кода по умолчанию, что было бы намного лучше.   -  person Amirtaraj R    schedule 24.07.2019


Ответы (1)


Вы почти у цели, это будет что-то вроде:

public WebElement waitForElement(WebDriver driver, String xpath) {
    return new WebDriverWait(driver, 10)
            .ignoring(NoSuchElementException.class)
            .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)));
}

Я добавил строку для обхода NoSuchElementException что произойдет, если элемент отсутствует на странице как visibilityOfElementLocated предполагает, что элемент присутствует в DOM и выдаст вышеупомянутое исключение, если элемента там нет.

Другой вариант — Шаблон проектирования объектной модели страницы

person Dmitri T    schedule 24.07.2019