【问题标题】:Selenium c# - Clearing cache and browsing dataSelenium c# - 清除缓存和浏览数据
【发布时间】:2020-02-29 05:49:03
【问题描述】:

在我的测试脚本中,我让 selenium 打开了 chrome 设置页面。在该页面上,我希望它选择“清除数据”按钮。

    driver.FindElement(By.CssSelector("* /deep/ #clearBrowsingDataConfirm"));

我收到一条错误消息,提示找不到元素。我也尝试过仅使用“ID”。有没有另一种方法可以做到这一点。

【问题讨论】:

    标签: c# selenium automation selenium-chromedriver


    【解决方案1】:

    这是 @Lanki 的 c# 版本,但如果尚未选中,请确保单击“基本”选项卡、“所有时间”时间范围并单击浏览、Cookie 和缓存复选框。谢谢@Lanki!

        private static IWebElement expandRootElement(IWebElement element) {
            return (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].shadowRoot", element);
        }
    
        private static void clickSettingsCheckbox(IWebElement chkBox) {
            string check = chkBox.GetAttribute("checked");
            if (check == null) chkBox.Click();
        }
    
        public static void clearCacheAndCookies() {
    
            driver.Navigate().GoToUrl("chrome://settings/clearBrowserData");
            driver.SwitchTo().ActiveElement();
    
            IWebElement root1 = driver.FindElement(By.CssSelector("settings-ui"));
            IWebElement shadowRoot1 = expandRootElement(root1);
            IWebElement root2 = shadowRoot1.FindElement(By.CssSelector("settings-main"));
            IWebElement shadowRoot2 = expandRootElement(root2);
            IWebElement root3 = shadowRoot2.FindElement(By.CssSelector("settings-basic-page"));
            IWebElement shadowRoot3 = expandRootElement(root3);
            IWebElement root4 = shadowRoot3.FindElement(By.CssSelector("settings-section > settings-privacy-page"));
            IWebElement shadowRoot4 = expandRootElement(root4);
            IWebElement root5 = shadowRoot4.FindElement(By.CssSelector("settings-clear-browsing-data-dialog"));
            IWebElement shadowRoot5 = expandRootElement(root5);
            IWebElement root6 = shadowRoot5.FindElement(By.CssSelector("#clearBrowsingDataDialog"));
    
            IWebElement root7 = root6.FindElement(By.CssSelector("cr-tabs[role='tablist']"));
            IWebElement shadowRoot7 = expandRootElement(root7);
            IWebElement root8 = shadowRoot7.FindElement(By.CssSelector("div[class='tab selected']"));
            IWebElement root9 = shadowRoot7.FindElement(By.CssSelector("div[class='tab']"));
    
            if (!root8.Text.Equals("Basic")) root9.Click();   // Select Basic tab if not selected
            
            IWebElement rootDropDown = root6.FindElement(By.Id("clearFromBasic"));
            IWebElement shadowDropDown = expandRootElement(rootDropDown);
            IWebElement timeRange = shadowDropDown.FindElement(By.Id("dropdownMenu"));
            var selectElement = new SelectElement(timeRange);
            selectElement.SelectByText("All time");
    
            clickSettingsCheckbox(root6.FindElement(By.Id("browsingCheckboxBasic")));
            clickSettingsCheckbox(root6.FindElement(By.Id("cookiesCheckboxBasic")));
            clickSettingsCheckbox(root6.FindElement(By.Id("cacheCheckboxBasic")));
    
            IWebElement clearDataButton = root6.FindElement(By.CssSelector("#clearBrowsingDataConfirm"));
    
            clearDataButton.Click();
    
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
            wait.Until(wd => wd.Url.StartsWith("chrome://settings"));
            Thread.Sleep(300);
    
            return;
        }
    

    【讨论】:

      【解决方案2】:

      那个按钮真的很难够到,因为聚合物。 试试这个,它对我有用。

      using System;
      using OpenQA.Selenium;
      using OpenQA.Selenium.Chrome;
      
      namespace Selenium_test
      {
          class Program
          {
              static IWebDriver driver;
      
              static void Main(string[] args)
              {
                  driver = new ChromeDriver();
                  driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                  driver.Navigate().GoToUrl("chrome://settings/clearBrowserData");
      
                  IWebElement root1 = driver.FindElement(By.CssSelector("settings-ui"));
                  IWebElement shadowRoot1 = expandRootElement(root1);
                  IWebElement root2 = shadowRoot1.FindElement(By.CssSelector("settings-main"));
                  IWebElement shadowRoot2 = expandRootElement(root2);
                  IWebElement root3 = shadowRoot2.FindElement(By.CssSelector("settings-basic-page"));
                  IWebElement shadowRoot3 = expandRootElement(root3);
                  IWebElement root4 = shadowRoot3.FindElement(By.CssSelector("settings-section > settings-privacy-page"));
                  IWebElement shadowRoot4 = expandRootElement(root4);
                  IWebElement root5 = shadowRoot4.FindElement(By.CssSelector("settings-clear-browsing-data-dialog"));
                  IWebElement shadowRoot5 = expandRootElement(root5);
                  IWebElement root6 = shadowRoot5.FindElement(By.CssSelector("#clearBrowsingDataDialog"));
                  IWebElement root7 = root6.FindElement(By.CssSelector("cr-tabs[role='tablist']"));
      
                  root7.Click();
      
                  IWebElement clearDataButton = root6.FindElement(By.CssSelector("#clearBrowsingDataConfirm"));
      
                  clearDataButton.Click();
              }
      
              private static IWebElement expandRootElement(IWebElement element)
              {
                  return (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].shadowRoot", element);
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        由于我是新手,我无法投票支持@Lanki 的回答。 它就像一个魅力。

        这是同一脚本的 JAVA 版本:

        WebElement root1 = driver.findElement(By.cssSelector("settings-ui"));
        WebElement shadowRoot1 = expandRootElement(root1);
        WebElement root2 = shadowRoot1.findElement(By.cssSelector("settings-main"));
        WebElement shadowRoot2 = expandRootElement(root2);
        WebElement root3 = shadowRoot2.findElement(By.cssSelector("settings-basic-page"));
        WebElement shadowRoot3 = expandRootElement(root3);
        WebElement root4 = shadowRoot3.findElement(By.cssSelector("settings-section > settings-privacy-page"));
        WebElement shadowRoot4 = expandRootElement(root4);
        WebElement root5 = shadowRoot4.findElement(By.cssSelector("settings-clear-browsing-data-dialog"));
        WebElement shadowRoot5 = expandRootElement(root5);
        WebElement root6 = shadowRoot5.findElement(By.cssSelector("#clearBrowsingDataDialog"));
        WebElement root7 = root6.findElement(By.cssSelector("cr-tabs[role='tablist']"));
        
        root7.click();
        
        WebElement clearDataButton = root6.findElement(By.cssSelector("#clearBrowsingDataConfirm"));
        
        clearDataButton.click();
        

        【讨论】:

          猜你喜欢
          • 2011-10-23
          • 2017-07-20
          • 2018-05-24
          • 1970-01-01
          • 2019-11-07
          • 2012-03-22
          • 2016-02-18
          相关资源
          最近更新 更多