{tortags,133,1}

Существует две принципиально разные версии браузера Opera, построенные на разных движках:

  • "старая" Opera (версии до 12), использующая оригинальный движок Presto, разработанный компанией Opera Software,
  • "новая" Opera (версии 15 и больше), построенная на основе браузера Chromium, то есть использующая движок Blink.

Соответственно, и для запуска Selenium-тестов в этих разных версиях используются совершенно разные механизмы.

Маловероятно, что кому-то сейчас ещё требуется тестировать веб-приложения в старых версиях браузера Opera, поэтому в этой статье описывается только способ запуска тестов в новых версиях Opera.

Поскольку новая Opera фактически является надстройкой над браузером Chromium, было бы логично предположить, что для запуска тестов можно использовать утилиту chromedriver и интерфейсный класс ChromeDriver.

Единственное затруднение, которое возникает -- это неспособность драйвера автоматически определить расположение исполняемого файла браузера, поскольку драйвер нацелен на поиск исполняемого файла браузера Chrome.

Но ведь можно явно указать путь к исполняемому файлу при инициализации драйвера:

ChromeOptions options = new ChromeOptions();
options.setBinary("c:\\Program Files (x86)\\Opera\\29.0.1795.47\\opera.exe");
ChromeDriver driver = new ChromeDriver(options);

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

Причина, вероятно, в том, что с некоторых пор в chromedriver добавлена функция контроля версий -- драйвер отказывается работать с любыми версиями браузера, кроме "официально поддерживаемых". В том числе под раздачу попали Opera, Yandex-браузер и прочие надстройки над Chromium -- драйвер отвергает их как несовместимые.

К счастью, разработчики Opera выпустили альтернативную версию этой вспомогательной утилиты, которая называется, как несложно догадаться, operadriver.

Скачать её можно отсюда: https://github.com/operasoftware/operachromiumdriver/releases

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

Теперь при инициализации ChromeDriver вместо пути к браузеру нужно указать путь к этой утилите, извлечённой из загруженного архива (а браузер она уже сама найдёт, если он установлен в стандартное место):

ChromeDriverService service = new ChromeDriverService.Builder()
.usingDriverExecutable(new File("C:\\Tools\\operadriver.exe")).build();
ChromeDriver driver = new ChromeDriver(service);
driver.get("http://selenium2.ru/");
driver.quit();

И чтобы ещё немного сократить количество кода, в Selenium начиная с версии 2.45 добавлен новый интерфейсный класс OperaDriver, который сам умеет находить исполняемый файл operadriver, так что запуск Opera становится таким же простым, как запуск любого другого браузера:

OperaDriver driver = new OperaDriver();
driver.get("http://selenium2.ru/");
driver.quit();

Правда, для этого нужно исполняемый файл operadriver поместить в какую-нибудь директорию, где операционная система сможет его найти, то есть в любую директорию, упомянутую в переменной окружения PATH. Пользователи операционной системы Windows могут положить этот файл, например, в директорию C:\windows\system32

И ещё будьте внимательны -- новый OperaDriver находится в пакете org.openqa.selenium.opera, а есть ещё старый класс с таким же названием, который находится в пакете com.opera.core.systems, он предназначен для работы со "старой" Opera, построенной на движке Presto.

Go to top