【问题标题】:Clear cache before running some Selenium WebDriver tests using Java在使用 Java 运行某些 Selenium WebDriver 测试之前清除缓存
【发布时间】:2016-01-03 10:09:28
【问题描述】:

我正在使用 Java 编程语言进行 Selenium WebDriver 自动化。在我的测试套件中,它会启动一次浏览器窗口并执行所有测试。我想在不重新启动浏览器的情况下运行一些测试之前清除浏览器缓存。有没有可以达到目的的命令/功能?谢谢。

【问题讨论】:

    标签: java selenium-webdriver browser-cache


    【解决方案1】:

    对于 IE

    DesiredCapabilities ieCap =  DesiredCapabilities.internetExplorer();
    ieCap.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
    

    对于 Chrome:

    https://code.google.com/p/chromedriver/issues/detail?id=583

    要删除 cookie:

    driver.manage().deleteAllCookies();
    

    【讨论】:

    • DesiredCapabilities 已被弃用
    【解决方案2】:

    至少在 Chrome 中,我坚信如果您使用隐身模式,您将不必清理 cookie。您可以设置您的选项,如下所示(:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    def _options():
        options = Options()
        options.add_argument('--ignore-certificate-errors')
        #options.add_argument("--test-type")
        options.add_argument("--headless")
        options.add_argument("--incognito")
        options.add_argument('--disable-gpu') if os.name == 'nt' else None # Windows workaround
        options.add_argument("--verbose")
        return options
    

    然后这样调用:

    with webdriver.Chrome(options=options) as driver:
        driver.implicitly_wait(conf["implicitly_wait"])
        driver.get(conf["url"])
    

    【讨论】:

    • 不相信它对端到端测试有用,因为此时,您不再使用与客户相同的环境。
    【解决方案3】:

    这是我在 Python 中使用的:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    driver = webdriver.Chrome()
    driver.get('chrome://settings/clearBrowserData')
    driver.find_element_by_xpath('//settings-ui').send_keys(Keys.ENTER)
    

    您可以尝试将它们转换为 Java。希望这会有所帮助! :)

    【讨论】:

      【解决方案4】:

      以下代码基于@An Khang 的答案。它在 Chrome 78 上正常运行。

      ChromeDriver chromeDriver = new ChromeDriver();
      
          chromeDriver.manage().deleteAllCookies();
          chromeDriver.get("chrome://settings/clearBrowserData");
          chromeDriver.findElementByXPath("//settings-ui").sendKeys(Keys.ENTER);
      
          return chromeDriver;
      

      【讨论】:

      • 此选择器不再返回 81.0.4 中的任何元素
      • 这个解决方案对我有用,我正在使用 chrome 86,谢谢
      • 这在 Chrome 87 中不起作用,回车键不会触发清除缓存。
      【解决方案5】:
          WebDriver driver = new ChromeDriver();
          driver.manage().deleteAllCookies();
          driver.get("chrome://settings/clearBrowserData");
          driver.findElement(By.xpath("//settings-ui")).sendKeys(Keys.ENTER);
      

      【讨论】:

        【解决方案6】:
        import org.openqa.selenium.Keys;
        

        您需要在较新版本中导入 Keys 并将最后一行更改为 findElement by xpath

        WebDriver driver = new ChromeDriver();
        
        driver.manage().deleteAllCookies();
        driver.get("chrome://settings/clearBrowserData");
        driver.findElement(By.xpath("//settings-ui")).sendKeys(Keys.ENTER);
        

        【讨论】:

        • 这不正是 Ambesh Srivastava 回答的吗?
        • 我只写了它,因为在较新的版本中需要导入。
        • 不适用于 Chrome v96。其他建议?
        【解决方案7】:

        在谷歌浏览器上你可以使用这个脚本:

                driver.get("chrome://settings/clearBrowserData");       
                JavascriptExecutor jse = (JavascriptExecutor)driver;
                WebElement clearData =  (WebElement) jse.executeScript("return document.querySelector(\"body > settings-ui\").shadowRoot.querySelector(\"#main\").shadowRoot.querySelector(\"settings-basic-page\").shadowRoot.querySelector(\"#basicPage > settings-section:nth-child(8) > settings-privacy-page\").shadowRoot.querySelector(\"settings-clear-browsing-data-dialog\").shadowRoot.querySelector(\"#clearBrowsingDataConfirm\")");
                ((JavascriptExecutor)driver).executeScript("arguments[0].click();", clearData);

        【讨论】:

          猜你喜欢
          • 2013-02-20
          • 1970-01-01
          • 2021-12-01
          • 2020-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-25
          • 2014-10-07
          相关资源
          最近更新 更多