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

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

Изменения в Java

1. Удалены зависимости артефакта selenium-java от драйверов для PhantomJS и HtmlUnit. Причины, правда, разные.

Разработчики PhantomJS объявили о прекращении работы над этим проектом в связи с появлением в Chrome и Firefox так называемых headless-режимов, позволяющих запускать браузер без показа окна, в скрытом виде. Это фактически делает PhantomJS ненужным, тем более, что он построен не на полноценном современном браузерном движке, а на достаточно старой версии движка WebKit.

HtmlUnit тоже не является полноценным браузером, это вообще грубая подделка, но мы его любим не за аутентичность, а за высокую производительность. Драйвер для него жив и здоров, а зависимость от него убрали просто потому, что релизные циклы не совпадают. Поэтому ставьте в своих проектах две зависимости -- от selenium-java и htmlunit-driver (если он вам нужен, конечно) -- и обновляйте их версии независимо.

2. Классы FirefoxOptions, ChromeOptions и их аналоги для других браузеров теперь реализуют интерфейс Capabilities. Это упростило и сделало более элегантной инициализацию драйверов. В частности, можно объект *Options передавать в конструктор удалённого драйвера, например: new RemoteWebDriver(new FirefoxOptions().addPreference("xxx", "yyy").addPreference("aaa", "zzz"))

3. В классы FirefoxOptions и ChromeOptions добавлен метод setHeadless, который, как ясно из названия, позволяет запускать браузеры в headless-режиме.

4. Реализована возможность установки в Firefox дополнений в формате WebExtensions.

Изменения в C#

1. Появилась поддержка .Net Core 2.0, теперь написанные на C# тесты можно запускать не только под Windows. Увы, для этого пришлось кое-чем пожертвовать, подробнее об этом можно почитать в блоге разработчика.

2. Завершён переход на новый W3C-совместимый протокол, так что теперь тесты на C# можно удалённо запускать только на Selenium Server версии 3.5 или новее, а для браузера Chrome требуется версия драйвера 2.31 или новее.

3. Добавлены методы Minimize и FullScreen для окон и GetProperty для элементов, этих команд не было в Selenium 2, но они введены в стандарт W3C WebDriver, так что скоро должны появиться и на других языках тоже.

Изменения в Ruby

1. Драйвер для PhantomJS объявлен deprecated, причины объясняются выше.

Изменения в Python

1. Реализован класс IEOptions для конфигурирования параметров запуска драйвера для Internet Explorer.

2. Добавлена поддержка нового W3C-совместимого протокола (наконец-то!), так что вскоре можно и здесь ожидать появления новых команд, которые добавлены в стандарте W3C WebDriver.

-----

А также в реализациях на всех языках удалены многочисленные deprecated-методы и исправлена куча багов.

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

 

Вслед за релизом 3.5 пришлось выпустить несколько обновлений (последнее из них имеет номер 3.5.3), в которых исправлены критичные баги в Selenium Grid Hub, проскочившие в релиз.

Для пользователей Selenium IDE наступили трудные времена -- он не работает в Firefox 55 и новее...

Что делать?

Установить Firefox ESR 52, в этой версии Selenium IDE пока работает. Extended Support Release (ESR) -- это специальная релизная ветвь с редкими обновлениями для консервативных пользователей. Версия 52 будет существовать в этой ветви до 6 марта 2018 года.

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

Почему так получилось?

В очередном релизе Selenium 3.5 на поверхности никаких заметных изменений нет. Но зато "под капотом" сервера Selenium появился "режим сквозной передачи запросов (pass through)".

Сервер сейчас должен уметь работать с двумя разными версиями протоколов -- новая, совместимая со стандартом W3C WebDriver, и старая, оставшаяся с достандартных времён. Раньше сервер перекодировал запросы, полученные от клиента, прежде чем передать их дальше по цепочке (от хаба к узлу грида, или от узла грида к браузеру). В режиме pass through он не вмешивается в структуру запроса, до браузера он доходит ровно в том виде, в котором его отправил клиент. Тем самым сервер не вносит никаких возмущений и искажений, за соответствие запросов той или иной версии протокола полную ответственность теперь несут клиентские библиотеки.

С другой стороны, в клиентских библиотеках появился механизм "переговоров" с браузером (точнее говоря, с его драйвером), позволяющий определить, какую версию протокола нужно использовать. Если драйвер готов разговаривать на языке протокола W3C WebDriver -- преимущество отдаётся этому способу. Иначе используется старая версия протокола. При этом, благодаря режиму pass through, переговоры ведутся напрямую с драйвером, а сервер выступает в роли нейтрального посредника.

Все эти штуки, по замыслу разработчиков, должны повысить надёжность работы сервера Selenium и особенно Selenium Grid. Но на всякий случай осталась возможность отключить этот режим и вернуться к старому, с перекодировкой запросов, для этого нужно при запуске сервера указать опцию -enablePassThrough false

Главное изменение в релизе 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 Recommendation.

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

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

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

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

Go to top