选项
--disable-application-cache
现在已被弃用 https://code.google.com/p/chromium/issues/detail?id=447206
此外,我可以每次初始化一个新的驱动程序实例,但这并不是非常方便。我的问题是是否有方法正确地禁用缓存?
谢谢!
--disable-application-cache
现在已被弃用 https://code.google.com/p/chromium/issues/detail?id=447206
此外,我可以每次初始化一个新的驱动程序实例,但这并不是非常方便。在Chrome Dev工具中的网络选项卡中,我们可以通过勾选“禁用缓存”复选框来禁用缓存。 参考
使用Selenium 4中Chrome DevTools协议支持,可复制相同的行为。
我们可以使用Chrome DevTools协议中的'Network.setCacheDisabled' 方法来实现。
Toggles ignoring cache for each request. If true, cache will not be used.
parameters
cacheDisabled
boolean
Cache disabled state.
这个例子来自于Selenium DevTools测试
import org.openqa.selenium.devtools.network.Network;
@Test
public void verifyCacheDisabledAndClearCache() {
ChromeDriver driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.of(100000000)));
driver.get("http://www.google.com");
devTools.send(Network.setCacheDisabled(true));
devTools.addListener(Network.responseReceived(), responseReceived -> assertEquals(false, responseReceived.getResponse().getFromDiskCache()));
driver.get("http://www.google.com");
devTools.send(Network.clearBrowserCache());
}
getFromDiskCache() -- 指定请求是否从磁盘缓存中获取。
对于上述代码,将返回false
。
您可以参考Selenium存储库中的所有示例测试devtools/ChromeDevToolsNetworkTest.java
有关Dev Tools Maven依赖项:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-devtools -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-devtools</artifactId>
<version>4.0.0-alpha-6</version>
</dependency>
正如您所提到的,选项--disable-application-cache
现在已经被弃用。
您可以使用--disk-cache-size
并将其设置为zero
。这将强制磁盘缓存使用的最大磁盘空间为零。虽然它可能无法在一些较旧的浏览器上工作,但我已经成功地在火狐浏览器v67.0.1 上测试过了。
有关更多详细信息,请参阅此命令列表:https://peter.sh/experiments/chromium-command-line-switches/
您注意到了。以下讨论中有关于标志--disable-application-cache
的几次讨论:
这两个选项似乎都受到某些其他依赖项的阻止。
禁用缓存
Google Chrome的禁用缓存
选项可以从Google Chrome DevTools中的网络选项卡中访问。
您可以使用以下任一打开 DevTools 的键盘快捷键:
随着selenium4的推出,通过DevTools
接口现在可以支持ChromeDevtoolsProtocol(CDP)。
Network.setCacheDisabled 可用于切换每个请求是否忽略缓存。如果设置为 true
,则不会使用缓存。
Usage:
devTools.send(Network.setCacheDisabled(true));
这里是关于 setCacheDisabled(true)
使用的演示:
环境细节:
代码块:
import java.util.Collections;
import java.util.Optional;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.network.Network;
import org.testng.Assert;
import org.testng.annotations.Test;
public class testngBasic {
@Test
public void foo() {
System.setProperty("webdriver.chrome.driver","C:\\WebDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
ChromeDriver driver = new ChromeDriver(options);
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.of(100000000)));
devTools.send(Network.setCacheDisabled(true));
devTools.addListener(Network.responseReceived(), responseReceived -> Assert.assertEquals(false, responseReceived.getResponse().getFromDiskCache()));
driver.get("https://www.google.com/");
devTools.send(Network.clearBrowserCache());
}
}
responseReceived.getResponse().getFromDiskCache()
为 false
表明缓存已被禁用。driver.manage().deleteAllCookies();
。这样,每次加载页面时我们都会得到浏览器的新实例。
capabilities={'ie.ensureCleanSession': True}
。使用这个方法,你总是确保运行一个干净的浏览器实例。 - Abhinav