Вышла Selenide 4.10

Вышла Selenide 4.10

Быстрый $$ и headless на гриде
12.01.18

Категорический привет!

Новогодние каникулы оказались очень плодотворными. Мы успели смержить кучу пуллреквестов, которые долго ждали своего часа.

Итак, с чем мы встречаем старый новый год?

Что вы получите, обновившись на Selenide 4.10?


Добавили метод $.scrollIntoView()

Его удобно использовать, чтобы прокрутить браузер к нужному месту. Например, это бывает полезно, чтобы обойти баги браузеров, которые иногда не могут кликнуть на элемент, находящийся за областью видимости.

Если конкретнее, метод $.scrollIntoView() даёт команду браузеру проскроллить страницу так, чтобы данный элемент оказался в видимой области экрана.

У метода может быть как boolean параметр:

$("#my-button").scrollIntoView(true);  // верх кнопки будет у верхней границы видимой области
$("#my-button").scrollIntoView(false); // низ кнопки будет у нижней границы видимой области

так и более продвинутый строкой параметр:

$("#my-button").scrollIntoView("{block: \"end\"}");
$("#my-button").scrollIntoView("{behavior: \"instant\", block: \"end\", inline: \"nearest\"}");

Подробности читайте в javadoc, там всё есть.

См. issue 649

Спасибо Aleksandr Rasolka за pull request 656.


Теперь можно запускать браузеры headless на гриде

Если вы гоняете тесты на Selenium Grid, вы сможете открывать там браузеры в режиме headless. Для этого надо всего-то навсего пару строк:

Configuration.remote = "http://selenium-grid-host:port/wd/hub";
Configuration.headless = true;

См. issue 660

Спасибо Boris Osipov за pull request 661.


Теперь можно устанавливать “кастомные капабилити” для Chrome и Firefox

Вы можете в настройках Selenide прописать свои “Capabilities”, и Selenide будет их автоматически использовать при открытии браузера:

Configuration.browserCapabilities = new DesiredCapabilities();
Configuration.browserCapabilities.setCapability(SOME_CAP, "SOME_VALUE_FROM_CONFIGURATION");

См. issue 556

Спасибо Sergey Pirogov за pull request 556 и Boris Osipov за pull request 664.


Мы ускорили итерирование коллекций $$

Наши внимательные читатели обнаружили, что вот такое итерирование коллекции - медленное:

$$("span").forEach(item -> item.is(visible));

Потому, что на каждом шаге Selenide загружает все элементы заново. См. issue 641

Мы это дело подправили. Теперь этот цикл должен работать гораздо быстрее. Спасибо Artem Savosik за pull request 653.


Добавили заголовок “User-Agent” при скачивании файлов

Как вы знаете, Selenide скачивает файлы с помощью отдельного http-запроса, к которому он добавляет все куки из браузера. Кое-где метод $().download() не работал, потому что хитрое приложение, кроме кук, проверяло ещё и User-Agent. См. issue 639

Теперь Selenide копирует из заголовок User-Agent из браузера в запрос.

Спасибо Aleksandr Rasolka за pull request 657.


Теперь методы byText и withText понимают “неразрывные” пробелы

Представьте, что на странице есть такой элемент:

<span>Hello&nbsp;world</span>

До сих пор команда $(byText("Hello world")) или $(withText("Hello world")) его не находила. Теперь будет находить.

Мы научили методы byText и withText понимать “неразрывные” пробелы, т.е. “non-breakable spaces”, или символы &nbsp или \u00A0. Точнее, эти пробелы теперь приравниваются к обычным пробелам.

См. issue 597


Обновились до phantomjsdriver 1.4.4

Который, в свою очередь, отличается от предыдущей версии только тем, что обновлён на selenium 3.8.1. Правда, при этом несколько его собственных тестов сломались, и мы их тупо заигнорили. Так что если вы всё ещё используете PhantomJS - смотрите в оба.


Обновились до htmlunit 2.29 и guava:23.6-jre

… На всякий случай


Новости

Приглашаю всех в Киев на отличную конференцию SeleniumCamp 2-3 марта 2018!

2 дня, три трека. 500+ участников. И Киев - прекрасный город.

Программа конференции ещё формируется, но список докладчиков уже впечатляет. И я там буду, мёд-пиво пить!


Всех с @Deprecated Новым Годом!

Андрей Солнцев

ru.selenide.org

12.01.18