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

使用Java+Selenium执行测试用例时触发NullPointerException问题排查

排查Selenium+Java中的NullPointerException问题

先给你拆解下导致这个空指针的核心原因,以及对应的修复方案:

首先,你的代码有个明显的定位器错误

第35行的By.tagName("div#main-content")用法完全不对:

  • By.tagName()只能传入纯标签名称,比如"div",不能把CSS选择器(带#main-content)塞进去
  • 要定位ID为main-content的div,正确写法是By.cssSelector("div#main-content")或者直接By.id("main-content")

不过这个错误本身只会导致找不到元素(抛出NoSuchElementException),你现在遇到的空指针,说明还有更前置的问题。

核心原因:shadow_root3 是 null

空指针异常说明shadow_root3的值为null,也就是你通过expand_shadow_element(root3)获取不到对应的Shadow Root。为什么会出现这种情况?

可能的诱因及修复:

  1. 页面Shadow Root渲染延迟
    你加了隐式等待,但隐式等待只对查找普通DOM元素生效,不会等待Shadow Root的动态生成。可以修改你的expand_shadow_element方法,加入显式等待逻辑,确保Shadow Root出现后再返回:

    import org.openqa.selenium.support.ui.WebDriverWait;
    import org.openqa.selenium.support.ui.ExpectedCondition;
    
    public static WebElement expand_shadow_element(WebElement element) {
        WebDriverWait wait = new WebDriverWait(driver, 10); // 等待最多10秒
        return wait.until(new ExpectedCondition<WebElement>() {
            @Override
            public WebElement apply(WebDriver driver) {
                return (WebElement)((JavascriptExecutor)driver).executeScript("return arguments[0].shadowRoot", element);
            }
        });
    }
    
  2. 定位的root3不是正确的元素
    虽然前面的代码没报错,但可能你拿到的root3并不是包含Shadow Root的目标元素。可以在获取shadow_root3之前,打印下root3的信息验证:

    WebElement root3 = shadow_root2.findElement(By.name("appContent"));
    // 打印元素标签名和HTML,确认是否是预期元素
    System.out.println("root3标签名:" + root3.getTagName());
    System.out.println("root3完整HTML:" + root3.getAttribute("outerHTML"));
    
  3. 浏览器缓存或环境差异
    既然别人运行没问题,可能你的浏览器缓存导致页面结构异常。可以试试:

    • 手动清除浏览器缓存后再运行测试
    • 启动ChromeDriver时开启无痕模式,避免缓存干扰:
      import org.openqa.selenium.chrome.ChromeOptions;
      
      // 在初始化driver前添加这段
      ChromeOptions options = new ChromeOptions();
      options.addArguments("--incognito");
      driver = new ChromeDriver(options);
      

另外,建议你打开浏览器开发者工具,手动检查页面中root3元素是否真的存在Shadow Root——有时候页面动态渲染会导致元素结构和预期不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:47:33