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

运行C#自动化测试抛出System.NullReferenceException空引用异常求助

问题根因定位

你遇到的NullReferenceException不是因为CNLoginPage实例为空,堆栈指向第577行userId.SendKeys("TESTER"),空引用来源于两个可能性,按优先级排查:


1. 类内部驱动字段未正确赋值

你实例化CNLoginPage时传入了ConnectNativeDriver,但如果CNLoginPage的构造函数没有把传入的驱动参数赋值给内部的_driver字段,_driver会保持默认值null,调用_driver.GetElementByCssSelector时就会抛出异常。

修复方案:

补全CNLoginPage的构造函数,同时增加空校验提前暴露问题:

public class CNLoginPage
{
    private readonly IWebDriver _driver;
    // 补全构造逻辑
    public CNLoginPage(IWebDriver driver)
    {
        _driver = driver ?? throw new ArgumentNullException(nameof(driver), "驱动实例不能为null");
    }

    // 其余原有方法不变
    public void PasswordRequired()
    {
        // ...原有逻辑
    }
}

2. 页面元素未找到导致返回值为空

如果_driver已经正确赋值,空引用就来自GetElementByCssSelector("#username")的返回值为null:页面未加载完成、选择器错误、元素在iframe内都会导致找不到元素。

修复方案:

  • 先用浏览器F12开发者工具校验#username选择器是否能匹配到目标输入框
  • 增加显式等待,等元素可交互后再操作,避免页面加载速度慢导致的查找失败:
public void PasswordRequired()
{
    var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
    // 等待用户名元素加载完成
    var userId = wait.Until(d => d.FindElement(By.CssSelector("#username")));
    userId.SendKeys("TESTER");

    var password = wait.Until(d => d.FindElement(By.CssSelector("#password")));
    password.SendKeys(" ");

    var enter = wait.Until(d => d.FindElement(By.CssSelector("#AutomatedTesting-loginButton")));
    enter.Click();
}
  • 如果登录框嵌套在iframe中,需要先调用_driver.SwitchTo().Frame("iframe的id/name")切换上下文后再查找元素。

额外排查点

确认测试类中的ConnectNativeDriver本身已经完成初始化,没有为null:如果驱动初始化逻辑写在[TestInitialize]标记的方法中,需要确认执行顺序正常,测试方法运行前驱动已经实例化完成。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 02:06:03