编辑
2025-12-28
C#
00

目录

🌟 Playwright简介与核心优势
什么是Playwright?
🚀 核心优势解析
⚖️ Playwright vs Selenium:谁更胜一筹?
🔥 性能对比
💡 实际使用场景对比
📊 选择建议
🛠️ 环境搭建:三步完成配置
第一步:安装包
第二步:安装浏览器
第三步:验证安装
🎯 实战案例:百度搜索自动化脚本
完整代码实现
🔧 代码详解与最佳实践
🏃‍♂️ 运行你的第一个脚本
执行步骤
💡 新手常见问题与解决方案
❌ 问题1:浏览器启动失败
❌ 问题2:元素找不到
❌ 问题3:网络超时
🎉 总结与下期预告

你是否还在为Selenium WebDriver的各种兼容性问题而头疼?是否曾因为元素定位不稳定而通宵达旦调试测试脚本?作为一名.NET开发者,我深知这些痛点。今天要介绍的Playwright for .NET,就是为了解决这些传统Web自动化测试中的老大难问题而生的现代化解决方案。

微软开发的这款工具不仅性能更强、更稳定,还天生支持现代Web应用的各种特性。本文将通过实际案例,带你快速上手这个被誉为"Selenium终结者"的自动化测试框架,并创建你的第一个自动化脚本。

🌟 Playwright简介与核心优势

什么是Playwright?

Playwright是由微软开发的现代Web自动化测试框架,专为现代Web应用而设计。它支持Chromium、Firefox和Safari三大浏览器引擎,提供了统一的API来进行Web自动化操作。

🚀 核心优势解析

1. 天生的异步支持

C#
// Playwright天生支持async/await模式 await page.GotoAsync("https://www.baidu.com"); await page.FillAsync("#kw", "Playwright"); await page.ClickAsync("#su");

2. 自动等待机制

  • 智能等待:自动等待元素可见、可点击
  • 网络空闲:等待页面完全加载完成
  • 无需手动Thread.Sleep

3. 多浏览器原生支持

C#
// 一套代码,多浏览器运行 var browsers = new[] { "chromium", "firefox", "webkit" }; foreach (var browserType in browsers) { await using var browser = await playwright[browserType].LaunchAsync(); // 相同的测试逻辑 }

⚖️ Playwright vs Selenium:谁更胜一筹?

🔥 性能对比

特性SeleniumPlaywright
启动速度3-5秒1-2秒
元素定位需手动等待自动等待
浏览器支持需额外驱动内置浏览器
并发能力中等优秀

💡 实际使用场景对比

Selenium传统写法:

C#
// Selenium需要显式等待 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); var element = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions .ElementToBeClickable(By.Id("submit"))); element.Click();

Playwright现代写法:

C#
// Playwright自动处理等待 await page.ClickAsync("#submit"); // 就这么简单!

📊 选择建议

  • 选择Selenium:已有大量历史代码、团队熟悉度高
  • 选择Playwright:新项目、追求性能、需要现代化特性

🛠️ 环境搭建:三步完成配置

第一步:安装包

Bash
# 添加Playwright包 dotnet add package Microsoft.Playwright dotnet add package Microsoft.Playwright.NUnit

第二步:安装浏览器

Bash
# 下载并安装浏览器二进制文件,在对应的debug目录下,我这是.net 8 .\playwright.ps1 install

image.png

⚠️ 重要提醒:首次运行需要下载约200MB的浏览器文件,建议在网络良好时进行。

第三步:验证安装

C#
using Microsoft.Playwright; Console.WriteLine("Playwright安装验证中..."); using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); Console.WriteLine("✅ 安装成功!");

image.png

🎯 实战案例:百度搜索自动化脚本

完整代码实现

C#
using Microsoft.Playwright; namespace AppPlaywright { internal class Program { static async Task Main(string[] args) { System.Console.OutputEncoding = System.Text.Encoding.UTF8; using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(new() { Headless = false, SlowMo = 1000 }); var page = await browser.NewPageAsync(); try { Console.WriteLine("🔍 开始百度搜索自动化演示..."); await page.GotoAsync("https://www.baidu.com"); Console.WriteLine("✅ 成功打开百度首页"); await page.FillAsync("#chat-textarea", "Playwright C# 教程"); Console.WriteLine("✅ 已输入搜索关键词"); await page.WaitForSelectorAsync(".result"); Console.WriteLine("✅ 搜索结果已加载"); var results = await page.QuerySelectorAllAsync(".result h3 a"); Console.WriteLine($"🎉 找到 {results.Count} 个搜索结果"); for (int i = 0; i < Math.Min(5, results.Count); i++) { var title = await results[i].InnerTextAsync(); var href = await results[i].GetAttributeAsync("href"); Console.WriteLine($"{i + 1}. {title}"); Console.WriteLine($" 链接: {href}"); Console.WriteLine(); } await page.ScreenshotAsync(new() { Path = "baidu_search_result.png" }); Console.WriteLine("✅ 截图已保存为 baidu_search_result.png"); } catch (Exception ex) { Console.WriteLine($"❌ 出现错误: {ex.Message}"); } finally { Console.WriteLine("🏁 测试完成,按任意键关闭浏览器..."); Console.ReadKey(); } } } }

image.png

🔧 代码详解与最佳实践

1. 浏览器配置技巧

C#
var launchOptions = new BrowserTypeLaunchOptions { Headless = false, // 开发时建议false,CI/CD时用true SlowMo = 1000, // 调试时放慢速度 Timeout = 30000, // 启动超时时间 };

2. 元素定位策略

C#
// 推荐:使用CSS选择器 await page.ClickAsync("#submit"); // 推荐:使用Playwright内置定位器 await page.Locator("text=搜索").ClickAsync(); // 避免:过于复杂的XPath // await page.ClickAsync("//div[@class='complex']//span[1]");

3. 异常处理模式

C#
try { await page.ClickAsync("#button", new() { Timeout = 5000 }); } catch (TimeoutException) { Console.WriteLine("元素未找到,尝试备用方案"); await page.ClickAsync(".backup-button"); }

🏃‍♂️ 运行你的第一个脚本

执行步骤

  1. 保存代码Program.cs
  2. 运行命令dotnet run
  3. 观察结果:浏览器自动打开并执行搜索
  4. 检查输出:控制台显示操作日志和结果

💡 新手常见问题与解决方案

❌ 问题1:浏览器启动失败

解决方案

Bash
# 重新安装浏览器 .\playwright.ps1 install

❌ 问题2:元素找不到

解决方案:这个用过jquery应该都还好。

C#
// 使用显式等待 await page.WaitForSelectorAsync("#element", new() { State = WaitForSelectorState.Visible, Timeout = 10000 });

❌ 问题3:网络超时

解决方案

C#
// 设置全局超时 var context = await browser.NewContextAsync(new() { ViewportSize = new() { Width = 1920, Height = 1080 }, ExtraHTTPHeaders = new Dictionary<string, string> { ["Accept-Language"] = "zh-CN,zh;q=0.9" } });

🎉 总结与下期预告

通过本文的学习,你已经掌握了Playwright for .NET的基础使用方法。让我们回顾三个核心要点:

  1. 现代化设计:Playwright天生支持异步、自动等待、多浏览器
  2. 简单易用:相比Selenium,代码更简洁,配置更方便
  3. 实战导向:从环境搭建到完整案例,快速上手无障碍

下期文章我们将深入探讨**《核心概念解析:Browser、Page、Element三剑客》**,学习如何进行复杂的页面操作和多标签页管理。


💬 互动时间

  • 你在Web自动化测试中遇到过哪些痛点?
  • 准备用Playwright来解决什么实际问题?

欢迎在评论区分享你的想法和经验!如果觉得这篇文章对你有帮助,请转发给更多需要的.NET同行们!

🔥 金句总结

  • "Playwright = 现代Web自动化的正确打开方式"
  • "告别显式等待,拥抱智能自动化"
  • "一套代码,三大浏览器,这就是效率"

关注我,获取更多C#实战干货!下篇文章见! 👋

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!