使用Playwright录制登录测试代码后,dotnet test无可用测试问题
解决Playwright测试在.NET7中
dotnet test找不到测试的问题 问题原因
你当前的代码是控制台程序结构(带Main入口方法),但dotnet test是用来运行测试框架(如xUnit/NUnit)标记的测试方法,而非执行控制台程序。测试发现器无法识别普通的Main方法作为测试用例,因此会提示"No test is available"。
解决方案
1. 调整项目为测试项目(以xUnit为例)
如果你的项目是控制台项目,需要修改项目配置:
- 打开
.csproj文件,将<OutputType>Exe</OutputType>改为<OutputType>Library</OutputType> - 添加必要的测试包引用:
<PackageReference Include="Microsoft.Playwright.XUnit" Version="latest" /> <PackageReference Include="xunit" Version="latest" /> <PackageReference Include="xunit.runner.visualstudio" Version="latest" />
2. 重构代码为测试框架格式
将原控制台代码改为xUnit测试类结构,用[Fact]标记测试方法:
using Microsoft.Playwright; using Xunit; public class LoginTests { [Fact] public async Task PerformLoginTest() { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false, }); var context = await browser.NewContextAsync(); var page = await context.NewPageAsync(); // 导航到登录页 await page.GotoAsync("PRIVATE"); // 填充用户名(无需额外Click,Fill会自动聚焦元素) await page.GetByLabel("Username").FillAsync("PRIVATE"); // 填充密码 await page.GetByLabel("Password").FillAsync("PRIVATE"); // 点击登录按钮 await page.GetByRole(AriaRole.Button, new() { Name = "Sign In" }).ClickAsync(); // 可选:添加登录成功的断言,比如验证跳转后的URL或页面元素 // await page.WaitForURLAsync("PRIVATE_POST_LOGIN_URL"); // Assert.True(await page.GetByText("欢迎").IsVisibleAsync()); } }
3. 重新运行测试
在PowerShell中执行dotnet test,此时测试发现器会识别到标记[Fact]的测试方法并执行。
额外说明
- 原代码中的CS8892警告是因为控制台项目自动生成了同步入口方法,和你写的异步
Main冲突,改为测试项目后该警告会自动消失。 - 可以选择NUnit替代xUnit,只需将包和属性改为
Microsoft.Playwright.NUnit和[Test]标记即可。
内容的提问来源于stack exchange,提问作者Disni
相关产品推荐
相关产品推荐

