• 用啥Selenium?! .NET程序员就用自家的Playwright for .NET


    提到用于Web应用程序自动化测试的工具,大家肯定第一个想到的就是Selenium。可以说,Selenium已经成为以编程方式自动化浏览器的事实标准。但是,Selenium作为老牌工具,也存在一些缺点,比如不支持Shadow DOM ,而这在现代网页程序中非常常见。

    这就给新一代浏览器自动化工具的发展提供了机会。比如下面我们要介绍的Playwright for .NET

    Playwright for .NET

    Playwright 是微软开源的一个基于 Node.js 的工具库,可使用相同的API调用Chromium(Google-Chrome、Microsoft-Edge)、WebKit(Apple-Safari)和Mozilla-Firefox浏览器自动执行任务。

    而Playwright for .NET(https://github.com/microsoft/playwright-dotnet)是Playwright的官方.NET移植,拥有原始库中的所有功能,可以在.NET中使用。

    功能一瞥

    首先,执行下面命令,安装全局工具:

    dotnet tool install --global Microsoft.Playwright.CLI
    

    我们创建一个NUnit测试项目,然后在项目目录下执行下面命令,引用“Microsoft.Playwright” Nuget包:

    1. dotnet add package Microsoft.Playwright
    2. dotnet build
    3. playwright install

    最后一个命令会调用之前安装的全局工具,安装Playwright工作所需的浏览器。

    我们测试执行百度高级搜索的操作,编写测试代码如下:

    1. using Microsoft.Playwright;
    2. using NUnit.Framework;
    3. using System.Threading.Tasks;
    4. namespace TestProject1
    5. {
    6.     public class Tests
    7.     {
    8.         [Test]
    9.         public async Task BaiduSearch()
    10.         {
    11.             using var playwright = await Playwright.CreateAsync();
    12.             await using var browser = await playwright.Chromium.LaunchAsync(new() { Headless = true });
    13.             var page = await browser.NewPageAsync();
    14.             await page.GotoAsync("https://www.baidu.com/");
    15.             await page.WaitForSelectorAsync("#s-usersetting-top");
    16.             // 鼠标悬停在设置按钮,弹出菜单
    17.             await page.HoverAsync("#s-usersetting-top");
    18.             // 点击高级搜索链接,弹出高级搜索窗口
    19.             await page.ClickAsync("a[href='//www.baidu.com/gaoji/advanced.html']");
    20.             // 输入搜索关键字
    21.             await page.TypeAsync("input[name='q1']""\"My IO\"");
    22.             var page1 = await page.RunAndWaitForPopupAsync(async () =>
    23.             {
    24.                 // 点击搜索
    25.                 await page.ClickAsync(".advanced-search-btn");
    26.             });
    27.             //检查文本框内容
    28.             var handle = await page1.WaitForSelectorAsync("#kw");
    29.             var text = await handle.GetAttributeAsync("value");
    30.             Assert.AreEqual("\"My IO\"", text);
    31.         }
    32.     }
    33. }

    通过上面的示例,我们看到Playwright for .NET可以使用多种方式定位元素,还可以执行一些特殊操作,比如鼠标悬停。

    高级功能

    Playwright for .NET还有一个厉害的录制功能,无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。

    执行下面的命令启动录制:

    playwright codege
    

    结论

    有了Playwright for .NET,我们就可以创建支持所有现代Web浏览器的自动化测试了,大家赶快用起来吧!

  • 相关阅读:
    Java 之 IO流
    Day56——视图层,模板层
    HTTP 协议的基本格式和 fiddler 的简单使用
    c语言第一课---------它来了,它来了,带着薪资走来了
    量化交易之日内回转策略:如何利用MACD指标实现盈利?
    Flink kafka 数据汇不指定分区器导致的问题
    PHP 代码 清理 redis 消息问题
    昇思MindSpore时序AI SIG,共同提高序列大数据分析能力
    C# 移除链表元素
    硬核剖析ThreadLocal源码,面试官看了直呼内行
  • 原文地址:https://blog.csdn.net/biyusr/article/details/125575278