chromedriver.exe запускает ~ 8 экземпляров chrome.exe - PullRequest
1 голос
/ 23 октября 2019

Я пишу тесты автоматизации пользовательского интерфейса с использованием Selenium. И я заметил, что при создании экземпляра chromedriver.exe -> ~ 8 процессов chrome.exe появляются в диспетчере задач.

Снимок экрана диспетчера задач при запуске 1 теста:

Screenshot Task Manager

Итак, когда я запускаю параллельно, скажем, 8 тестов, в диспетчере задач много экземпляров chrome.exe, которые используют некоторые порты и загружают ЦП и память.

Это работает по дизайну? Почему так много экземпляров chrome.exe требуется для одного chromedriver.exe? Это настраивается?

В моем коде у меня просто есть класс "Chrome". Его конструктор создает новый экземпляр chromedriver.exe:

Chrome chrome = new Chrome();

public class Chrome
{
    public OpenQA.Selenium.Chrome.ChromeDriver Driver;

    public Chrome(bool incognitoMode = false, bool maximizeWindow = true)
    {
        ChromeOptions options = new ChromeOptions();
        if (incognitoMode)
        {
            options.AddArguments("--incognito");
        }

        Driver = new ChromeDriver(options);
        Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(360);
        if (maximizeWindow)
            Driver.Manage().Window.Maximize();
    }
  /////////////////////////////////////////////
}

1 Ответ

2 голосов
/ 23 октября 2019

Когда автоматизированные тесты выполняются с использованием Google Chrome , вы, должно быть, заметили, что потенциально могут быть запущены десятки Google Chrome процессов, которые можно наблюдать с помощью задачи WindowsProcesses вкладка менеджера.

Снимок:

GoogleChrome_processes

В соответствии с этой статьей для лучшего взаимодействия с пользователем Google Chrome запускает множество фоновых процессов для каждого из TABS , которые были открыты вашими @ Tests . Google пытается поддерживать стабильность браузера Chrome, разделяя каждую веб-страницу на столько процессов, сколько считает нужным, чтобы гарантировать, что в случае сбоя одного процесса на странице этот конкретный процесс (ы) может быть остановлен или обновлен без необходимости уничтожения или обновлениявся страница.


Однако с 2018 года Google Chrome фактически был переработан для создания нового процесса для каждого из следующих объектов:

  1. Tab
  2. HTML / ASP текст на странице
  3. Плагин загружен
  4. Приложение загружен
  5. Кадры на странице

Кроме того, в Chromium Blog упоминается:

Google Chrome использует эти свойства и размещает веб-приложения и плагины в отдельных процессах от самого браузера. Это означает, что сбой движка рендеринга в одном веб-приложении не повлияет на браузер или другие веб-приложения. Это означает, что ОС может запускать веб-приложения параллельно, чтобы повысить их скорость отклика, и это означает, что сам браузер не блокируется, если конкретное веб-приложение или плагин перестает отвечать на запросы. Это также означает, что мы можем запускать процессы механизма рендеринга в ограничительной песочнице, которая помогает ограничить ущерб, если эксплойт все-таки произойдет.

В заключение, многие процессы, которые вы видите, являются такими, как задуманы и разработаны. строка с текущей реализацией Google Chrome .

...