Ожидание перед действием Selenium WebDriver

204
12 декабря 2017, 19:11

Доброго времени суток. Столкнулся с такой проблемой. В рамках теста на странице сайта открывается изображение. Открывается - в смысле разворачивается и имеет на рамке кнопку [close], либо закрывается после клика в не области изображения. И вот суть проблемы.

При развернутом изображении страница сайта неактивно, а анимация "закрытие" картинки занимается какое-то время. То есть по сути нажатие на [close] уже отработала, а работать дальше с сайтом еще нельзя и тест падает.

Сам я выкрутился их ситуации с помощью Thread.sleep(); но понимаю что это не решение проблемы. Может кто подскажет что-то более элегантное?

Так же пробовал решить проблему так:

 public void waitForCloseImg(){            
    wait.until(ExpectedConditions.presenceOfElementLocated(By.()));
    }

Но какого события мне ждать?

Answer 1

Все правильно думаете, лучшая практика в таких случаях - это явные ожидания. Для попап элементов лучше использовать состояния, связанные с видимостью или кликабельностью элементов. Не достаточно просто проверить, что элемент есть или нет в DOM, так как он может быть невидимым. Изучите модуль ExpectedConditions, думаю найдете там много полезных классов.

Для ожидания появления и исчезания всплывающего окна используем соответственно:

ExpectedCondition.visibilityOfElementLocated(By locator)
ExpectedCondition.invisibilityOfElementLocated(By locator)

Что касается ожидания именно загрузки изображения, то нужна ли вам фактическая загрузка? На тесты же никто смотреть не будет, т.е. можно просто проверить, что появился элемент img с правильным атрибутом scr (или другой элемент с правильным классом, если картинка идет как бэкграунд)

READ ALSO
Как скомбинировать нажатия “Ctrl” и “+”?

Как скомбинировать нажатия “Ctrl” и “+”?

Мне нужно чтоб браузер изменил свои масштаб ( zoom in/out ), пытаюсь это организовать следующими метода, но ни один из них не работаетПрошу помогите

232
Elasticsearch combining filters

Elasticsearch combining filters

Здраствуйте, я пытаюсь создать QueryBuilder По аналагии Mysql

256
StreamCorruptedException при Сериализации

StreamCorruptedException при Сериализации

Есть класс(Example) который реализует интерфейс Serializable

180
Настройка log4j2 для потоков

Настройка log4j2 для потоков

Есть класс Test, потомок ThreadКак мне настроить log4j2 что бы для каждого потока Test создавался свой лог файл

229