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

如何为Playwright .NET创建可生效的全局测试配置

核心问题说明

你参考Node.js版编写的playwright.config.js仅适用于Playwright Node.js的原生测试运行器,Playwright .NET 不会识别和加载该文件,所以配置无法生效。

方案1:封装测试基类(最灵活,推荐)

将通用配置封装到测试基类中,所有测试类直接继承基类即可复用全局配置,无需重复定义。以下为NUnit框架的实现示例,xUnit/MSTest可对应调整生命周期钩子:

using Microsoft.Playwright;
using NUnit.Framework;

public class BasePlaywrightTest
{
    protected IPlaywright PlaywrightInstance { get; private set; }
    protected IBrowser Browser { get; private set; }
    protected IBrowserContext Context { get; private set; }
    protected IPage Page { get; private set; }

    [OneTimeSetUp]
    public async Task GlobalSetup()
    {
        PlaywrightInstance = await Playwright.CreateAsync();
        // 全局浏览器启动配置
        var browserLaunchOptions = new BrowserTypeLaunchOptions
        {
            Headless = false,
            SlowMo = 50
        };
        Browser = await PlaywrightInstance.Chromium.LaunchAsync(browserLaunchOptions);
    }

    [SetUp]
    public async Task TestSetup()
    {
        // 全局上下文配置
        var contextOptions = new BrowserNewContextOptions
        {
            ViewportSize = new ViewportSize { Width = 1280, Height = 720 },
            IgnoreHTTPSErrors = true
        };
        Context = await Browser.NewContextAsync(contextOptions);
        Page = await Context.NewPageAsync();
    }

    [TearDown]
    public async Task TestTeardown()
    {
        // 全局失败自动截图逻辑
        if (TestContext.CurrentContext.Result.Outcome.Status == NUnit.Framework.Interfaces.TestStatus.Failed)
        {
            var screenshotPath = Path.Combine(@"C:\stuff\screenshots", $"{TestContext.CurrentContext.Test.Name}.png");
            await Page.ScreenshotAsync(new PageScreenshotOptions { Path = screenshotPath });
        }
        await Context.CloseAsync();
    }

    [OneTimeTearDown]
    public async Task GlobalTeardown()
    {
        await Browser.CloseAsync();
        PlaywrightInstance.Dispose();
    }
}

测试类直接继承基类即可使用配置:

using NUnit.Framework;

public class SiteTest : BasePlaywrightTest
{
    [Test]
    public async Task CheckHomePageTitle()
    {
        await Page.GotoAsync("https://example.com");
        Assert.That(await Page.TitleAsync(), Is.EqualTo("Example Domain"));
    }
}

方案2:使用.runsettings文件配置

如果需要不修改代码调整配置,可在项目根目录新建playwright.runsettings文件,示例内容如下:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <Playwright>
    <BrowserName>chromium</BrowserName>
    <Headless>false</Headless>
    <SlowMo>50</SlowMo>
    <ViewportSize>1280x720</ViewportSize>
    <IgnoreHTTPSErrors>true</IgnoreHTTPSErrors>
    <OutputDir>C:\stuff\screenshots</OutputDir>
    <Quiet>false</Quiet>
  </Playwright>
</RunSettings>

运行测试时指定配置文件即可生效:

  • 命令行运行:执行dotnet test --settings playwright.runsettings
  • Visual Studio运行:在测试资源管理器中选择「设置」→「配置运行设置」→「选择解决方案范围的runsettings文件」,选中对应文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:36:08