Вышла Selenide 6.19.0

Вышла Selenide 6.19.0

Ипучая действительность
28.09.23

Всем привет! На излёте сентября вы выкатили Selenide 6.19.0.

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


Новый метод $.highlight() для подсветки элемента

Чувствую, открываем очередной ящик Пандоры, но что поделать.

В общем, мы добавили метод для подсветки элемента.

Зачем это надо?

Честно говоря, незачем. :)

  • Когда у вас тесты автоматически бегают на CI, никто на них смотреть не должен, и подсвечивать ничего не нужно.
  • Но вот если надо сделать крутое демо на конференции или просто показать коллегам - тут подсветка может пригодиться. Или, скажем, когда вы дебажите какой-то тест, сложный случай, когда непонятно, что куда кликается.

Как именно он подсвечивается?

На данный момент есть два варианта подсветки: цветным фоном (по умолчанию) или рамкой.

import static com.codeborne.selenide.HighlightOptions.*;

$("h1").highlight();              // по умолчанию - background()
$("h1").highlight(background());  // цветной фон
$("h1").highlight(border());      // цветная рамка

Фону и рамке можно задать свои стили:

$("h1").highlight(background("rgb(85, 180, 250);"));
$("h1").highlight(border("3px solid blue"));

А можно и задать полностью крафтовый стиль для выделения элемента:

$("h1").highlight(style("color: white; background-color: red;"));


Дальнейшее развитие

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

В общем, делитесь идеями, будем думать.

См. issue 1277, issue 2395 и PR 2481.


Убираем невидимые пробелы в текстах коллекций

Как вы помните, в Selenide 6.16.0 мы ускорили работу с коллекциями с помощью вставок JavaScript кода. Оказалось, что при этом мы чуть изменили поведение для элементов, содержащих невидимые пробелы и прочие хитрые символы.

Допустим, у нас на страничке есть такой элемент:

<div id="status">
  <span> Боевой дух</span>
  <span>  ипучая&nbsp;\u200Bдействительность  </span>
</div>

И раньше проверка типа

$$("#status span").shouldHave(texts("Боевой дух", "ипучая действительность"));

падала:

Expected :[Боевой дух, ипучая действительность]
Actual   :[Боевой дух, ипучая действительность]

Причём выглядит сообщение так, как будто тексты одинаковые. Но в первой строке - обычный пробел, а во второй - невидимый пробел “”.

Теперь же селенид будет вычищать такие невидимые пробелы. Правильно это или нет, можно спорить, но так велит нам стандарт WebDriver, и так работает Selenium. И мы тоже будем соответствовать.

См. issue 2469 и PR 2482.
Спасибо Maksim Au6ojlut за подсказку с чёртовыми пробелами.


Обновились на Selenium 4.13.0

Обновили Selenium с 4.12.1 на 4.13.0
Вот тут его ченджлог.

Несколько важных багфиксов, но всё ещё бегает на Java8. Ловите, пока он не стал требовать Java 11+! ;)

См. PR 2479.


Убрали строгую проверку на “/wd/hub”

Если вы используете Selenoid, то раньше плагин selenide-selenoid проверял, чтобы URL заканчивался строкой /wd/hub. Оказалось, что URL бывает и другим, и поэтому мы эту проверку убрали.

См. issue 2475.
Спасибо Dmitry Plodukhin за PR 2476.


Заменили класс ElementsContainer на интерфейс Container

Как вы помните, недавно мы запретили пэдж обжектам наследоваться от ElementsContainer.

Такой вариант больше не работает:

class LoginPage extends ElementsContainer {
}

Я по-прежнему настаиваю, что это не нужно, но нашлись такие проекты, где это необходимо из-за текущего наследия и невозможности всё переписать. Для таких проектов мы добавили интерфейс Container:

class LoginPage implements Container {
}

Для обычных виджетов тоже рекомендуется поменять extends ElementsContainer на implements Container.

Разница только в том, что это интерфейс, а не абстрактный класс (надо писать “implements” вместо “extends”), и в нём не будет метода getSelf(). Ну и не надо.

См. issue 2439 и PR 2465.


Добавили методы $.tap(), $.doubleTap() для мобилок

import static com.codeborne.selenide.appium.SelenideAppium.$;

$(By.name("ComputeSumButton")).tap();
$(AppiumBy.xpath("//android.widget.Button")).doubleTap();
$(AppiumBy.xpath(".//*[@text='Лютая арта']")).tap(longPressFor(ofSeconds(4)));

Спасибо qwez за PR 2467.


Добавили селектор по классу и индексу для мобилок

import static com.codeborne.selenide.appium.AppiumSelectors.byClassNameAndIndex;
import static com.codeborne.selenide.appium.SelenideAppium.$;

$(byClassNameAndIndex("android.widget.TextView", 7)).tap();

Спасибо Amuthan Sakthivel за PR 2440.


Новости


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

ru.selenide.org

28.09.23