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

根据本文,为了获得更好的用户体验, Google Chrome会为@Tests打开的每个选项卡启动大量后台进程。Google 试图通过将每个网页分成其认为合适的多个进程来保持 Chrome 浏览器的稳定,以确保如果页面上的一个进程失败,则可以终止或刷新该特定进程,而无需终止或刷新该进程整个页面。
然而,从 2018 年起,Google Chrome实际上被重新设计,为以下每个实体创建一个新流程:
此外,在Chromium 博客中提到:
Google Chrome 利用这些特性,将网络应用程序和插件置于与浏览器本身不同的进程中。这意味着一个 Web 应用程序中的渲染引擎崩溃不会影响浏览器或其他 Web 应用程序。这意味着操作系统可以并行运行网络应用程序以提高其响应能力,并且意味着如果特定网络应用程序或插件停止响应,浏览器本身也不会锁定。这也意味着我们可以在限制性沙箱中运行渲染引擎进程,这有助于限制发生漏洞时造成的损害。
总之,您看到的许多流程都是经过设计的,并且符合Google Chrome的当前实现。
| 归档时间: |
|
| 查看次数: |
3159 次 |
| 最近记录: |