[Решено] Эта версия ChromeDriver поддерживает только версию Chrome

1. Проблема

При запуске теста пользовательского интерфейса с использованием selenium очень часто возникают проблемы с совместимостью драйверов. Например, на локальной машине установлена версия браузера 114, а chromedriver, загруженный с библиотекой, ожидает версию браузера 112.

Ошибка указывает на то, что используемая версия драйвера браузера и установленный браузер несовместимы. Трассировка исключения SessionNotCreatedException выглядит следующим образом:

Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500.Message: session not created: This version of ChromeDriver only supports Chrome version 112Current browser version is 114.0.5735.110 with binary path C:\Program Files\Google\Chrome\Application\chrome.exeHost info: host: 'LAPTOP-7JGBN7BP', ip: '192.168.0.130'Build info: version: '4.8.1', revision: '8ebccac989'System info: os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '17.0.1'Driver info: org.openqa.selenium.chrome.ChromeDriver

2. Решение

Существует довольно много решений для исправления этой проблемы совместимости, например, загрузка совместимой версии драйвера с соответствующих страниц загрузки( драйверы Chrome,драйверы Firefox или драйверы Edge ), которые соответствуют установленной версии браузера. Кроме того, мы можем удалить и затем установить совместимые версии браузера.

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

Чтобы правильно исправить эту проблему, один из хороших способов — использовать библиотеку WebDriverManager. Это библиотека Java с открытым исходным кодом, которая выполняет управление(т. е. загрузку, настройку и обслуживание) драйверов, необходимых Selenium WebDriver, полностью автоматизированным образом. Ее последняя версия предоставляет другие важные функции, такие как возможность обнаружения браузеров, установленных в локальной системе, бесперебойный запуск браузеров в контейнерах Docker и возможности мониторинга.

2.1.Мавен

Включите последнюю версию io.github.bonigarcia:webdrivermanager из репозитория Maven.

<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.3.3</version><scope>test</scope></dependency>

Мы также можем использовать его в проекте Gradle:

dependencies {testImplementation("io.github.bonigarcia:webdrivermanager:5.3.3")}

2.2.Использование

Чтобы автоматизировать управление драйверами, нам необходимо выбрать нужный менеджер в API WebDriverMager(например, chromedriver() для Chrome) и вызвать метод setup().

@BeforeAllstatic void setup() {WebDriverManager.chromedriver().setup();}

При выполнении метод setup() пытается найти версию браузера, установленную на машине. Затем, используя версию браузера, он пытается найти правильную версию драйвера с помощью различных методов. После обнаружения версии драйвера WebDriverManager загружает драйвер в локальный кэш(расположенный в ~/.cache/selenium) и экспортирует путь драйвера с помощью системных свойств Java. Эти драйверы повторно используются в последующих вызовах.

Аналогичным образом мы можем настроить драйверы для Firefox, Edge, Opera, Chromium и Internet Explorer, используя одно из следующих утверждений:

WebDriverManager.firefoxdriver().setup();WebDriverManager.edgedriver().setup();WebDriverManager.operadriver().setup();WebDriverManager.chromiumdriver().setup()WebDriverManager.iedriver().setup();

2.3 Пример

Ниже приведен тест JUnit 5 для запуска браузера, открытия домашней страницы Google и подтверждения ее заголовка.

import io.github.bonigarcia.wdm.WebDriverManager;import org.junit.jupiter.api.Assertions;import org.junit.jupiter.api.BeforeAll;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.chrome.ChromeOptions;public class AppTest {static WebDriver browser;@BeforeAllstatic void setup() {WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.setHeadless(false);options.addArguments("start-maximized"); // open Browser in maximized modeoptions.addArguments("disable-infobars"); // disabling infobarsoptions.addArguments("--disable-extensions"); // disabling extensionsoptions.addArguments("--disable-gpu"); // applicable to Windows os onlyoptions.addArguments("--disable-dev-shm-usage"); // overcome limited resource problemsoptions.addArguments("--no-sandbox"); // Bypass OS security modeloptions.addArguments("--disable-in-process-stack-traces");options.addArguments("--disable-logging");options.addArguments("--log-level=3");options.addArguments("--remote-allow-origins=*");browser = new ChromeDriver(options);}@Test@DisplayName("The google.com web site should have the correct title")void testProjectWebSiteShouldHaveCorrectTitle() {browser.get("https://google.com/");Assertions.assertEquals("Google", browser.getTitle());}}

При запуске теста загружается правильный драйвер Chrome, запускается версия Chrome, открывается домашняя страница Google и успешно проверяется заголовок веб-страницы.

Прокрутить вверх