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

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

О других изменениях:

  • Исправлен баг, который возник ещё в версии 3.0 (!), вернулась возможность указывать путь к исполняемому файлу Firefox в конфигурационном файле Selenium Grid Node.
  • Исправлена ошибка "unrecognized platform name" при запуске в облаках, где используются всякие нетрадиционные названия платформ.
  • JS: удалён самодельный promise-менеджер, теперь нужно использовать стандартный
  • JS: в связи с удалением самодельного promise-менеджера, удалены обёртки для mocha, теперь можно использовать эту библиотеку непосредственно
  • JS: удалена поддержка Opera и PhantomJS
  • JS: удалён класс firefox.Binary, теперь нужно использовать метод firefox.Options#setBinary()
  • JS: в класс firefox.Driver добавлены методы installAddon и uninstallAddon, позволяющие добавлять и удалять расширения браузера на лету (работает только с geckodriver и новыми версиями Firefox)
  • JS: добавлена поддержка команд getRect/setRect, которые заменили getPosition/setPosition и getSize/setSize
  • JS: добавлена поддержка команд fullscreen и minimize
  • JS: удалён модуль testing/assert, теперь нужно использовать какую-нибудь стороннюю библиотеку
  • Java: убрали информационный шум при запуске Firefox в legacy-режиме, логи браузера теперь по умолчанию не показываются, но добавлена настройка, позволяющая их показать.
  • Java: продолжается планомерное уничтожение конструкторов драйверов, настройки переползают либо в DriverOptions либо в DriverService.
  • Python: добавлена поддержка команд minimize и fullscreen
  • Ruby: добавлена опция Firefox::Options#headless!

Ну и конечно в реализациях на всех языках мы постарались улучшить совместимость со стандартом W3C WebDriver, не потеряв при этом возможности работы со старыми драйверами.

В отличие от предыдущего релиза, в котором основные изменения были сосредоточены "под капотом", новый релиз 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);

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

Go to top