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

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

Поддержка Safari, исправление параллельного запуска TestNG и обновление до Selenium 2.40.0
15.03.14

Всем привет!

Сегодня вышла версия Selenide 2.9. Давайте посмотрим, что хорошего несёт с собой новая версия.

Что новенького нас ждёт

Добавлена поддержка браузера Safari

Но сам Safari всё ещё кажется нестабильным. Во всяком случае, не все тесты самого Selenide проходят на Safari.

И ещё он не поддерживает alert‘ы и не умеет открывать локальные файла типа file://c:/tmp.txt. А какой у вас опыт работы с вебдрайвером Safari?

Добавлен condition or

Теперь можно писать так:

    Condition completed = or("completed", started, inProgress, loading);

и использовать так:

    $("div#page").shouldBe(completed);

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

Добавлен метод ScreenShooter.to(folder)

Теперь в JUnit можно писать так:

public class MyTest {
  @Rule
  public ScreenShooter photographer = failedTests().to("test-results/reports");
}

Опять же, не уверен, что это нужно, ведь путь к скриншотам можно задать глобально через системное свойство: -Dselenide.reports=test-results/reports или программно: Configuration.reportsFolder=test-results/reports. Так что польза от нового метода будет только в том случае, если вам нужно складывать скриншоты от разных тестов в разные места.

Багфиксы и улучшения

Метод $.download() кидает FileNotFoundException (если сервер вернул статус 40x) или RuntimeException (для статуса 50x)

До этого метод $.download() возвращал пустой файл в случае серверной ошибки. Конечно, тестировать это было неудобно.

Окно хрома тоже максимизируется

Из-за баги в ChromeDriver окно браузера Chrome не открывалось на весь экран. Теперь открывается. Правда, для этого пришлось применить чёрную магию из java.awt.

Метод $.shouldHave(text()) игнорирует также и символ \u00a0 (т.н. “non-breaking space”)

До этого проверка $(".error").shouldHave(text("Hello, Johny!")) игнорировала все пробелы. Но вот про символ \u00a0 мы забыли. А он часто используется в вебе, например, при форматировании сумм или дат. Например, такая проверка могла упасть:

  $(".amount").shouldHave(text("123.45 EUR"));

А теперь работает.

Улучшение закрытие браузеров при многопоточном запуске тестов в TestNG

До сих пор Selenide открывал и закрывал браузер в одном и том же потоке. Обычно этого хватает.

Но выяснилось, что TestNG при многопоточном запуске тестов запускает сами тесты и метод @AfterSuite в разных потоках. Пришлось этот код переписать. Теперь Selenide сам автоматически закрывает все неиспользуемые браузеры сразу, как только соответствующий поток завершает свою работу.

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

Включение ошибки вебдрайвера

Когда проверка типа $.shouldBe(visible) падает из-за ошибки вебдрайвера, эта ошибка больше не игнорируется, а добавляется к стандартной селенидовской ошибке Element should be visible. Теоретически это может быть полезно, если браузер повёл себя неадекватно. Например, у людей были случаи, когда IE время от времени ругался на валидный xpath.

Если не получается сделать скриншот, Selenide пишет ошибку со стектрейсом.

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

Selenide сохраняет исходный код страницы в правильной кодировке (UTF-8)

До этого Selenide могла сохранять HTML в неправильной кодировке, в зависимости от настроек оп. системы.

Убраны INFO-сообщения насчёт “reportsUrl” и “BUILD_URL”

Как оказалось, они многих сбивали с толку.

Но вообще-то автоматические скриншоты в Jenkins - это очень крутая фича, которая до сих пор остаётся неанонсированной. Об этом скоро будет отдельный большой пост с картинками.

Использование слова “jQuery” вместо “$

Кое-где Selenide использовал символ “$”, чтобы поддерживать события javascript. Это могло вызывать проблемы в случае приложений, использующих и jQuery, и Prototype или какой-нибудь другой JS фреймворк.

Обновились до Selenium 2.40.0, HtmlUnit 2.14 и TestNG 6.8.8

Как обычно, мы обновились до последних версий Selenium и TestNG.

Внимание, в версии 6.8.8 из TestNG выпилили поддержку junit. Так что если у вас почему-то в проекте используется и TestNG, и JUnit, и последний подтягивается транзитивно, то он больше не подтянется.


Так что жизнь бьёт ключом!


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


15.03.14