В этом разделе публикуются официальные новости: сообщения о выходе новых релизов Selenium, объявления о конференциях, тренингах и иных мероприятиях, посвящённых Selenium, другие официальные объявления.

Главное изменение в релизе 3.4 -- в Java-версии объявлены устаревшими (deprecated) некоторые конструкторы в классах RemoteWebDriver и FirefoxDriver.

Это означает, что в одном из ближайших релизов (3.5, максимум 3.6) они будут удалены. Если вы использовали эти конструкторы -- обновите код, чтобы он не перестал компилироваться и выполняться при выходе следующих релизов.

Во-первых, устаревшими объявлены конструкторы, которые на вход принимали два объекта типа Capabilities -- так называемые "желаемые" (desired) и "требуемые" (required) свойства запускаемого драйвера. Скорее всего вы их не использовали, потому что семантика "требуемых" свойств плохо определена и нигде не документирована.

Во-вторых, в классе FirefoxDriver устаревшими объявлены три конструктора, от удаления которых вы можете пострадать:

public FirefoxDriver(FirefoxBinary binary)
public FirefoxDriver(FirefoxBinary binary, FirefoxProfile profile)
public FirefoxDriver(FirefoxBinary binary, FirefoxProfile profile, Capabilities capabilities)

В следующем релизе будет объявлен устаревшим ещё один конструктор (о нем просто забыли):

public FirefoxDriver(FirefoxProfile profile)

Взамен удаляемых конструкторов добавлен новый:

public FirefoxDriver(FirefoxOptions options)

На вход он принимает объект типа FirefoxOptions, в него упаковывается информация о свойствах драйвера и браузера, которые раньше передавались как отдельные параметры конструктора.

Так, старый код инициализации драйвера

FirefoxBinary binary = new FirefoxBinary(
new File("c:/Program Files/Nightly/firefox.exe"));
binary.addCommandLineOptions("-console");
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.cache.disk.enable", false);
DesiredCapabilities capabilities = new DesiredCapabilities(
ImmutableMap.of("pageLoadStrategy", "eager"));
WebDriver driver = new FirefoxDriver(binary, profile, capabilities);

превратится в такой:

FirefoxOptions options = new FirefoxOptions()
.setBinary("c:/Program Files/Nightly/firefox.exe")
.addArguments("-console")
.addPreference("browser.cache.disk.enable", false)
.addCapabilities(new DesiredCapabilities(
ImmutableMap.of("pageLoadStrategy", "eager")));
WebDriver driver = new FirefoxDriver(options);

Не ждите следующего релиза, исправьте свой код прямо сейчас!

1 апреля (и это не шутка) стандарт W3C WebDriver завершил очередной этап и получил статус W3C Candidate Recommentation.

По правилам W3C каждый стандарт должен пройти четыре уровня зрелости (хотя не каждый из них добирается до последнего):

  • Working Draft -- на этом этапе идёт основная разработка текста стандарта, в этом статусе WebDriver находился с конца 2011 года. Для успешного завершения этого этапа и перехода на следующий группа ревьюеров должна убедиться в том, что текст стандарта достаточно полный, не осталось недоспецифицированных участков. Кроме того, они должны поверить, что этот стандарт может быть реализован, что это технически достижимая цель. В конце января в W3C был отправлен официальный запрос на ревью, всё прошло гладко и WebDriver благополучно получил следующий статус.
  • Candidate Recommendation -- целью этого этапа является демонстрация того, что стандарт действительно может быть реализован. Для этого нужно создать как минимум две работающие реализации, полностью удовлетворяющие стандарту. На эту роль выбраны geckodriver и драйвер для Internet Explorer. Предполагается, что этот этап займёт полгода. По результатам должен быть написан Implementation Report, и если ревьюеры признают его удовлетворительным -- стандарт перейдёт на следующий уровень зрелости.
  • Proposed Recommendation -- с этого момента стандарт можно считать полностью завершённым, для перехода на следующий этап нужно просто соблюсти некоторые бюрократические тонкости -- должно состояться формальное голосование боссов комитета W3C за принятие стандарта, должна быть описана процедура фиксации ошибок в стандарте (конечно, они могут остаться, никто не безгрешен), и после этого наступает последний этап.
  • Recommendation -- в этом статусе стандарт остаётся навсегда. Конечно, позже может быть разработана новая версия, но это уже совсем другая история, которая начинается с самого начала, с Working Draft.

С практической точки зрения это означает, что в течение ближайшего полугода Selenium будет активно дорабатываться, нужно его привести в соответствие со стандартом. Но и "старые" драйверы, которые пока не удовлетворяют стандарту (chromedriver, safaridriver, edgedriver) тоже, конечно, будут поддерживаться.

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

Ранее мы писали, что старая схема запуска FirfoxDriver (без использования geckodriver) не будет работать в браузерах, начиная с версии 48. Тем, кто пока не готов переходить на новую схему, предлагалось использовать специальную версию "для корпоративных клиентов" Firefox ESR 45.

Но вот пришло время обновления и для этой линейки браузера, на прошлой неделе вышла версия ESR 52.

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

Хорошая новость состоит в том, что Mozilla пошла навстречу пользователям и продлила возможность использовать в ESR 52 неподписанные расширения, в том числе это распространяется и на Selenium.

Правда, для этого вам всё таки придётся обновить версию Selenium до самой последней (на текущий момент 3.3.1) и при инициализации драйвера явно указывать, что нужно использовать старую схему запуска. Вот так это делается в разных языках программирования:

// Java
FirefoxOptions options = new FirefoxOptions().setLegacy(true);
WebDriver driver = new FirefoxDriver(options);
// C#
FirefoxOptions options = new FirefoxOptions();
options.UseLegacyImplementation = true;
driver = new FirefoxDriver(options);
# Python
wd = webdriver.Firefox(capabilities={"marionette": False})
# Ruby
caps = Selenium::WebDriver::Remote::Capabilities.new()
@driver = Selenium::WebDriver.for(:firefox, :desired_capabilities => caps)
// JavaScript
var driver = new webdriver.Builder()
.withCapabilities({'marionette': false})
.forBrowser('firefox')
.build();
Наконец-то появилась очередная стабильная версия Selenium 3.3.1.
 
Ей предшествовала серия неудачных релизов: в 3.1.0 забыли включить библиотеку, необходимую для работы FirefoxDriver на Linux; 3.2.0 выпустили преждевременно, без тщательного тестирования, с кучей багов; в 3.3.0 исправили почти все баги, но не заметили проблему с подключением узлов к хабу сервера Selenium. Поэтому использовать эти промежуточные релизы не рекомендуется, обновляйтесь сразу до версии 3.3.1.
 
Что нового появилось с момента выхода версии 3.0, первого релиза в "третьей" серии:
 
Главная фишка -- реализация "сложных действий" (Actions) согласно стандарту W3C WebDriver. С точки зрения клиентского API ничего не изменилось, но внутренности полностью переписаны. Новый механизм активируется только при работе с Firefox, для других браузеров продолжает использоваться старый способ.
 
Внимание: Selenium 3.3 требует geckodriver 0.15 и Firefox 52 или новее.
 
В Java при инициализации FirefoxDriver (точнее говоря при построении объекта типа FirefoxBinary) теперь можно указывать канал ("esr", "release", "beta", "aurora" или "nightly"). Если на машине установлено несколько разных версий Firefox, из разных каналов, Selenium постарается найти и запустить нужную. Канал можно также указывать вместо номера версии при удалённом запуске Firefox через Selenium Server.
 
Заработал новый HTML Runner, запускатель для сценариев, сохранённых из Selenium IDE. Теперь он, разумеется, использует движок WebDriver, потому что старого движка (RC) больше нет.
 
Ну и как всегда исправлено некоторое количество багов и удалено некоторое количество устаревших (deprecated) классов и методов.
 
P.S. Версия 3.3.1 пока вышла только для Java, реализации на других языках отстают... Есть вероятность, что в них Actions будут доступны уже только в следующей версии 3.4 или даже позже...

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

Перед новогодними каникулами завершила работу первая группа нового тренинга Selenium WebDriver: полное руководство.

С отзывами учеников первой группы курса можно познакомиться по ссылке.

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

Ниже некоторые заметки тренера о прошедшем курсе.

  1. В конце прошлого года мы решили все имеющиеся у нас разрозненные тренинги по инструменту Selenium WebDriver заменить одним универсальным учебным курсом.
    По нашим планам должно было получиться 12 занятий по 45 минут. Но на самом деле объём записанного материала получился в полтора раза больше. Информации действительно так много.
    Но цену мы решили пока не поднимать :)

  1. В начале курса мы даём участникам анкету, в которой среди прочего предлагается оценить свои навыки программирования по пятибалльной шкале. Результат оказался неожиданным -- средняя оценка примерно 3 балла.
    При этом та же самая анкета показала, что почти 70% участников имеют практический опыт использования Selenium.
    Это вызвало некоторые опасения при подготовке заданий для самостоятельной работы. С одной стороны, они должны были быть достаточно сложными, потому что большинство участников уже работало с инструментом и простые задания будут скучны. С другой стороны, они не должны были требовать хороших навыков программирования.
    Насколько можно судить по результатам выполнения заданий и обсуждению в чате учебной группы -- это сделать удалось. Задания достаточно сложные, для их выполнения нужно хорошо знать Selenium (то есть внимательно смотреть и слушать лекции), но с точки зрения программирования они весьма просты.

  1. Та же самая анкета в очередной раз подтвердила, что мы не зря уделяем больше внимания языкам Java, C# и Python. Один из вопросов анкеты звучал так: “Какой из пяти языков Вы можете назвать наиболее предпочтительным для себя?” Вот как распределились языковые предпочтения участников (по горизонтали -- значения в процентах):

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

  1. В процессе создания примеров к лекциям было найдено некоторое количество багов в Selenium.
    Во-первых, благодаря нашим ученикам, обнаружились явные дефекты в Selenium, пусть небольшие, но всё равно дефекты (некоторые из них, кстати, уже исправлены и в следующем релизе их не будет).
    Во-вторых, были выявлены несоответствия в реализациях на разных языках. Они проявились в процессе создания примеров к лекциям. Например, оказалось, что в реализации на Ruby вообще нет класса ExpectedConditions, а в реализации на JavaScript отсутствует вспомогательный класс для работы с выпадающими списками (Select).
    Поэтому хочется сказать спасибо нашим ученикам за то, что они помогают улучшать инструмент Selenium!

15-16 ноября в Лондоне проходила конференция Selenium Conf 2016.

Доступны записи выступлений.

Go to top