我正在使用Selenium ChromeDriver来衡量网页的效果。但默认情况下,Chrome驱动程序缓存已启用。
现已弃用选项--disable-application-cache
https://code.google.com/p/chromium/issues/detail?id=447206
此外,我每次都可以初始化一个新的驱动程序,但不是很方便。
我的问题是有没有正确禁用缓存的方法?
谢谢!
答案 0 :(得分:5)
在Chrome开发工具的“网络”标签中,我们可以通过点击“禁用缓存”复选框来禁用缓存。 refer
可以使用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.
示例来自DevTools的Selenium测试
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
对于所有示例测试devtools/ChromeDevToolsNetworkTest.java
,您可以参考硒存储库。用于开发工具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>
答案 1 :(得分:3)
如前所述,选项--disable-application-cache
现在已弃用。
您可以使用--disk-cache-size
并将其设置为zero
。这将强制磁盘缓存使用的最大磁盘空间为零。尽管在某些较旧的浏览器上可能无法运行。我已经成功地为firefox v67.0.1进行了测试
有关更多详细信息,请参考此命令列表:https://peter.sh/experiments/chromium-command-line-switches/
答案 2 :(得分:0)
在导航到需要检查其性能的页面之前,我遇到了类似的问题,使用了driver.manage().deleteAllCookies();
。这样我们每次加载页面时都会得到一个新的浏览器实例。
这适用于Firefox和Chrome驱动程序,没有任何问题。
希望它有所帮助。
答案 3 :(得分:0)
您说的没错。在以下讨论中,对标志 --disable-application-cache
进行了多次讨论:
这两个项目似乎都在某些其他依赖项上被阻止。
Disable cache
可以从google-chrome中的网络标签访问google-chrome-devtools中Disable cache
的选项。
您可以手动使用以下任一Keyboard shortcuts for opening DevTools:
中找到相关的讨论
通过selenium4的可用性,现在可以通过DevTools
界面获得对 ChromeDevtoolsProtocol(CDP)的支持。
Network.setCacheDisabled可用于切换忽略每个请求的缓存。如果为true
,将不使用缓存。
用法:
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
可以确定缓存已禁用