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

时间:2019-10-23 09:09:01

标签: selenium google-chrome selenium-webdriver webdriver selenium-chromedriver

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

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

Screenshot Task Manager

因此,当我并行运行时,可以说有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();
    }
  /////////////////////////////////////////////
}

1 个答案:

答案 0 :(得分:2)

使用 Google Chrome 执行自动测试时,您必须已经观察到可能正在运行许多 Google Chrome 进程通过Windows任务管理器的Processes标签。

快照:

GoogleChrome_processes

按照此article,以获得更好的用户体验 Google Chrome 为每个 TABS 启动许多后台进程您的 @Tests 打开的文件。 Google尝试通过将每个网页分成它认为合适的多个进程来保持chrome浏览器的稳定,以确保如果某个进程在页面上失败,则可以终止或刷新该特定进程而无需终止或刷新该进程。整个页面。


但是,从2018年开始, Google Chrome 实际上经过了重新设计,以为以下每个实体创建新流程:

  1. Tab
  2. 页面上的HTML / ASP文本
  3. 将这些插件插入
  4. 已加载的应用
  5. 页面内的框架

此外,在Chromium Blog中提到:

  

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

结论是,您看到的许多过程都是设计好的,并且与 Google Chrome 的当前实施相一致。