Всем привет!
Недавно вышла версия Selenide 2.10. Что новенького нас ждёт?
Новые функции
Работа с вкладками и окнами
В Selenium WebDriver неудобно работать с окнами. Selenium предлагает только метод getWindowHandles(), который
возвращает множество (Set) строк - идентификаторов открытых окон. Найти среди них нужное - нетривиальная задача.
Поскольку задача Selenide - освободить голову программиста от технических вопросов, мы хотим сделать работу с
окнами/вкладками максимально простой и интуитивной. Начали мы с простого: добавили метод
Selenide.switchToWindow(String title)
Пример использования можно подсмотреть здесь:
@Test
public void canSwitchToWindowByTitle() {
$(byText("Page2: alerts")).click();
$(byText("Page1: uploads")).click();
switchToWindow("Test::alerts");
$("h1").shouldHave(text("Page with alerts"));
switchToWindow("Test::uploads");
$("h1").shouldHave(text("File uploads"));
}
У нас в планах продолжать работу в этом направлении. Возможно, с использованием новых фич из Java 8.
А как вам было бы удобнее с окнами и фреймами? Делитесь своими идеями!
Новые методы для динамики $.hover()
и $.dragAndDropTo(target)
Метод $.hover()
эмулирует наведение мышкой на элемент (без клика).
Примеры здесь.
А метод $.dragAndDropTo(target)
позволяет перетащить элемент в другое место. Пример:
$("#from").dragAndDropTo("#to")
Новые методы для поиска родительских элементов $.parent() и $.closest()
Часто в тестах бывает удобно найти родительский элемент. Или даже не просто родительский, а ближайший потомок, соответствующий какому-то критерию.
Например, я часто ищу по тексту DIV, находящийся внутри таблицы, и затем хочу получить ряд таблицы, в котором этот DIV находится.
Раньше это иначе как через XPath сделать было невозможно.
Теперь можно писать так:
$(byText("Row 1")).parent();
$(byText("Row 2")).closest("tr");
$(By.name("firstName")).closest(".form");
Пример здесь
Ловля JavaScript ошибок
Теперь Selenide пытается автоматически отлавливать JavaScript ошибки, случающиеся на странице.
Что мы с ними делаем?
Прежде всего, когда ваш тест падает, Selenide автоматически добавляет в сообщение об ошибке список JS ошибок (если они были).
В принципе этого уже достаточно. Но если вы хотите большего контроля, есть два специальных метода:
Selenide.getJavascriptErrors()
- возвращает список всех ошибок на текущей странице.Selenide.assertNoJavascriptErrors()
- валит тест, если были какие-то ошибки.
P.S. Пока что это делается довольно просто (через функцию window.onerror
). Она вроде как не во всех
браузерах работает, и не все ошибки отлавливает, так что если у вас есть соображения, как это можно делать
лучше - смело делитесь.
Багфиксы и улучшения
Закрытие вебдрайверов
Механизм автоматического закрытия вебдрайверов был улучшен для случаев, когда вебдрайверов несколько, и один из них завис. Спасибо Александру Гавриленко за это - совсем нетривиальное - исправление!
Selenide больше не ждёт появления <body>
Метод open(url)
больше не ждёт, пока в теле страницы появится тэг <body>.
Этот атавизм остался с тех давних пор, когда Selenide ещё умел ожидать наступления событий.
Метод savePageSourceToFile пытается закрыть все alert
.
Когда в ходе выполнения теста на странице выскакивает неожиданный alert, грохается не только сам тест, но и попытка сделать скриншот, и даже попытка сохранить исходный код страницы.
Теперь Selenide после падения теста пытается закрыть все алерты, чтобы хоть как-то сохранить код страницы и скриншот. Ну чтобы хоть какая-то информация осталась.
Обновились до Selenium 2.41.0
Как обычно, мы обновились до последней версии Selenium.
Каких-то проблем с новым селениумом пока не замечено. Всё работает как часы.
Другие новости
Мартовская статистика скачиваний Selenide из центрального репозитория несказанно нас порадовала.
Нас резко стало почти вдвое больше!

А что у вас новенького?
27.04.14