Прошло какое-то время с момента последнего релиза, и настала пора поделиться с вами, дорогие участники нашего коммьюнити, новой функциональностью. Вот, что мы приготовили для вас в новой версии.
С помощью этого типизированного элмента вы можете очень просто заполнять стандартные веб-формы.
Пусть, например, у вас на странице есть форма, которую нужно заполнить данными, хранящимися в каком-то бине
(POJO бизнес-объекте). Сделать это можно очень легко:
MyBean bean = getBean();
Map<String, Object> beanMap = convertToMap(bean);
form.fill(beanMap);
form.submit();
Вы конвертируете бин в Map
, где ключами должны быть имена полей формы, а значениями - данные, которые нужно ввести
в поля. При вызове метода fill
поля формы будут заполнены значениями, полученными вызовом метода toString
у значений
переданного Map
.
Этот типизированный элемент позволяет удобно работать с данными, содержащимися в HTML-таблицах.
С помощью элемента FileInput
вы сможете легко загружать файлы на сервер при тестировании, даже в том случае, если вы
запускаете тесты на удаленном браузере.
Это очень простой типизированный элемент, который пригодится при работе с текстовыми блоками на странице.
В этой версии мы обобщили идеи матчеров WaitForMatcherDecorator и RefreshMatcherDecorator из предыдущей версии и сделали обощенный механизм декорирования матчеров. Теперь можно декорировать матчер ожиданием какого-либо собфтия, действием или условием.
Декориорование матчера ожиданием по таймауту выглядит так:
assertThat(element, should(exists()).whileWaitingUntil(timeoutHasExpired(SECONDS.toMillis(5))));
Задекорировать матчер действием можно так:
assertThat(element, should(exists()).after(pageRefresh(driver)));
А добавить проверку условия перед матчером можно так:
assertThat(element, should(hasText("Text")).inCase(element, exists()));
Эта конструкция эквивалентна добавлению assumeThat
перед проверкой, но гораздо более компактна и позволяет сочетать
декорирование условием с декораторами другого типа (см. ниже).
Также можно комбинировать декораторы друг с другом. Например:
assertThat(mailsList, should(hasMailWithSubject("Subject")).after(pageRefresh(driver)).whileWaitingUntil(timeoutHasExpired());
Эта конструкция будет в течении 30 секунд обновлять страницу каждую секунду и проверять, появилось ли на странице в списке писем нужное письмо. Как только письмо появится, матчер закончит свое выполнение и проверка пройдет успешно. В противном случае по истечении таймаута будет возвращена ошибка.
MatcherDecoratorsBuilder javadoc
Раньше селектор блока определялся по аннотации @FindBy
поля класса либо, если она не указана, по аннотации @Block
класса этого
поля. И поэтому в случае иерархии классов блоков приходилось указывать селектор по умолчанию у каждого из классов в иерархии.
Теперь при определении селектора блока также учитываются аннотации @Block
классов-предков. Чем дальше предок по иерархии,
тем меньше приоритет его аннотации.
В прошлых версиях мы использовали нектороые матчеры из Selenium WebDriver (hasText
и hasAttribute
), но у них не был
переопределен метод describeMismatchSafely
. Поэтому сообщения об ошибке для них выглядели неинформативно. В новой версии
этот недостаток исправлен.
Теперь при инициализации блоков и типизированных элментов используются именованные прокси для WebElement
'ов с тем же
именем, что и сам блок или типизированный элемент. Это позволет обладать именем элмента при использовании
getWrappedElement
в матчерах (напрмиер, в WrapsElementMatcher
).
Версия Selenium обновлена до 2.32.0.