22

I am working on Selenium WebDriver automation in java programming language. In my test suite that initiates the browser window once and perform all the tests. I want to clear the browser cache before running some tests without restarting the browser. Is there any command/function, that can achieve the purpose? Thanks.

9 Answers 9

17

This is what I use in 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)

You can try converting these into Java. Hope this will help! :)

Sign up to request clarification or add additional context in comments.

Comments

8

At least in Chrome, I strongly believe that if you go incognito you wont to have to clean up your cookies. You can set your options like following (the :

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

and call like this:

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

1 Comment

Not convinced its usefull for an end-to-end test, because at this point, you are no longer using the same environment as a customer would.
6

For IE

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

For Chrome:

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

To delete cookies:

driver.manage().deleteAllCookies();

1 Comment

DesiredCapabilities has been deprecated
5

The following code is based on @An Khang 's answers. and it is working properly on Chrome 78.

ChromeDriver chromeDriver = new ChromeDriver();

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

    return chromeDriver;

3 Comments

This selector no longer returns any elements in 81.0.4
This solution worked for me, I am using chrome 86 , Thanks
This doesn't work in Chrome 87, the enter key doesn't trigger clearing the cache.
3
    WebDriver driver = new ChromeDriver();
    driver.manage().deleteAllCookies();
    driver.get("chrome://settings/clearBrowserData");
    driver.findElement(By.xpath("//settings-ui")).sendKeys(Keys.ENTER);

Comments

2
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def get_webdriver(width: int = 1600, height: int = 1200):
try:
    global browser
    if browser is not None:
        return browser
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--width=' + str(width))
    options.add_argument('--height=' + str(height))
    options.add_argument("--disable-cache")

    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.cache.disk.enable", False)
    profile.set_preference("browser.cache.memory.enable", False)
    profile.set_preference("browser.cache.offline.enable", False)
    profile.set_preference("network.http.use-cache", False)
    options.profile = profile

    browser = webdriver.Firefox(options=options)
    window_size = browser.execute_script("""
    return [window.outerWidth - window.innerWidth + arguments[0],
      window.outerHeight - window.innerHeight + arguments[1]];
    """, width, height)
    browser.set_window_size(*window_size)
    return browser
except Exception as err:
    logging.error(f"Can't install GeckoDriverManager. Error: {err}")

and use browser

    browser = get_webdriver(width=width, height=height)
    browser.delete_all_cookies()
    browser.get(url)
    wait = WebDriverWait(browser, 10)  # Maximum wait time in seconds
    wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body')))
    await asyncio.sleep(1)

    png_image = browser.get_screenshot_as_png()

1 Comment

Google Chrome for Testing does not have chrome://settings/clearBrowserData setting, this worked for me; however, it does not clear cache, it turns it off completely.
1

On Google chrome you can use this script:

        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);

Comments

0
import org.openqa.selenium.Keys;

you need to import the Keys in newer version and change the last line to findElement by xpath

WebDriver driver = new ChromeDriver();

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

3 Comments

Isn't this exactly what Ambesh Srivastava answered?
I only wrote it, because in newer versions the import is needed.
Not working for Chrome v96. Other suggestions?
0

what i found working for myself was adding chromium flag:

--disk-cache-size=0

not sure if it clears cache, but any cache related problems disappeared in my case

1 Comment

This does not really answer the question. If you have a different question, you can ask it by clicking Ask Question. To get notified when this question gets new answers, you can follow this question. Once you have enough reputation, you can also add a bounty to draw more attention to this question. - From Review

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.