web-dev-qa-db-fra.com

Sélénium: effacer chrome cache

Dans mon application, j'ai besoin d'un moyen d'effacer uniquement le cache du navigateur chrome avant de vous déconnecter (sauf les cookies - je ne veux pas supprimer les cookies).

Quelqu'un peut-il me suggérer un moyen de cliquer sur le bouton EFFACER LES DONNÉES en chrome. J'ai écrit le code ci-dessous mais le code ne fonctionne pas.

Configuration :

Version Chrome: version 65.0.3325.181 (version officielle) (64 bits)

Version de sélénium: 3.11.0

//Clear the cache for the ChromeDriver instance.
driver.get("chrome://settings/clearBrowserData");
Thread.sleep(10000);
driver.findElement(By.xpath("//*[@id='clearBrowsingDataConfirm']")).click();

enter image description here

Vous utilisez ici

driver.findElement(By.xpath("//*[@id='clearBrowsingDataConfirm']")).click();

Malheureusement, cela ne fonctionnera pas car la page de paramètres Chrome Chrome utilise Polymer et WebComponents, doit utiliser le sélecteur de requête en utilisant le/deep/combinateur, donc le sélecteur dans ce cas est * /deep/ #clearBrowsingDataConfirm.

Voici une solution à votre problème ... vous pouvez obtenir le même résultat en utilisant l'une des méthodes suivantes ...

import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;
import org.openqa.Selenium.remote.DesiredCapabilities;
import org.testng.annotations.Test;

public class ClearChromeCache {

    WebDriver driver;

    /*This will clear cache*/
    @Test
    public void clearCache() throws InterruptedException {
        System.setProperty("webdriver.chrome.driver","C://WebDrivers/chromedriver.exe");
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("disable-infobars");
        chromeOptions.addArguments("start-maximized");
        driver = new ChromeDriver(chromeOptions);
        driver.get("chrome://settings/clearBrowserData");
        Thread.sleep(5000);
        driver.switchTo().activeElement();
        driver.findElement(By.cssSelector("* /deep/ #clearBrowsingDataConfirm")).click();
        Thread.sleep(5000);
    }

    /*This will launch browser with cache disabled*/
    @Test
    public void launchWithoutCache() throws InterruptedException {
        System.setProperty("webdriver.chrome.driver","C://WebDrivers/chromedriver.exe");
        DesiredCapabilities cap = DesiredCapabilities.chrome();
        cap.setCapability("applicationCacheEnabled", false);
        driver = new ChromeDriver(cap);
    }
}
8
Gaurav Genius

N'oubliez pas les clés d'envoi !!!!

Pour Selenium Basic, le code ci-dessous est fonctionnel.

Function clean_cache()

    Set driver = New ChromeDriver
    Dim keys As New Selenium.keys


                driver.Get "chrome://settings/clearBrowserData"
                Sleep 5000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Tab)
                Sleep 1000
                driver.SendKeys (keys.Enter)
                Sleep 2000
                driver.Quit

End Function
0
Denis Rodrigues

Il existe une autre façon de cliquer sur le bouton Effacer les données en parcourant l'arbre d'ombre. Si vous essayez de localiser le bouton Effacer les données en recherchant simplement l'élément Web par la stratégie de localisation, cela ne fonctionnera pas en raison de Chrome. Vous devez parcourir l'arborescence des ombres. Vous pouvez essayer ci-dessous le code pour cliquer sur "Effacer les données" dans l'onglet à l'avance:

package Selenium.demo.test;

import org.openqa.Selenium.By;
import org.openqa.Selenium.JavascriptExecutor;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.chrome.ChromeDriver;

public class Test {
static WebDriver driver;
public static void main(String[] args) {
 System.setProperty("webdriver.chrome.driver","F:\\Selenium\\chromedriver.exe");
    // Instantiate a ChromeDriver class.       
 driver=new ChromeDriver();  
 driver.get("chrome://settings/clearBrowserData");
 WebElement root1 = driver.findElement(By.cssSelector("settings-ui"));
    // get 1st shadowroot element
    WebElement shadowRoot1 = expandRootElement(root1);

    // get 2nd parent
    WebElement root2 = shadowRoot1.findElement(By.cssSelector("settings-main"));
    // get 2nd shadowroot element
    WebElement shadowRoot2 = expandRootElement(root2);

    // get 3rd parent
    WebElement root3 = shadowRoot2.findElement(By.cssSelector("settings-basic-page"));
    // get 3rd shadowroot element
    WebElement shadowRoot3 = expandRootElement(root3);

    // get 4th parent
    WebElement root4 = shadowRoot3.findElement(By.cssSelector("settings-section > settings-privacy-page"));
    // get 4th shadowroot element
    WebElement shadowRoot4 = expandRootElement(root4);

    // get 5th parent
    WebElement root5 = shadowRoot4.findElement(By.cssSelector("settings-clear-browsing-data-dialog"));
    // get 5th shadowroot element
    WebElement shadowRoot5 = expandRootElement(root5);

    // get 6th parent
    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(); // click that hard to reach button!
    driver.quit();

}
private static WebElement expandRootElement(WebElement element) {
    WebElement ele = (WebElement) ((JavascriptExecutor) driver)
            .executeScript("return arguments[0].shadowRoot", element);
    return ele;
}

}
0
Triveni Bhalerao

Chrome prend en charge les commandes du protocole DevTools comme Network.clearBrowserCache pour lequel Selenium n'a pas encore d'interface. Vous pouvez l'utiliser en développant les commandes Selenium comme ceci:

send_command = ('POST', '/session/$sessionId/chromium/send_command')
driver.command_executor._commands['SEND_COMMAND'] = send_command
driver.execute('SEND_COMMAND', dict(cmd='Network.clearBrowserCache', params={}))

Cet exemple concerne Selenium pour Python, mais il est également possible dans Selenium pour Node/Java.

Voir https://chromedevtools.github.io/devtools-protocol/tot/Network#method-clearBrowserCache

0
Blaise