Вышла Selenide 5.10.0

Вышла Selenide 5.10.0

Шалом тебе, Shadow DOM!
18.03.20

Здоровендос!

Шёл третий день карантина.

Чтобы вам не было одиноко, мы выпустили Selenide 5.10.0 с кучей улучшений, некоторые из которых даже окажутся капельку обратно несовместимыми. Ну, чтобы вы не скучали в своих берлогах.

Добавили поддержку Shadow DOM

См. примеры в тестах:

$(shadowCss("#anyButton", "#shadow-host")).click();

$(shadowCss("p", "#shadow-host")).shouldHave(text("Inside Shadow-DOM"));

$(shadowCss("p", "#shadow-host", "#inner-shadow-host")).shouldHave(text("The Shadow-DOM inside another shadow tree"));

Firefox: Вызов setValue("test") / val("text") на input элементе выкидывает ошибку “not reachable by keyboard”.
Как временное решение, можно использовать fastSetValue=true:

Configuration.fastSetValue = true;
$(shadowCss("input", "#shadow-host")).setValue("test");

См. issue 1014.
Спасибо Dmytro Stekanov за PR 1090.

Selenide больше не тянет BrowserUpProxy по умолчанию

Изначально это предложил Алексей Баранцев, так что бейте его, если что. :)

Мы сопоставили вместе два факта:

  1. Селенид по умолчанию тянет за собой BrowserUpProxy и его зависимости - всего ~17 мегабайт.
  2. Большинство пользователей (наверное) не использует селенидовский прокси.

и решили обрадовать Грету Тумберг и не качать эти 17 мегабайт по умолчанию.

Зависимость

Те из вас, кто использует прокси, просто должны добавить в свой проект ещё одну зависимость:

testRuntime 'com.browserup:browserup-proxy-core:2.0.1'

(у многих из вас она и так уже есть).

Если вы забудете добавить зависимость - не беспокойтесь, вы увидите понятное сообщение:

java.lang.IllegalStateException: Cannot initialize proxy. Probably you should add BrowserUpProxy dependency to your project.
    at com.codeborne.selenide.drivercommands.CreateDriverCommand.createDriver(CreateDriverCommand.java:44)
    ...
    at com.codeborne.selenide.Selenide.open(Selenide.java:41)
caused by: java.lang.NoClassDefFoundError: com/browserup/bup/BrowserUpProxy

См. issue 1021 и PR 1094.

UPD 12.03.2023 В наше время больше не нужно добавлять ту зависимость browserup-proxy-core. Просто используйте com.codeborne:selenide-proxy вместо com.codeborne:selenide, и все нужные зависимости подтянутся автоматически.

Просто из интереса

Кто же там сжирает эти 17 мегабайт, спросите вы? А вот кто.
Вот полный список файлов, которые должны у вас пропасть из проекта. Список впечатляет, правда?

  • animal-sniffer-annotations-1.17.jar
  • barchart-udt-bundle-2.3.0.jar
  • bcpkix-jdk15on-1.62.jar
  • bcprov-jdk15on-1.62.jar
  • browserup-proxy-core-2.0.1.jar
  • browserup-proxy-mitm-2.0.1.jar
  • checker-qual-2.5.2.jar
  • dec-0.1.2.jar
  • dnsjava-2.1.9.jar
  • error_prone_annotations-2.2.0.jar
  • failureaccess-1.0.1.jar
  • guava-27.1-jre.jar
  • jackson-annotations-2.9.9.jar
  • jackson-core-2.9.9.jar
  • jackson-databind-2.9.9.1.jar
  • javassist-3.25.0-GA.jar
  • javax.activation-api-1.2.0.jar
  • jaxb-api-2.3.1.jar
  • jcl-over-slf4j-1.7.28.jar
  • jsr305-3.0.2.jar
  • jzlib-1.1.3.jar
  • listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
  • littleproxy-2.0.0-beta-5.jar
  • netty-all-4.1.39.Final.jar

Кто придумал название “animal-sniffer”? Это что вообще такое - нюхальщик животных?

Поменяли Guava API на соответствующие Java API

Мы просто поменяли

  • com.google.common.base.Predicate из Guava
  • на java.util.function.Predicate из Java 8

и выкинули Guava. Guava, ты была хороша и сделала много полезного (пока не вышла Java 8). Покойся с миром.

Если вы реализовали свои CollectionCondition, вам придётся метод apply переименовать в test. Это должно быть легко.

См. issue 1091.
Спасибо Wladimir Schmidt за PR 1091.


Сделали селенидовский отчёт в Allure чуточку красивее

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

См. issue 1032.
Спасибо Dmytro Stekanov за PR 1092.


Добавили условие $("img").shouldBe(image)

Позволяет проверить, что картинка есть, она загрузилась и всё в порядке.

См. примеры в тестах:

$("#valid-image img").shouldBe(image);
$("#valid-image").shouldNotBe(image);
$("h1").shouldNotBe(image);

См. issue 1069.
Спасибо Dmytro Stekanov за PR 1086.


Исправили поиск элементов по атрибуту, который содержит кавычки

Я не знаю, каким надо быть извращенцем, чтобы в html атрибут запихать кавычки, но такие нашлись. А селенид оказался к этому не готов и генерировал невалидный CSS локатор. Теперь это в прошлом.

См. issue 1060.
Спасибо Denys Lystopadskyy за PR 1062.


Видосики

Немногие задумывались об этом, но возможно, SeleniumCamp 2020 - Последняя Конференция Человечества.

Но они ещё и последние альтруисты человечества, потому что из-за карантина они досрочно выложили все видео с последней конференции в открытый доступ.
Лечитесь, айтишники, и просвещайтесь!

Там есть три моих доклада:

И ещё из того, что я успел заметить:


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

ru.selenide.org

18.03.20