Selenium如何使用chromedriver和C#清除缓存

本文关键字:清除 缓存 chromedriver 何使用 Selenium | 更新日期: 2023-09-27 17:56:48

我找到了Java示例,这些示例解释了清除缓存非常简单:

示例代码:

System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe");
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
        ChromeOptions opts = new ChromeOptions();
        opts.addArguments("start-maximized");
        capabilities.setCapability(ChromeOptions.CAPABILITY, opts);
        WebDriver driver = new ChromeDriver(capabilities);
        driver.manage().deleteAllCookies();
        driver.get("http://www.google.com");
        System.out.println(driver.getTitle());
        driver.quit();

我试图在 C# 4.6 和 Selenium WebDriver 2.45 中做同样的事情,但 DesiredCapabilities 不包含用于ENSURING_CLEAN_SESSION的枚举或字符串。我不明白为什么 C# 版本没有与 java 版本相同的可用选项。我的预感是有一个技巧,例如直接使用一个字符串来表示与 java 中可用的相同功能作为枚举,我只是不确定它是什么。

这是我的代码:

SetCapability(..) 方法调用毫无意义...

var chromeDriverService = ChromeDriverService.CreateDefaultService();
                chromeDriverService.HideCommandPromptWindow = true;
                DesiredCapabilities capabilities = DesiredCapabilities.Chrome();
                capabilities.SetCapability(ChromeOptions.Capability, true); // ? can't set ENSURING_CLEAN_SESSION, intellisense shows it does not exist
                var options = new ChromeOptions();
                options.AddArguments("test-type");                  
                return new ChromeDriver(chromeDriverService, options);

Selenium如何使用chromedriver和C#清除缓存

您只需强制 chrome 以隐身模式启动即可

capabilities.SetCapability("chrome.switcher", new [] {"--incognito"});
    public static void clearCache(this ChromeDriver driver)
    {
        string cmd = @"@ECHO OFF & CD %temp% & FOR /d %D IN (*) DO RD /s /q ""%D"" & DEL /F /Q *";
        ExecuteCommand(cmd);
        driver.Navigate().GoToUrl("chrome://settings/clearBrowserData");
        ShadowRoot shadowRoot1 = driver.getShadowRootElement(By.CssSelector("settings-ui"));
        ShadowRoot shadowRoot2 = driver.getShadowRootElement(shadowRoot1.FindElement(By.CssSelector("settings-main")));
        ShadowRoot shadowRoot3 = driver.getShadowRootElement(shadowRoot2.FindElement(By.CssSelector("settings-basic-page")));
        ShadowRoot shadowRoot4 = driver.getShadowRootElement(shadowRoot3.FindElement(By.CssSelector("settings-section > settings-privacy-page")));
        ShadowRoot shadowRoot5 = driver.getShadowRootElement(shadowRoot4.FindElement(By.CssSelector("settings-clear-browsing-data-dialog")));
        IWebElement root6 = shadowRoot5.FindElement(By.CssSelector("#clearBrowsingDataDialog"));
        IWebElement root2 = root6.FindElement(By.CssSelector("iron-pages#tabs")).FindElement(By.CssSelector("settings-dropdown-menu#clearFromBasic"));
        ShadowRoot shadowRoot7 = driver.getShadowRootElement(root2);
        IWebElement ddnTimeRange = shadowRoot7.FindElement(By.CssSelector("select#dropdownMenu"));
        new SelectElement(ddnTimeRange).SelectByValue("4");
        IWebElement clearDataButton = root6.FindElement(By.CssSelector("#clearBrowsingDataConfirm"));
        clearDataButton.Click(); // click that hard to reach button!
    }
    public static IJavaScriptExecutor Scripts(this IWebDriver driver)
    {
        return (IJavaScriptExecutor)driver;
    }
    private static void ExecuteCommand(string Command)
    {
        ProcessStartInfo ProcessInfo;
        ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);
        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = true;
        ProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
        Process.Start(ProcessInfo);
    }
    private static ShadowRoot getShadowRootElement(this IWebDriver driver, By by)
    {
        IWebElement element = driver.FindElement(by);
        return (ShadowRoot)driver.Scripts().ExecuteScript("return arguments[0].shadowRoot", element);
    }
    private static ShadowRoot getShadowRootElement(this IWebDriver driver, IWebElement element)
    {
        return (ShadowRoot)driver.Scripts().ExecuteScript("return arguments[0].shadowRoot", element);
    }