You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium Java测试中断网未触发预期弹窗问题排查

问题分析

你遇到的核心问题是:Selenium旧版的setNetworkConditions API仅模拟了网络请求的离线状态,但没有触发浏览器原生的offline事件——而你的页面弹窗逻辑,正是通过监听浏览器的在线状态变化事件(navigator.onLine的change事件)来触发的。手动断网时系统会自动触发这些事件,所以弹窗正常;但代码设置离线后,事件没触发,页面也就没感知到状态变化,只有刷新时才会检测到离线。

修复方案

改用Selenium 4+支持的Chrome DevTools Protocol(CDP)来设置离线状态,CDP的Network.enable和Network.emulateNetworkConditions不仅能模拟离线,还会正确触发浏览器的在线状态变化事件,让页面的弹窗逻辑正常触发。

修改后的代码示例:

import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v118.network.Network;
import java.util.Optional;

public void testOfflinePopup() {
    // 初始化ChromeDriver
    ChromeDriver driver = new ChromeDriver();
    driver.get("你的目标URL");

    // 执行登录操作
    driver.findElement(By.id("login-username")).sendKeys("username");
    driver.findElement(By.id("login-password")).sendKeys("password");
    driver.findElement(By.id("signin-button")).click();

    // 初始化DevTools并启用Network模块
    DevTools devTools = driver.getDevTools();
    devTools.createSession();
    devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

    // 模拟离线状态,同时触发事件
    devTools.send(Network.emulateNetworkConditions(
            true,  // offline:是否离线
            5,     // latency:延迟(毫秒)
            500,   // downloadThroughput:下载吞吐量(kbps)
            1024,  // uploadThroughput:上传吞吐量(kbps)
            Optional.empty(),
            Optional.empty()
    ));

    // 此时页面应该会触发离线弹窗,可后续添加断言验证弹窗存在
}
额外说明
  • 确保你的Selenium版本是4.x以上,旧版本不支持CDP的直接调用
  • 如果仍使用旧版Selenium,也可以通过执行JavaScript手动触发offline事件,在原代码设置完setNetworkConditions后添加:
    ((JavascriptExecutor) driver).executeScript(
        "window.dispatchEvent(new Event('offline'));"
    );
    
    这种方式可以补触发事件,但不如CDP的方式原生可靠。

内容的提问来源于stack exchange,提问作者TesterABC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:57:14