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

 

Вслед за релизом 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 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();

Go to top