如何在控制台或ASP.NET Core后台服务中运行Playwright代码(无需NUnit)
问题
我编写了一段Playwright测试代码,但不想通过NUnit测试运行器执行,希望在控制台应用或ASP.NET Core后台服务中运行。请问无需测试运行器的最简Playwright配置方式是什么?
当前我的控制台应用代码如下:
using Microsoft.Playwright; var browserTest = new Microsoft.Playwright.NUnit.BrowserTest(); var context = await browserTest.NewContext(); var page = await context.NewPageAsync(); await page.SetViewportSizeAsync(600,800); await page.GotoAsync("https://www.google.com/");
执行时,await browserTest.NewContext();语句触发了NullReferenceException。
我的环境配置:
- .NET 7
- Chromium浏览器
- 操作系统:Linux(Docker)
解决方案
出错原因是BrowserTest是NUnit测试框架专用基类,依赖测试运行器的初始化逻辑,直接实例化会导致内部成员未初始化,进而抛出空引用异常。要在控制台或后台服务中运行Playwright,直接使用Playwright原生API即可,无需依赖测试框架类。
最简实现步骤
安装Playwright依赖
控制台应用需安装Microsoft.PlaywrightNuGet包,同时执行playwright install命令安装浏览器二进制文件(Docker环境需在构建阶段执行)。使用原生API编写代码
通过Playwright.CreateAsync()初始化实例,再启动浏览器、创建上下文和页面,示例代码如下:
using Microsoft.Playwright; // 初始化Playwright实例 using var playwright = await Playwright.CreateAsync(); // 启动Chromium浏览器,配置Docker适配参数 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true, // Docker环境推荐启用无头模式 Args = new[] { "--no-sandbox", "--disable-dev-shm-usage" } // Linux/Docker必需参数,避免权限和资源问题 }); // 创建带视口配置的浏览器上下文 await using var context = await browser.NewContextAsync(new BrowserNewContextOptions { ViewportSize = new ViewportSize { Width = 600, Height = 800 } }); // 创建页面并执行操作 var page = await context.NewPageAsync(); await page.GotoAsync("https://www.google.com/"); // 可添加后续操作,比如截图、元素交互等 await page.ScreenshotAsync(new PageScreenshotOptions { Path = "google_screenshot.png" });
- Docker环境额外配置
- 构建镜像时需安装Playwright依赖的系统库,在Dockerfile中添加:
RUN apt-get update && apt-get install -y --no-install-recommends \ libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 \ libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 - 在构建阶段执行
playwright install chromium命令安装Chromium浏览器。
- 构建镜像时需安装Playwright依赖的系统库,在Dockerfile中添加:
内容的提问来源于stack exchange,提问作者mu88
相关产品推荐
相关产品推荐

