Selenium 测试不再使用 Chrome 驱动程序创建临时 Chrome 配置文件

Selenium test no longer creating a temporary Chrome profile using Chrome Driver

提问人:J.R. Bye 提问时间:8/11/2023 最后编辑:J.R. Bye 更新时间:8/11/2023 访问量:77

问:

我正在使用 C# 和 Visual Studio。我正在使用 Selenium.Support 和 Selenium.WebDriver 包的当前版本。

以前,当我在 Chrome 中运行 Selenium 测试时,默认情况下它会以临时配置文件打开。这将确保有一个新的会话,并且来自任何其他配置文件的 cookie 都不会潜在地污染测试结果。

自从将 Chrome 更新到版本 115 以来(我不确定这是原因。它只是相关。我不再看到这种行为。当我现在运行测试时,它会在现有窗口中打开一个新的空白选项卡,并且不会发生其他任何事情。我收到以下错误,可能是因为 Selenium 无法附加到现有会话。

    OpenQA.Selenium.WebDriverException : unknown error: Chrome failed to start: exited normally.
  (chrome not reachable)
  (The process started from chrome location C:\Program Files\Google\Chrome\Application\chrome.exe is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

我尝试了许多Chrome选项的组合:

ChromeOptions options = new ChromeOptions();
                options.AddArgument("no-sandbox");
                options.AddArgument("disable-dev-shm-usage");
                options.AddArgument("disable-gpu");
                options.AddArgument("remote-debugging-port=9222");
                //options.AddArgument("incognito");
                options.AddArgument("start-maximized");
                options.AddArgument("enable-automation");
                options.AddArgument("test-type");
                options.AddArgument("remote-allow-origins=*");
                options.AddArgument("disable-notifications");
                options.AddArgument("dns-prefetch-disable");
                options.AddArgument("disable-features=NetworkService");
                //options.AddUserProfilePreference("signin.allowed_on_next_startup", false);
                //options.AddArgument("user-data-dir=C:\\profile");
                //options.AddArgument("profile-directory=<Guest>");
                //options.AddUserProfilePreference("detach", true);
                options.AddUserProfilePreference("autofill.profile_enabled", false);
                options.AddUserProfilePreference("profile.password_manager_enabled", false);

                IWebDriver webDriver = new ChromeDriver(options);

使用隐身开关时也存在相同的行为。我已经添加和删除了调试端口并尝试了 0。没有运气。我已使用 user-data-dir 和 profile-directory 选项将其指向一个新的配置文件。它要么没有启动,要么确实启动了但没有工作。

运行测试的唯一方法是关闭所有 Chrome 窗口并运行测试。这允许测试创建一个新会话,并且它能够执行测试。这不是完美的想法,因为它使用了当前配置文件中存在的缓存和 cookie 以及内容。

为了解决这个问题,我试图完全卸载Chrome并删除所有文件并完全重新安装,但这没有帮助。我想强制测试创建一个新的临时配置文件,就像它在这里发生任何更改之前所做的那样。我已经阅读了我在这个网站上能找到的所有内容以及许多其他内容,但我找不到任何真正回答这个问题的东西。我考虑过降级,但 Google 不会将旧的 Chrome MSI 留在那里,我不想在我的工作计算机上下载二手 MSI 并导致安全问题。

任何帮助将不胜感激。

更新: 我添加了

options.AddArgument("guest");

它确实以访客身份打开会话,但实际上仍未执行测试。它只是一个空选项卡。

C# visual-studio selenium-chrome驱动程序

评论

0赞 pcalkins 8/11/2023
删除所有选项并试一试......(new ChromeDriver()) 如果测试有效,那么一次添加一个您实际需要的。“remote-debugging-port=9222”可能是这里的原因......这将尝试附加到现有的调试会话。
0赞 J.R. Bye 8/11/2023
@pcalkins 感谢您的评论。我尝试使用一个全新的驱动程序,没有传递任何选项,并看到了相同的行为。
0赞 pcalkins 8/11/2023
你看到 Chrome 发布了吗?你提到它使用了现有的窗口......但是,当不存在时会发生什么?
0赞 J.R. Bye 8/11/2023
@pcalkins,如果根本没有打开任何窗口,它会打开一个窗口,并且,大概是因为它实际上创建了会话,所以一切正常。如果打开了任何窗口,它会在现有窗口中打开一个新选项卡,并且测试不会超出打开窗口的位置。

答: 暂无答案