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

Playwright NUnit测试问题:Page对象未初始化或测试无法运行

解决Playwright NUnit项目测试无法运行/Page空引用问题

问题1:测试资源管理器无匹配测试

按官方文档实现但找不到测试,大概率是以下两个原因:

  • 项目未正确引用NUnit测试框架及适配包:确保已安装NUnit、NUnit3TestAdapter和Microsoft.NET.Test.Sdk NuGet包,这些是NUnit测试被识别的必要条件。
  • 误用了MSTest特性而非NUnit特性:Playwright官方NUnit示例用的是NUnit原生特性,测试类需标记[TestFixture],测试方法标记[Test],而非MSTest的[TestClass]/[TestMethod]。正确结构示例:
using NUnit.Framework;
using Microsoft.Playwright;

namespace YourNamespace
{
    [TestFixture]
    public class ExampleTests
    {
        private IPage _page;
        private IPlaywright _playwright;
        private IBrowser _browser;

        [SetUp]
        public async Task SetUp()
        {
            _playwright = await Playwright.CreateAsync();
            _browser = await _playwright.Chromium.LaunchAsync();
            _page = await _browser.NewPageAsync();
        }

        [Test]
        public async Task TestGoogleSearch()
        {
            await _page.GotoAsync("https://www.google.com");
            // 测试逻辑
        }

        [TearDown]
        public async Task TearDown()
        {
            await _browser.CloseAsync();
            _playwright.Dispose();
        }
    }
}

问题2:添加MSTest特性后出现NullReferenceException

你添加的[TestClass]和[TestMethod]是MSTest框架的特性,而Playwright对NUnit的支持基于NUnit的生命周期和依赖注入机制,MSTest不兼容Playwright默认的Page注入方式,直接替换特性会导致_page等对象未初始化,进而抛出空引用异常。

解决方式:

  • 切换回NUnit特性:移除[TestClass]和[TestMethod],改用NUnit的[TestFixture]和[Test],同时确保项目依赖NUnit相关包而非MSTest。
  • 若坚持用MSTest:需手动初始化Playwright、Browser和Page对象,不能依赖自动注入。示例结构:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Playwright;

namespace YourNamespace
{
    [TestClass]
    public class ExampleMsTests
    {
        private IPage _page;
        private IPlaywright _playwright;
        private IBrowser _browser;

        [TestInitialize]
        public async Task TestInitialize()
        {
            _playwright = await Playwright.CreateAsync();
            _browser = await _playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
            _page = await _browser.NewPageAsync();
        }

        [TestMethod]
        public async Task TestGoogleSearch()
        {
            await _page.GotoAsync("https://www.google.com");
            // 测试逻辑
        }

        [TestCleanup]
        public async Task TestCleanup()
        {
            await _browser.CloseAsync();
            _playwright.Dispose();
        }
    }
}

额外注意事项:

  • 确保安装对应集成包:用NUnit则装Microsoft.Playwright.NUnit,用MSTest则装Microsoft.Playwright.MSTest。
  • 首次运行前执行playwright install命令,安装浏览器驱动,避免启动浏览器失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:54:19