首页 > 解决方案 > 如何在不聚焦窗口的情况下切换 Selenium 中的选项卡

问题描述

我在 Windows 10 上使用 C# Selenium 和 Edge webdriver。下面是我在选项卡之间切换的代码。

public class BrowserTest
{
    private readonly EdgeDriver driver;
    public BrowserTest()
    {
        EdgeDriverService service = EdgeDriverService.CreateDefaultService(configuration[DriverPathKey]);
        service.SuppressInitialDiagnosticInformation = true;
        service.HideCommandPromptWindow = true;
        driver = new EdgeDriver(service, new EdgeOptions()
        {
            PageLoadStrategy = PageLoadStrategy.Default,
        });
    }

    public void OpenGoogleAndDuckduckgo()
    {
        driver.Url = "https://google.com/";
        driver.ExecuteScript("window.open();");
        driver.SwitchTo().Window(driver.WindowHandles.Last()); // This line lead to Edge focusing
        driver.Url = "https://duckduckgo.com/";
    }
}

但似乎它专注于边缘浏览器,让我远离检查我的电子邮件等。我怎样才能让 Selenium “静默”地专注于新标签(或窗口等),这样我就可以在我的代码运行时做一些事情?

P/s:我尝试了无头模式,但我需要手动输入凭据才能登录,所以我需要一个 UI。或者是否有办法在运行时从窗口模式转换为无头模式?

标签: c#selenium

解决方案


  1. 您无法在 Selenium 中实现这一点(改变焦点而不关注焦点)。如果您正在运行 Selenium 测试,只需使用不同的机器。硬件或虚拟。

浏览器的无头模式也不是一个好的解决方案。由于正常模式和无头模式之间的差异,您迟早会遇到太多问题需要解决。

  1. 在浏览器的自动化模式下,避免验证码非常困难。您需要 AI 在该模式下解决验证码,甚至不能保证它会起作用(取决于验证码和服务器保护)。如果您需要测试或抓取一些具有此保护的页面,您必须使用不同的方法:为浏览器(javascript 应用程序)编写插件并在浏览器的常规模式下运行它。

推荐阅读