Я пытаюсь запустить chrome с URL-адресом, браузер запускается, но после этого ничего не происходит.

Я вижу следующую ошибку через 1 минуту:

Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
  (Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)

Моя конфигурация:

  • Chrome : 66
  • ChromeBrowser : 2.39.56

P.S все прекрасно работает в Firefox

Ответы (37)

Обновление:

Мне удалось решить проблему, и теперь я могу получить доступ к хрому по нужному url.

Результаты опробования предложенных решений:

Я попробовал все настройки, как указано выше, но мне не удалось решить проблему

Пояснение по вопросу:

По моим наблюдениям, несуществование файла DevToolsActivePort вызвано тем, что chrome не может найти его ссылку в папке scoped_dirXXXXX.

Шаги, предпринятые для решения проблемы

.
  1. Я убил все процессы chrome и процессы драйвера chrome.
  2. Добавил следующий код для вызова хрома

    System.setProperty("webdriver.chrome.driver", "pathto\\\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(options);
    driver.get(url);
    

Пользуясь вышеописанными шагами, я смог решить проблему.

Спасибо за ваши ответы.

У меня была такая же проблема, но в моем случае chrome ранее был установлен в папку temp пользователя, после чего был переустановлен в Program files. Поэтому ни одно из предложенных здесь решений мне не помогло. Но если указать путь к chrome.exe, все работает:

chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

Надеюсь, это кому-нибудь поможет =)

Я решил эту проблему, установив yum -y install gtk3-devel gtk3-devel-docs", все работает нормально

Моя работа env :

Selenium Version 3.12.0
ChromeDriver Version v2.40
Chrome 68 level

До:
введите описание изображения здесь

введите описание изображения здесь

После:
введите описание изображения здесь введите описание изображения здесь

В моем случае я пытался создать запускаемый jar на Windows OS с браузером chrome и хотел запустить то же самое в режиме headless в unix box с CentOs на нем. И я указывал свой двоичный файл на драйвер, который я загрузил и упаковал вместе с моим набором. Эта проблема продолжает возникать независимо от того, что я добавлю следующее:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");
options.setBinary("/pointing/downloaded/driver/path/in/automationsuite");
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("window-size=1024,768"); // Bypass OS security model
options.addArguments("--log-level=3"); // set log level
options.addArguments("--silent");//
options.setCapability("chrome.verbose", false); //disable logging
driver = new ChromeDriver(options);

Решение, которое я пробовал и которое сработало для меня: загрузите chrome и его инструменты на хост-компьютер VM/Unix box, установите и укажите двоичный файл на это в пакете автоматизации и бинго! Все работает :)

Команда загрузки:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

Команда установки:

sudo yum install -y ./google-chrome-stable_current_*.rpm

Обновите пакет с приведенным ниже бинарным путем google-chrome:

options.setBinary("/opt/google/chrome/google-chrome");

И... это работает!

Поскольку это самое активное сообщение о подобной ошибке, я хотел упомянуть о своем решении (после того, как потратил несколько часов на исправление этой ошибки).

На Ubuntu 18.04, используя Chrome 70 и Chromedriver 2.44, а также Python3, я постоянно получал одну и ту же ошибку DevToolsActivePort, даже когда отключил все перечисленные выше опции. Лог-файл chromedriver, а также ps показывали, что chromedriver, который я установил в chrome_options.binary_location, был запущен, но он всегда выдавал ошибку DevToolsActivePort. Когда я удалил chrome_options.binary_location='....' и добавил его при создании webdriver, он заработал нормально. webdriver.Chrome('/путь к ... /chromedriver',chrome_options=chrome_options)

Спасибо всем за ваши комментарии, которые помогли мне понять и решить проблему.

обновить возможности в conf.js как

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['todo-spec.js'],
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ['--disable-gpu', '--no-sandbox', '--disable-extensions', '--disable-dev-shm-usage']
    }
  },

};

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

System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);

Это решается удалением второй строки.

Как сказано в другом ответе:

Это сообщение об ошибке... означает, что драйвер ChromeDriver не смог инициировать/породить новую сессию WebBrowser, т. е. Chrome Browser.

В числе возможных причин, я хотел бы упомянуть тот факт, что в случае, если вы запускаете безголовый Chromium через Xvfb, вам может понадобиться export переменной DISPLAY: В моем случае, у меня были установлены (как рекомендовано) опции --disable-dev-shm-usage и --no-sandbox, все работало нормально, но в новой установке под управлением последней (на момент написания статьи) версии Ubuntu 18.04 эта ошибка стала возникать, и единственным возможным исправлением было выполнение export DISPLAY=":20" (предварительно запустив Xvfb с Xvfb :20&).

Эту ошибку можно получить, просто передав Chrome неверные аргументы. Например, если я передаю "headless" в качестве аргумента C# ChromeDriver, он отлично запускается. Если я ошибусь и использую неправильный синтаксис, "--headless", я получу ошибку DevToolsActivePort file doesn't exist.

Это происходит, когда chromedriver не может определить, какой отладочный порт использует chrome.

Одной из возможных причин является открытый дефект с HKEY_CURRENT_USER\Software\Policies\Google\Chrome\UserDataDir

Но в моем последнем случае это была какая-то другая неустановленная причина.

К счастью, установка номера порта вручную сработала:

final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);

В моем случае в следующем окружении:

  • Windows 10
  • Python 3.7.5
  • Google Chrome версии 80 и соответствующий ChromeDriver по пути C:\Windows
  • selenium 3.141.0

Мне нужно было добавить аргументы --no-sandbox и --remote-debugging-port=9222 в объект ChromeOptions и запустить код от имени администратора, запустив Powershell/cmd от имени администратора.

Здесь представлен связанный фрагмент кода:

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(options=options)

Я столкнулся с той же проблемой, я использую UBUNTU, PYTHON и браузер OPERA. В моем случае проблема возникла из-за устаревшей версии operadriver.

.

Решение: 1. Убедитесь, что вы установили последнюю версию браузера opera (не используйте opera beta или opera developer), для этого перейдите на официальный сайт opera и скачайте оттуда последнюю версию opera_stable.

  1. Установите последнюю версию драйвера opera (если у вас уже установлен драйвер opera, сначала удалите его с помощью sudo rm ...)

wget https://github.com/operasoftware/operachromiumdriver/releases/download/v.80.0.3987.100/operadriver_linux64.zip

   unzip operadriver_linux64.zip
   sudo mv operadriver /usr/bin/operadriver
   sudo chown root:root /usr/bin/operadriver
   sudo chmod +x /usr/bin/operadriver

В моем случае последним был 80.0.3987, как вы можете видеть

  1. Дополнительно я также установил chromedriver (но так как я сделал это до тестирования, я не знаю, нужно ли это), чтобы установить chromedriver, следуйте шагам на предыдущем шаге :v

  2. Наслаждайтесь и благодарите меня!

Пример кода selenium

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Opera()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.quit()

TL;DR: Если вы используете общие папки VirtualBox, не создавайте там профиль Chrome!


Я столкнулся с этой ошибкой в Debian 10, но она не возникла в Ubuntu 18.04.

В своих тестах Selenium я хотел установить расширение и использовать следующие параметры Chrome:

chromeOptions.addArguments(
  `load-extension=${this.extensionDir}`,
  `user-data-dir=${this.profileDir}`,
  `disable-gpu`,
  `no-sandbox`,
  `disable-setuid-sandbox`,
  `disable-dev-shm-usage`,
);

Проблема заключалась в том, что я пытался создать профиль Chrome в нестандартном каталоге, который был частью общей папки VirtualBox. Несмотря на использование точно такой же версии Chrome и Chromedriver, это не сработало в Debian.

Решением было выбрать каталог профиля в другом месте (например, ~/chrome-profile).

У меня такая же проблема. Я запускаю сценарий selenium на облачной виртуальной машине Google.

options.addArguments("--headless");

Приведенная выше строка решила мою проблему. Я удалил другие необязательные аргументы. Думаю, остальные строки кода, упомянутые в других ответах, не оказали никакого влияния на решение проблемы на облачной виртуальной машине.

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

Когда я обновил свой Docker-образ установки Chrome со старой версии до Chrome 86, я получил эту ошибку. Моя установка не была идентичной, но мы инстанцировали Chrome через веб-драйвер selenium.

Решением было передать опции в виде хэша goog:chromeOptions вместо хэша chromeOptions. Я действительно не знаю, было ли это обновление Selenium, Chrome, Chromedriver или какое-то другое, но, возможно, какая-нибудь бедная душа найдет утешение в этом ответе в будущем.

Я использую chromium, но я создал сценарий оболочки под названием chrome, чтобы мне было проще открывать браузер из dmenu.

#!/bin/bash

/usr/bin/chromium

Драйвер chrome ищет chrome в PATH и выполняет его. В результате я получаю ту же ошибку.

org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /home/s1n7ax/.local/share/s1n7ax/bin/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 's1n7ax', ip: '127.0.1.16', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.70-1-lts', java.version: '11.0.8'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x56030c96dd99 

Я только что удалил сценарий оболочки и добавил мягкую ссылку на chromium. Теперь все работает.

Моя проблема заключалась в ошибке в php-webdriver. Мой код был следующим:

$chromeOptions = new ChromeOptions();
$chromeOptions->addArguments([
    '--headless',
    '--no-sandbox',
    '--disable-gpu',
    '--disable-dev-shm-usage',
    '--no-proxy-server'
]);
$chromeOptions->setExperimentalOption('detach', true);
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(
    ChromeOptions::CAPABILITY,
    $chromeOptions
);

Как видите, все совпадает с остальными возможными причинами.

Но на самом деле возможности не передавались в chromedriver. Мне пришлось изменить настройку возможностей опций chrome на:

$capabilities->setCapability(
    ChromeOptions::CAPABILITY_W3C, // <<<< Нужно использовать возможности W3C с последними версиями Chromedriver.
    $chromeOptions->toArray() // <<<<<<< ошибка в php-webdriver 1.9, объект не сериализуется автоматически, как при использовании устаревшей возможности ChromeOptions::CAPABILITY
);

Моя установка была следующей:

$ chromedriver --version
ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614})
$ java -jar selenium-server-standalone-3.141.59.jar --version
Selenium server version: 3.141.59, revision: e82be7d358

Сделано сообщение об ошибке и PR для исправления этой ошибки в php-webdriver

https://github.com/php-webdriver/php-webdriver/issues/849

В моем случае это была проблема с учетной записью CI Agent на сервере ubuntu, я решил ее с помощью пользовательского --user-data-dir

.

chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')

Мой аккаунт, используемый CI Agent, не имел необходимых прав, что интересно, все работало под учетной записью root

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')

driver = webdriver.Chrome(options=chrome_options)
url = 'https://www.google.com'
driver.get(url) 
get_url = driver.current_url 
print(get_url)

Правило пальца

Обычной причиной падения Chrome при запуске является запуск Chrome от имени root пользователя (administrator) в Linux. Хотя эту проблему можно обойти, передав флаг --no-sandbox при создании сессии WebDriver, такая конфигурация не поддерживается и крайне не рекомендуется. Вам необходимо настроить свое окружение так, чтобы запускать Chrome от имени обычного пользователя.

.

Это сообщение об ошибке...

org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist 

...подразумевает, что ChromeDriver не смог инициировать/породить новый WebBrowser, то есть Chrome Browser сеанс.

Ваши испытания кода и информация о версиях всех двоичных файлов дали бы нам хоть какой-то намек на то, что идет не так.

Кстати, согласно Добавить --disable-dev-shm-usage к флагам запуска по умолчанию, добавление аргумента --disable-dev-shm-usage временно решит проблему.

Если вы хотите инициировать/развернуть новую сессию Chrome Browser, вы можете воспользоваться следующим решением:

System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");

отключить-dev-shm-usage

Согласно base_switches.cc disable-dev-shm-usage, похоже, действует только на Linux OS:

.
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif

В обсуждении Добавить опцию для использования /tmp вместо /dev/shm Дэвид упоминает:

Я думаю, это зависит от того, как смонтированы /dev/shm и /tmp. Если они оба смонтированы как tmpfs, я полагаю, что разницы не будет. Если по какой-то причине /tmp не смонтирован как tmpfs (а я думаю, что по умолчанию systemd смонтирован как tmpfs), управление общей памятью chrome всегда монтирует файлы в память при создании анонимных общих файлов, так что даже в этом случае не должно быть большой разницы. Думаю, вы можете провести тесты телеметрии с включенным флагом и посмотреть, что из этого выйдет.

Что касается того, почему не использовать по умолчанию, это было отклонено командой по общей памяти, думаю, логично, что она должна использовать /dev/shm для общей памяти по умолчанию.

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


Ссылка

Вы можете найти пару подробных обсуждений в:


Аутро

Здесь находится ссылка на Sandbox историю.

Существует множество возможных причин появления сообщения об ошибке RESPONSE InitSession ERROR unknown error: DevToolsActivePort file does not exist (как видно из количества ответов на этот вопрос). Итак, давайте углубимся, чтобы объяснить, что именно означает это сообщение об ошибке.

Согласно исходному коду chromedriver сообщение создается в методе ParseDevToolsActivePortFile. Этот метод вызывается из цикла после запуска процесса chrome.

.

В цикле драйвер проверяет, запущен ли еще процесс chrome и был ли файл ParseDevToolsActivePortFile уже создан chrome. Для этого цикла существует хардкодированный таймаут 60s.

.

Я вижу две возможные причины этого сообщения:

  • Chrome очень медленно запускается - например, из-за нехватки системных ресурсов - в основном процессора или памяти. В этом случае может случиться так, что иногда хрому удается запуститься за определенное время, а иногда нет.

  • Есть и другая проблема, которая мешает запуску chrome - отсутствующая или неработающая зависимость, неправильная конфигурация и т.д. В этом случае данное сообщение об ошибке не поможет, и вам следует найти другое сообщение журнала, которое объяснит истинную причину сбоя.
    • В этом случае может случиться так, что иногда chrome не удается запуститься.

Я начал наблюдать эту проблему в понедельник 2018-06-04. Наши тесты запускаются каждый будний день. Похоже, что изменилась только версия google-chrome (которая была обновлена до актуальной) JVM и Selenium были последних версий на Linux box ( Java 1.8.0_151, selenium 3.12.0, google-chrome 67.0.3396.62, и xvfb-run).
. Конкретно добавление аргументов "--no-sandbox" и "--disable-dev-shm-usage" остановило ошибку. Я изучу эти вопросы, чтобы найти больше информации об эффекте, а также другие вопросы о том, что вызвало обновление google-chrome.

ChromeOptions options = new ChromeOptions();
        ...
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");

Ни одно решение не сработало для меня. Но вот обходной путь:

maxcounter=5
for counter in range(maxcounter):
    try:           
        driver = webdriver.Chrome(chrome_options=options,
                          service_log_path=logfile,
                          service_args=["--verbose", "--log-path=%s" % logfile])
        break
    except WebDriverException as e:
        print("RETRYING INITIALIZATION OF WEBDRIVER! Error: %s" % str(e))
        time.sleep(10)
        if counter==maxcounter-1:
            raise WebDriverException("Maximum number of selenium-firefox-webdriver-retries exceeded.")

У меня была такая же проблема в python. Вышеописанное помогло. Вот что я использовал в python -

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options)

В моем случае неверный номер порта. Проверьте, совпадает ли номер порта при запуске сервера Selenium с номером порта в вашем сценарии.

Я запускаю тесты selenium с Jenkins, работающим на Ubuntu 18 LTS linux. У меня была эта ошибка, пока я не добавил аргумент 'headless' следующим образом (и некоторые другие аргументы):

ChromeOptions options = new ChromeOptions();
options.addArguments("headless"); // headless -> no browser window. needed for jenkins
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
ChromeDriver driver = new ChromeDriver(options);

driver.get("www.google.com");

Я столкнулся с той же проблемой при запуске Chrome через Behat/Mink и Selenium в контейнере Docker. После некоторого возиться я пришел к следующему behat.yml, который содержит упомянутые выше переключатели. Обратите внимание, что все они были необходимы для успешного запуска.

default:
    extensions:
        Behat\MinkExtension:
            base_url: https://my.app/
            default_session: selenium2
            selenium2:
                browser: chrome
                capabilities:
                    extra_capabilities:
                        chromeOptions:
                            args:
                                - "headless"
                                - "no-sandbox"
                                - "disable-dev-shm-usage"

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

Я также столкнулся с этой проблемой при интеграции с сервером jenkins, я использовал пользователя root для работы jenkin, проблема была устранена, когда я изменил пользователя на другого пользователя. Я не уверен, почему эта ошибка возникает для пользователя root.

  • Google Chrome версии 71.0
  • ChromeDriver Версия 2.45
  • CentOS7 Версия 1.153

Для Ubuntu 20 это помогло мне использовать системный драйвер хрома вместо загруженного:

# chromium which
/snap/bin/chromium

driver = webdriver.Chrome('/snap/bin/chromium.chromedriver',
                          options=chrome_options)

Для загруженного веб-драйвера, похоже, требуется установить порт удаленной отладки --remote-debugging-port=9222, как в одном из ответов (автор Soheil Pourbafrani):

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome('/chromedriver', options=chrome_options)

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

Так что я использовал это для использования другого tmpdir:

driver = new ChromeDriver(new ChromeDriverService.Builder()
                    .withEnvironment(ImmutableMap.of("TMPDIR", customTmpPath))
                    .build(), options);

Но теперь, когда я обновил все до последней версии, это больше не работает. Мне придется найти новый способ сделать это.

Я столкнулся с этой проблемой на Ubuntu 20 с Python Selenium после того, как сначала отдельно загрузил chromedriver, а затем с помощью sudo apt install chromium-browser Несмотря на то, что они были одной версии, это продолжало происходить.

Мое решение заключалось в использовании драйвера chrome, который поставляется с пакетом репо, расположенным по адресу

.

/snap/bin/chromium.chromedriver

driver = webdriver.Chrome(chrome_options=options, executable_path='/snap/bin/chromium.chromedriver')

В моем случае это произошло, когда я попытался использовать свой профиль пользователя по умолчанию:

...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...

Это заставляло chrome повторно использовать процессы, уже запущенные в фоновом режиме, таким образом, что процесс, запущенный chromedriver.exe, просто завершался.

Решение: убить все процессы chrome.exe, работающие в фоновом режиме.

У нас были те же проблемы на наших ведомых jenkins (машина linux), и мы попробовали все варианты, описанные выше.

Единственное, что помогло - это установка аргумента

chrome_options.add_argument('--headless')

Но при дальнейшем исследовании мы заметили, что экран XVFB не запускается, что и вызывает эту ошибку. После того как мы исправили экран XVFB, проблема была решена.

Недавно я столкнулся с той же проблемой, и после некоторых проб и ошибок она сработала и для меня.

МОЖНО БЫТЬ НА ВЫСОТЕ:

.
options.addArguments("--no-sandbox"); //has to be the very first option

BaseSeleniumTests.java

public abstract class BaseSeleniumTests {

    private static final String CHROMEDRIVER_EXE = "chromedriver.exe";
    private static final String IEDRIVER_EXE = "IEDriverServer.exe";
    private static final String FFDRIVER_EXE = "geckodriver.exe";
    protected WebDriver driver;

    @Before
    public void setUp() {
        loadChromeDriver();
    }

    @After
    public void tearDown() {
        if (driver != null) {
            driver.close();
            driver.quit();
        }
    }

    private void loadChromeDriver() {
        ClassLoader classLoader = getClass().getClassLoader();
        String filePath = classLoader.getResource(CHROMEDRIVER_EXE).getFile();
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        ChromeDriverService service = new ChromeDriverService.Builder()
                .usingDriverExecutable(new File(filePath))
                .build();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--no-sandbox"); // Bypass OS security model, MUST BE THE VERY FIRST OPTION
        options.addArguments("--headless");
        options.setExperimentalOption("useAutomationExtension", false);
        options.addArguments("start-maximized"); // open Browser in maximized mode
        options.addArguments("disable-infobars"); // disabling infobars
        options.addArguments("--disable-extensions"); // disabling extensions
        options.addArguments("--disable-gpu"); // applicable to windows os only
        options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
        options.merge(capabilities);
        this.driver = new ChromeDriver(service, options);
    }

}

GoogleSearchPageTraditionalSeleniumTests.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class GoogleSearchPageTraditionalSeleniumTests extends BaseSeleniumTests {

    @Test
    public void getSearchPage() {
        this.driver.get("https://www.google.com");
        WebElement element = this.driver.findElement(By.name("q"));
        assertNotNull(element);
    }

}

pom.xml


        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.seleniumhq.selenium
            selenium-java
            test
        

Дата 9/16/2021

Все работает нормально, запуская chrome с selenium локально с помощью python внутри контейнера ubuntu, размещенного на docker. При попытке запуска из Jenkins выдается вышеуказанная ошибка WebDriverException: unknown error: DevToolsActivePort

Окружающая среда:

-Ubuntu21.04 внутри контейнера docker с доступом по RDP.

-chromedriver для chrome версии: 93

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

import os

os.environ['DISPLAY'] = ':10.0'
#DISPLAY_VAR = os.environ.get('DISPLAY')
#print("DISPLAY_VAR:", DISPLAY_VAR)

в моем случае, когда я изменил версию google-chrome и chromedriver, ошибка была исправлена :)

#google-chrome version
[root@localhost ~]# /usr/bin/google-chrome --version
Google Chrome 83.0.4103.106 

#chromedriver version
[root@localhost ~]# /usr/local/bin/chromedriver -v
ChromeDriver 83.0.4103.14 (be04594a2b8411758b860104bc0a1033417178be-refs/branch-heads/4103@{#119})

ps: версия selenium была 3.9.1

2022 WebDevInsider