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

 You have a choice. (Photo by Brendan Church on Unsplash)

Главное нововведение этой версии -- класс RemoteWebDriverBuilder в реализации на Java. Он предназначен для инициализации драйвера, управляющего браузерами на удалённой машине через Selenium Server, и позволяет более гибко, чем раньше, описывать требования к тому, какой браузер должен быть запущен.

Selenium Server теперь умеет принимать запрос на запуск браузера в формате "любой из перечисленных". То есть вы можете его попросить "запусти мне IE или Edge", или "запусти мне Firefox на Linux или MacOS" или "запусти мне IE версии 10 или 11". Но вручную построить объект типа Capabilities, который описывает такой множественный выбор, не так-то просто. Поэтому мы сделали Builder.

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

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

  • Клиентские библиотеки Selenium стали добавлять заголовок User-Agent в запросы, отправляемые на Selenium Server. Это дает возможность серверу (в частности, самодельным и модифицированным реализациям, которые используются облачными провайдерами) определять, с какой версией клиентской библиотеки ему приходится работать.
  • Grid Node раньше по умолчанию пытался использовать порт 4444, сейчас он выбирает случайным образом свободный порт, если при запуске явно не указана опция -port
  • Java: реализована поддержка WebStorage в драйверах для Chrome и Firefox
  • Java: происходит чистка API от упоминаний Gson, особое внимание следует обратить тем, у кого есть сервлеты, расширяющие возможности Selenium Grid, там возможны изменения интерфейсов
  • .Net: компания Microsoft готовит к выпуску версию драйвера для Edge с поддержкой стандарта W3C WebDriver, но в течение некоторого времени новая версия драйвера по умолчанию все таки будет использовать старый протокол, а новый нужно будет включать явно. Для управления режимами работы этого драйвера добавлено свойство EdgeDriverService.UseSpecCompliantProtocol
  • Python: в конструктор RemoteWebDriver теперь можно передавать Options-классы вместо ассоциативного массива с описанием capabilities
  • Python: в конструкторах драйверов для IE и Firefox добавлен именованный параметр desired_capabilities, чтобы сделать интерфейсы конструкторов для всех драйверов единообразными
  • Python: В драйвер для Safari добавлены команды, позволяющие активировать отладчик и управлять правами доступа для текущей сессии
  • Ruby: В драйвер для Safari добавлены команды, позволяющие активировать отладчик

Как обычно, исправлено какое-то количество багов, но в список они не включены, потому что если вы страдаете от какого-то конкретного бага, то наверняка следите за ним в баг-трекере и знаете о том, исправлен он или нет.

26 апреля стандарт W3C WebDriver завершил очередной этап и получил статус W3C Proposed Recommendation.

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

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

Предполагается, что в течение месяца или двух выйдет еще 3-4 релиза в серии 3.x, после чего будет выпущена версия Selenium 4.0, одновременно с переходом стандарта в следующий статус Recommendation.

Вчера, 11 марта, вышел "трибьют"-релиз Selenium 3.11 c кодовым названием "Selenium for Workgroups".

Как и следовало ожидать, главные изменения в этом релизе связаны с браузером Internet Explorer и платформой Windows:

  • .Net: реализация PageObjects объявлена устаревшей (deprecated), постепенно она будет удалена из кода Selenium и перенесена в отдельный независимый репозиторий https://github.com/DotNetSeleniumTools/DotNetSeleniumExtras
  • .Net: класс ExpectedConditions объявлен устаревшим (deprecated), он тоже переедет по указанном выше адресу, но вообще-то можно просто использовать лямбда-выражения в качестве условий ожидания
  • .Net: драйвер для PhantomJS объявлен устаревшим (deprecated)
  • .Net: исключения, которые могут быть выброшены командами clear и sendKeys, приведены в соответствие со стандартом W3C WebDriver
  • .Net: иерархия исключений также приведена в соответствие со стандартом W3C WebDriver, добавлены недостающие исключения
  • IE: устранен крэш драйвера при выполнении команды sendKeys с отключенным режимом native events (#5584)
  • IE: улучшена обработка клавиш-модификаторов (Shift, Control, Alt, Meta) при выполнении команды sendKeys
  • IE: правила перемещения указателя мыши приведены в соответствие со стандартом W3C WebDriver, теперь смещение по координатам отсчитывается от центра элемента, а не от левого верхнего угла
  • IE: команды для получения cookies переписаны с использованием нового API, доступного в Windows 8.1 SDK и новее (для старых версий продолжает использоваться старый способ получения cookies)
  • IE: вспомогательный исполняемый файл драйвера IEDriverServer теперь может управлять только одной сессией, для запуска нескольких сессий нужно запускать несколько независимых процессов IEDriverServer (хотя лучше вообще не запускать несколько сессий на одной машине, IE этого не любит, работать будет, но может и закапризничать)
  • Java: удалены методы startClient и stopClient в классе RemoteWebDriver, которые были помечены как устаревшие (deprecated) в релизе 3.6 (это изменение может коснуться тех, кто использовал самодельные расширения класса RemoteWebDriver)
  • Java: удалены свойства SafariOptions.cleanSession (текущий драйвер для Safari всегда запускает новую сессию, это свойство просто игнорируется) и SafariOptions.port (драйвер для Safari автоматически выбирает порт)

 

В очередном релизе Selenium 3.10 наиболее серьёзные изменения произошли в драйвере для Internet Explorer:

  • исправлены проблемы с вводом командой sendKeys неправильных символов при использовании национальных раскладок клавиатуры
  • исправлены проблемы с вводом текста в contenteditable элементы
  • реализована поддержка IPv6 (правда пока только в локальном варианте запуска, потому что в Grid ещё остаются проблемы)
  • улучшена совместимость с .Net Core 2.0
  • улучшена производительность (хотя конечно до других браузеров ему пока всё равно ещё далеко...)

Другие значимые изменения:

  • Grid: улучшено протоколирование, теперь на консоли появляется меньше бесполезных для рядового пользователя сообщений.
  • Grid: исправлена ошибка закрытия потерянных сессий по таймауту.
  • Ruby: реализованы настройки для более удобного запуска Chrome в headless-режиме.
  • Java: класс org.openqa.selenium.support.ui.Duration объявлен устаревшим (deprecated), вместо него рекомендуется использовать java.time.Duration

А также продолжается внутренняя чистка кода, постепенно движемся к выпуску версии 4.0.

Сразу отметим, что реализация на JavaScript совершила скачок в будущее, для неё выпущена версия 4.0.0-alpha.1 и версий в линейке 3.x больше не будет. Список изменений настолько обширный, что я его даже не буду перечислять, лучше посмотреть официальную документацию.

А теперь про другие языки и Selenium Grid:

  • Java: улучшено протоколирование проблем, которые возникают при создании новой сессии, это должно облегчить понимание причин возникающих сбоев
  • Java: для взаимодействия с драйверами и сервером теперь используется OkHttp (но если вдруг возникнут проблемы, есть временная возможность вернуться к старому механизму, для этого нужно установить системное свойство webdriver.http.factory=apache)
  • Java: починили команду, которая снимает скриншот отдельного элемента (правда, пока эту команду поддерживает только geckodriver)
  • .Net: восстановлен атрибут CLSCompliant, который потерялся в предыдущей версии из-за изменения процедуры сборки assembly
  • .Net: удалена проверка наличия двойного дефиса в опциях Firefox, ранее предполагалось, что все опции должны начинаться с "--", но это оказалось неправдой, поэтому ограничение было снято
  • Grid: удалена опция -enablePassthrough, теперь сервер всегда работает в режиме passthrough
  • Grid: исправлена обработка опций -hub, -hubHost и -hubPort, теперь опция -hub имеет наивысший приоритет, как и было заявлено в документации
  • Grid: исправлен баг, который не давал возможности серверу Appium зарегистрироваться на хабе
  • Grid: добавлена опция -enablePlatformVerification, позволяющая отключить проверку совместимости того, совместимы ли capabilities, которые пытается зарегистрировать узел, с текущей платформой
  • Grid: исправлен баг с загрузкой конфигурации узлов с хаба после регистрации, в том числе после повторной регистрации, это особенно важно, если хаб перезапущен с изменёнными настройками, все узлы должны загрузить эти новые настройки

Кроме того, как обычно исправлены разные более мелкие баги, а также проведена работа по оптимизации тестов и процесса сборки, что позволило уменьшить время выполнения регрессионного набора тестов примерно в два раза (с шести часов до трёх).

Go to top