Изменения в Selenide 2.20

Изменения в Selenide 2.20

Защита от зависания вебдрайвера и стандартное логирование
27.07.15

Здрасьте!

Сегодня мы зарелизили Selenide 2.20. Что новенького нас ждёт?

Защита от зависания вебдрайвера при открытии/закрытии браузера

Иногда при открытии или открытии браузера вебдрайвер зависает. Видимо, какие-то баги в вебдрайвере. Просто этот поток бесконечно висит в одном и том же состоянии: “Forwarding newSession on session null to remote”

Мы добавили защиту против этой проблемы. Теперь Selenide запускаете открытие/закрытие браузера в отдельном потоке и ждёт ограниченное время (не дольше 15 секунд при открытии и не 5 секунд при закрытии). При неудаче пробует снова (до 3 раз) и лишь потом вылетает с ошибкой.

Спасибо @admizh за это предложение!

См. Issue 199 и Issue 204

Логирование переведено на java.util.logging

До сих пор Selenide выводил свои сообщения через System.out и System.err

Вообще-то я думаю, что для тестов этого вполне достаточно: просто и надёжно. Но идя навстречу пожеланиям трудящихся, мы перевели логирование Selenide на “стандартный” механизм java.util.logging (JUL).

Честно говоря, log4j и slf4j явно лучше JUL, но JUL поставляется вместе с Java и используется в Selenium, так что нам не было смысла добавлять в Selenide ещё одну зависимость.

Хорошая новость в том, что вам ничего не надо делать, чтобы перейти на новое логирование. Оно само заработает, и по умолчанию будет выводить логи в консоль. Но будет не очень-то красивым:

Jul 25, 2015 10:48:21 PM com.codeborne.selenide.impl.WebDriverThreadLocalContainer createDriver
INFO: Create webdriver: 1 -> FirefoxDriver: firefox on MAC (3e54e3de-b212-2a45-93ad-712aae6ee853)

Чтобы сделать логирование чуть удобнее (если у вас в проекте вдруг ещё не настроен JUL), можно добавить такую строчку в начало тестов:

System.setProperty("java.util.logging.SimpleFormatter.format", "%1$tT %4$s %5$s%6$s%n");

Или если вы предпочитаете slf4j, то добавьте зависимость org.slf4j:jul-to-slf4j:1.7.12 в проект и такую строчку в начало тестов:

SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();

Теперь логи Selenide будут выглядеть так:

22:48:15 INFO  INFO: Create webdriver: 1 -> FirefoxDriver: firefox on MAC (3e54e3de-b212-2a45-93ad-712aae6ee853)

См. Issue 195

Исправили использование Cookies при скачивании файла

Спасибо @philipp-kolesnikov за этот pull request!

Добавили поддержку коллекций элементов в Page Objects

Теперь в своём пэдж обжекте можно объявить поле - список элементов:

public class SearchResultsPage {
  @FindBy(css = "#ires li.g")
  private ElementsCollection results;

См. Issue 186

Спасибо @rishaselfing за подсказку!

P.S. Хотя я по-прежнему думаю, что гораздо короче и проще писать пэдж обжекты без использования аннотаций:

public class SearchResultsPage {
  private ElementsCollection results = $$("#ires li.g");

Метод $(“select”).shouldHave(text(“…”)) теперь проверяет выбранную опцию

Раньше метод $("select").shouldHave(text("...")) фактически был бесполезным, т.к. учитывал тексты всех <option>, а не только выбранных. Теперь же он проверяет только текст выбранных элементов. А также метод $("select").getText() возвращает только текст выбранных опций.

См. Issue 134

Добавили возможность снять скриншот отдельного элемента или региона

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

Вот так легко её можно использовать в своих тестах:

    File screenshot = $("#some-div").screenshot();

См. Issue 66

Все методы $(String, ...) теперь deprecated

Пожалуйста, убедитесь в том, что вы не используйте deprecated методы. Мы собираемся их удалить в одной из следующих версий Selenide (вероятно, 3.0).

Теперь добавить объяснение к проверкам можно с помощью функции because:

$("h1").shouldHave(text("Some wrong test").because("it's wrong text"));
$("h1").waitUntil(hidden.because("it's sensitive information"), 100);

Удалили зависимость cglib-nodep из зависимостей Selenide

Мы обнаружили, что зависимость cglib-nodep старая и ненужная, и иногда она может создавать конфликты с зависимостями в текущих проектах. К тому же она, кажется, не поддерживает Java 8 и уже лет 5 как не развивается.

Если вам всё же по каким-то причинам нужна cglib-nodep, просто добавьте эту зависимость в проект: cglib:cglib-nodep:jar:3.1


Мне нужна ваша помощь!

Проголосуйте з амою заявку Selenide на конференцию SeleniumConf 2015 здесь!

Новости

Хочу поделиться новостями


А что у вас новенького?


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

ru.selenide.org

27.07.15