在 Selenium Chrome 驱动程序中禁用缓存

zab*_*ski 14 java selenium google-chrome google-chrome-devtools selenium4

我正在使用 Selenium ChromeDriver 来测量网页的性能。但是默认情况下在 Chrome 驱动程序缓存中是启用的。

选项--disable-application-cache现已弃用https://code.google.com/p/chromium/issues/detail?id=447206

我也可以每次都初始化一个新的驱动程序实例,但不是很方便。

我的问题有没有办法正确禁用缓存?

谢谢!

Rah*_*l L 5

在 Chrome 开发工具的网络选项卡中,我们可以通过单击“禁用缓存”复选框来禁用缓存。参考

可以使用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.
Run Code Online (Sandbox Code Playgroud)

示例来自 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());

  }
Run Code Online (Sandbox Code Playgroud)

getFromDiskCache() -- 指定请求是否来自磁盘缓存。

对于上面的代码,它将是 false

您可以参考selenium 存储库以获取所有示例测试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>
Run Code Online (Sandbox Code Playgroud)


小智 -3

我面临着类似的问题,driver.manage().deleteAllCookies();在导航到需要检查性能的页面之前使用过。这样,每次加载页面时,我们都会获得一个新的浏览器实例。这适用于 Firefox 和 Chrome 驱动程序,没有任何问题。

希望能帮助到你。