chromedriver.exe 运行约 8 个 chrome.exe 实例

Den*_*nys 2 selenium google-chrome webdriver selenium-chromedriver selenium-webdriver

我使用 Selenium 编写 UI 自动化测试。我注意到,当我创建 chromedriver.exe 实例时 -> ~8 chrome.exe 进程出现在任务管理器中。

运行 1 个测试时的任务管理器屏幕截图:

截图任务管理器

因此,当我并行运行时,假设有 8 个测试,任务管理器中有很多 chrome.exe 实例,它们使用一些端口并加载 CPU 和内存。

它是按设计工作的吗?为什么一个 chromedriver.exe 需要这么多 chrome.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();
    }
  /////////////////////////////////////////////
}
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 5

当使用Google Chrome执行自动化测试时,您一定已经观察到可能有数十个Google Chrome进程正在运行,可以通过 Windows 任务管理器的选项卡进行观察。Processes

快照:

GoogleChrome_processes

根据本文,为了获得更好的用户体验, Google Chrome会为@Tests打开的每个选项卡启动大量后台进程。Google 试图通过将每个网页分成其认为合适的多个进程来保持 Chrome 浏览器的稳定,以确保如果页面上的一个进程失败,则可以终止或刷新该特定进程,而无需终止或刷新该进程整个页面。


然而,从 2018 年起,Google Chrome实际上被重新设计,为以下每个实体创建一个新流程:

  1. 标签
  2. 页面上的 HTML/ASP 文本
  3. 那些已加载的插件
  4. 已加载的应用程序
  5. 页面内的框架

此外,在Chromium 博客中提到:

Google Chrome 利用这些特性,将网络应用程序和插件置于与浏览器本身不同的进程中。这意味着一个 Web 应用程序中的渲染引擎崩溃不会影响浏览器或其他 Web 应用程序。这意味着操作系统可以并行运行网络应用程序以提高其响应能力,并且意味着如果特定网络应用程序或插件停止响应,浏览器本身也不会锁定。这也意味着我们可以在限制性沙箱中运行渲染引擎进程,这有助于限制发生漏洞时造成的损害。

总之,您看到的许多流程都是经过设计的,并且符合Google Chrome的当前实现。