Остановись, мгновение!
Вышел уже второй релиз в октябре Selenide 7.12.0, успеть бы обновиться!
Мне не передать словами весь спектр чувств…
Когда ты каждый месяц пилишь чего-то там, релизишь, и вдруг видишь, что люди читают релиз ноутсы, обновляются —
это ли не лучшая награда?
byLabelbyPlaceholder, byTitle, byAltTextbyTestIdbyShadowCss$.unhighlight()Теперь Селенид для снятия скриншотов использует не стандартный вебдрайверовский метод, в DevTools (в хроме) или BiDi (в фаерфоксе). Во время работы над видео рекордером мы заметили, что этот способ
Теперь этот механизм распространился из видео рекордера на вообще все скриншоты в селениде.
См. issue 2712 и PR 3153.
byLabelЕсть теория, что веб-элементы в тестах лучше искать не по айдишникам и икспатхам, а так, как настоящий пользователь - по тексту или метке (label). Поиск по тексту был в селениде уже с версии 1.7 (2012 года), а теперь вот добавили поиск по метке:
$(byLabel("Song title")).val("Лебединое озеро");
Вторым параметром можно указать,
$(byLabel("Song title"), fullText()).val("Лебединое озеро");
$(byLabel("Song"), partialText()).val("Светлая полоса");
$(byLabel("Song title"), fullText().trimWhitespaces()).val("Ты солдат");
$(byLabel("Songtitle"), fullText().ignoreWhitespaces()).val("Это было в России");
$(byLabel("SONG TITLE"), fullText().caseInsensitive()).val("Папина любовница");
См. PR 3148.
byPlaceholder, byTitle, byAltTextНакидали ещё новых локаторов - поиск элементов по атрибутам placeholder, title и alt. Честно говоря, вы могли их и раньше использовать (года с 2014, с версии 1.10):
$(by("placeholder", "dovboyob"));
$(by("title", "jobu"));
$(by("alt", "Hloupá kurva"));
Но теперь появились отдельные методы - вдруг это послужит кому-то подсказкой.
$(byPlaceholder("Укажите статью"))
.val("Организация массового одновременного пребывания и (или) передвижения граждан в общественных местах, повлекших нарушение общественного порядка");
$(byTitle("Чёртова картошка по вых"), partialText())
.hover();
$(byAltText("Картинка для привлечения"), partialText().ignoreWhitespaces())
.shouldBe(image);
Во всех этих методах, опять же, можно указать вторым параметром
См. PR 3151.
byTestIdОчень популярный паттерн - вешать на элементы искусственные айдишники data-test-id, чтобы в тестах именно по ним надёжно искать элементы.
<div data-test-id="top-quote">Чипсы - чешуйки сатаны</div>
Опять же, и раньше ничто не мешало это делать в селениде: $("[data-test-id='top-quote']"), но теперь есть отдельный метод:
$(byTestId("top-quote"))
.shouldHave(text("Чипсы - чешуйки сатаны"));
Одна загвоздка - у всех этот атрибут называется по-разному. В селениде по умолчанию он будет data-test-id - просто потому, что мне так нравится. :)
Если хотите его кастомизировать, есть два способа:
System.setProperty("selenide.test-id.attribute", "data-testid")selenide.properties:selenide.test-id.attribute=data-testidСм. PR 3151.
В селениде уже лет 6 есть возможность включить режим эмуляции мобильного браузера. Но чтобы его включить, нужно было открыть новый браузер.
А теперь можно включать-выключать мобильный режим в уже открытом браузере:
emulateDevice(Device.ONEPLUS_7T);
resetEmulation();
emulateDevice(Device.GALAXY_S21);
resetEmulation();
emulateDevice(new Device("Nokia 3210", 240, 320, 0.5));
resetEmulation();
(Это всё мои реальные телефоны. Угадайте, какой любимый?)
См. issue 2094 и PR 3159.
В селениде давно есть метод, чтобы получить логи браузера (в т.ч. JavaScript ошибки с тестируемой страницы):
List<String> webDriverLogs = getWebDriverLogs(BROWSER, Level.ALL);
assertThat(webDriverLogs).hasSize(6);
assertThat(webDriverLogs.get(0))
.contains("/bank/login 12:18 .*ReferenceError: \\$ is not defined");
Проблема в том, что этот метод не работал в Firefox. Потому, что Firefox не поддерживает стандартный вебдрайверовский метод webdriver.manage().logs().
Теперь же этот метод будет работать во всех нормальных браузерах, ведь отныне мы собираем логи браузера через протокол BiDi. Который типа тоже w3c стандарт и поддерживается как минимум в Chromium и Firefox.
См. issue 1636 и PR 3156.
byShadowCssКароч, теперь можно написать вот такой поиск:
$("#shadow-host")
.find(shadowCss("p")) // раньше тут требовался второй аргумент
.shouldHave(text("Inside Shadow-DOM"));
А раньше этот код не компилировался, потому что shadowCss("p") требовал второго аргумента.
См. issue 3142. Спасибо Vivien Tintillier за PR 3143.
$.unhighlight()Есть у нас метод $.highlight(), который давно уже страдал от одиночества. Не хватало ему пары.
Теперь вы можете как подсветить, так и отсветить обратно любой элемент:
$("#naoko").highlight();
$("#naoko").selectOption("13");
$("#naoko").unhighlight();
См. issue 3057 и PR 3155.
И подняли версию CDP с v140 до v142.
Вот такой мясистый релизец получился.
Обновляйтесь, радуйтесь, не теряйте оптимизма. Светлая полоса где-то там не за горами.
И пусть танцуют лебеди!
29.10.25