Есть ли в Selenium функционал ожидания последнего “подгружаемого” элемента?
Вот например на странице cat - Wolfram|Alpha
в течение нескольких секунд добавляются картинки.
Или в личном кабинете МТС в случайном порядке подгружаются инфоблоки.
Оптимально было бы ждать не загрузки основной страницы (она пустая и загружается быстро) а того момента, когда уже N миллисекунд не осуществляется ajax-запросов к серверу (считаем, что страница загрузилась полностью, можно делать снимок экрана)
На сколько я знаю, то “из коробки” у Selenium такого ожидания нет.
Вы должны самостоятельно “сказать” ему чего следует дождаться.
У разных страниц, у разных приложений признаки “полной” загрузки страницы могут быть принципиально разными. Поэтому сложно придумать такое ожидание, которое покрывало бы все варианты.
universalnogo methoda net, no ya ispolzyuu vot eto dlya kajdogo konkretnogo slychaya
public WebElement elemIsClickable() {
return (new WebDriverWait(wd, 5))
.until(ExpectedConditions.elementToBeClickable(By.)));
Дело в том, что подгружаться могут не только XHR-запросы, а, например, картинки.
(загружаю карту)
Тут, видимо, требуется отслеживать количество текущих (незаконченных) запросов браузера
и время завершения последнего.
Решение проблемы вижу так:
на открытой странице нужно навесить обработчик события загрузки ресурса (есть такие в DOM-модели?) в котором проставлять время события в глобальную переменную.
Если от момента завершения последнего события загрузки (скрипта, картинки, css и т.п.) прошло более N секунд - считаем что загрузка страницы завершена
Возможно, я не до конца понимаю задачу, но при разработке стараюсь придерживаться принципа: “делай сейчас как можно проще и не забывай о возможных изменениях в будущем”
Поэтому
Если не странице с картой необходимо проверить checkbox, fields и другие DOM элементы, события readyState == ‘complete’; будет достаточно
2.Если необходимо проверить элементы на самой карте, опишите карту в виде отдельного объекта, и в этот объект включите проверку того, что карта загружена(как вашей душе угодно, возможно просто проверить что такой-то город отображается на карте в течении допустимого интервала времени). Инициализируйте этот объект только в тестах использующих карту
проблема - часть “тайлов” карты может не загрузиться (по разным причинам). В таком случае лучше перезапустить задачу (5-10 минут не критичны) чем выставлять на показ “кривой” скриншот.