Привет!
Мы выпустили Selenide 3.9.1!
Киллер фича! Selenide умеет скачивать любые файлы! Откуда угодно.
Мы хотели сделать это давно, и вот наконец свершилось! Бесконечные проблемы со скачиванием файлов в селениуме ушли в прошлое. Теперь это легко. Всегда. Один простой метод на все случаи жизни:
File report = $("input#submit").download();
В Selenide метод download
существует давно.
Но до сих пор он умел скачивать файлы только по ссылке с атрибутом href: <a href
.
Это было круто, но в некоторых случаях недостаточно. Например:
- Клик по кнопке сабмитит форму, а в результате сабмита начинает скачиваться файл.
- Клик по кнопке открывает PDF в новом табе (режим “inline” - встроенный просмотрщик PDF в браузере)
Теперь же Selenide умеет скачивать любые файлы. Для этого он использует встроенный proxy-сервер (а именно, BrowserMobProxy)
Как именно работает скачивание:
- Тест вызывает команду
$("selector").download();
- Selenide активизирует прокси-сервер
- Selenide кликает элемент
- Прокси сервер запоминает все ответы сервера (response), которые содержат http-заголовок
Content-Disposition
. Из него Selenide достаёт имя файла и сохранят файл с таким именем в папкеbuild/reports/tests
. - Selenide ждёт (до 4 секунд), пока в списке не появится хотя бы один файл
- Метод
$.download()
возвращает первый скачанный файл. - Если за это время появились новые окна, Selenide закрывает всех их. Это нужно для тех случаев, когда PDF открывается в новом окне браузера.
См. issue #196 и pull request #267.
Огромное спасибо Дмитрию Демину за вклад в эту фичу, предложения и обсуждения!
Прокси-сервер
Да, теперь Selenide запускает свой прокси-сервер во время запуска тестов.
В будущем мы сможем использовать прокси-сервер для реализации многих других полезных возможностей. Например, проверять http статусы страниц и других ресурсов, внедрять свой код в страницы и пр.
Кидайте идеи, давайте побрейнстормим!
Предупреждение о слишком больших запросах и ответах
А вот и первое использование прокси-сервера (помимо скачивания файлов). Теперь Selenide отслеживает размер запросов-ответов и пишет предупреждение в лог, если размер какого-то реквеста или респонса превышает 2 MB.
Пока это экспериментальная фича. Расскажите, как она прижилась у вас. Обнаружили что-то полезное? Были ли проблемы?
См. issue #383
Теперь листенер SoftAsserts
нормально работает с TestNG
Оказалось, TestNG конкретная редиска и вообще нехороший фреймворк.
Если вы объявляете @Listeners(SoftAsserts.class)
у одного класса, TestNG автоматически
применяет его ко всем вашим классам. Нет, ну это надо было додуматься, а!
Мы нашли решение для этой проблемы. Теперь листенер SoftAsserts
сам
проверяет, объявлен ли он у текущего тестового класса (или его предка).
См. issue #384
Теперь аннотация SoftAsserts
для TestNG игнорирует тесты с атрибутом “expectedExceptions”
Если у вас есть такой тест:
@Listeners(SoftAsserts.class)
public class MyTest {
@Test
public void myCheckA() {...}
@Test(expectedExceptions = ...)
public void myCheckB() {...}
}
то очевидно, что SoftAsserts
должны включаться в методе myCheckA
,
но не должны в методе myCheckB
. Потому что он ожидает какую-то
конкретную ошибку, и если SoftAsserts
её спрячет, испортит всё дело.
См. issue #372
Исправили ошибку с basic auth в браузере IE
См. issue #366 и pull request #369
Спасибо Anton Aftakhov за этот pull request!
Обновились до библиотеки gson 2.7
Сам Selenium использует довольно старый gson 2.3.1, а в некоторых проектах бывает нужен более новый.
Новости
- Моё интервью на хабре: О Legacy-коде без максимализма
- Почему разработчики должны быть хорошими тестировщиками
- Вышел video-recorder 1.0.8 - и это чумовая вещь! Теперь production ready.
- Подкаст RadioQA Выпуск 28: Стыд и scrum
Обновляйтесь!
ru.selenide.org
27.08.16