用啥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包:

dotnet add package Microsoft.Playwright
dotnet build
playwright install

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

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

using Microsoft.Playwright;
using NUnit.Framework;
using System.Threading.Tasks;namespace TestProject1
{public class Tests{[Test]public async Task BaiduSearch(){using var playwright = await Playwright.CreateAsync();await using var browser = await playwright.Chromium.LaunchAsync(new() { Headless = true });var page = await browser.NewPageAsync();await page.GotoAsync("https://www.baidu.com/");await page.WaitForSelectorAsync("#s-usersetting-top");// 鼠标悬停在设置按钮,弹出菜单await page.HoverAsync("#s-usersetting-top");// 点击高级搜索链接,弹出高级搜索窗口await page.ClickAsync("a[href='//www.baidu.com/gaoji/advanced.html']");// 输入搜索关键字await page.TypeAsync("input[name='q1']", "\"My IO\"");var page1 = await page.RunAndWaitForPopupAsync(async () =>{// 点击搜索await page.ClickAsync(".advanced-search-btn");});//检查文本框内容var handle = await page1.WaitForSelectorAsync("#kw");var text = await handle.GetAttributeAsync("value");Assert.AreEqual("\"My IO\"", text);}}
}

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

高级功能

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

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

playwright codege‍

结论

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

欢迎关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一笑 | 一些关于集合的知识

全世界只有3.14 % 的人关注了数据与算法之美(图源网络,侵权删)

Digest

一场倾盆大雨。站立着面对这场大雨吧!让它的钢铁般的光芒刺穿你。你在那想把你冲走的雨水中飘浮,但你还是要坚持,昂首屹立,等待那即将来临的无穷无尽的阳光的照耀。 转载于:https://www.cnblogs.com/bcpl/archive/2005/05/18/1578…

iOS之NSString

做了不少时间的iOS开发了,现在在阅读官方文档,特意整理出来,没任何技术含量,纯粹是笔记形式,希望对自己对大家有些帮助。 首先,要理解NSString需要学习下字符编码(ASCii,Unicode&…

java调用js查询mongo_mongodb操作之使用javaScript实现多表关联查询

一、数据控制mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败。演示一下发生此类错误的错误提示:二、多表关联查询实现/*声明变量bridge,用来记录两个集合所连接的桥梁。相当于sql语句中的Join on语句,on后…

ABP Framework 研习社经验总结(6.28-7.2)

ABP Framework 研习社经验总结(6.28-7.2)研习社初衷在翻译 《实现领域驱动设计》—— 基于 ABP Framework 实现领域驱动设计实用指南 时,因为DDD理论和实践的宽泛性,不同公司、不同行业、不同项目实现程度不同,觉得有必…

2005.5.21

早上: 4:00电话打来,叫我们去。 我们5:30才起床。 我没有意识到婆婆去世了。上午: 送婆婆到火葬场的车排起了长龙。 一路上,放炮仗,撒纸钱,撒纸元宝。到了火葬场&…

一篇万字长文读懂微软PDB、SourceLink——.net core之nuget 包调试

序言在大前年,为了说服框架组采用Nuget包的形式分发框架类库,我费了老鼻子的劲也没有取得成功,其中最致命的一个问题是,nuget包不能获得源码调试级的支持,在分发和包的管理形式上其比其他方案都优秀。最后折中的选择是…

IIC及OLED实验

I2C (Inter-Integrated Circuit): I2C 是一种用于在芯片之间进行短距离数字通信的串行通信协议。它允许多个设备通过两根导线(一根数据线 SDA 和一根时钟线 SCL)进行通信。I2C 常常用于嵌入式系统中连接传感器、存储器、显示屏和其他外设。 数据线和时钟…

放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。

做过很多winform项目,都为winform控件头疼不已。想实现一些漂亮的样子总是很难。我这里列举几个缺点: 1.winform控件大多是 绝对布局 ,你需要给出准确的坐标。那么在实现居中效果就会很难。 2.学习成本,也了解各个控件的结构&…

数学建模必备算法模型,全新升级!

转眼间2019年已经过去了四分之一,近日,2019年数学建模国赛的时间也已经出来啦,确定为9月12日(周四)18时至9月15日(周日)20时。随着各种各样的数模比赛源源不断地开展,时不时有小伙伴…

好长时间没更新了

这段时间一直都在忙着写CoagelEngine,没时间上来更新。花了一个月的时间,现在基本把渲染器的框架写好了。渲染器是用Visitor模式实现的。同时API无关,理论上来说同样可以支持Directx,不过我没用过DX,现在只实作了GLRen…

boostrap 鼠标滚轮滑动图片_16种基于Bootstrap的css3图片hover效果

bootstrap-image-hover是一款基于Bootstrap的css3图片hover效果。这组图片hover效果共16种特效。同时该特效也支持非Bootstrap版本。使用方法在页面中引入bootstrap相关文件和FontAwesome字体图标文件以及effects.min.css文件。HTML结构该css3图片hover效果的每一种效果都有它们…

从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...

一、移除性算法 &#xff08;remove&#xff09; C Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 // TEMPLATE FUNCTION remove_copy template < class _InIt, class _OutIt, cl…

20 种物体破剖面图,真正的让你脑洞大开

全世界只有3.14 % 的人关注了数据与算法之美有很多东西的内部世界十分复杂&#xff0c;单纯的从表面看难以窥其精锐&#xff0c;今天咱们来看那些被劈成两半展示横截面的东西&#xff1a;1.安全气囊2.打火机3.各种枪械消音器4.集装箱船5.路虎车6.曲棍球头盔7.人类心脏8.数码相机…

一个女孩子对老公/男朋友的要求

*有点害羞&#xff0c;但曾在分别的街头&#xff0c;大声说我爱你。 *同我去庙里求签&#xff0c;轻轻捉住我的手一同跪下。 *言而有信。 *从来不迟到--我迟到他不生气。 *拥抱很久、很紧--每次我起身时几乎是需要慢慢推开他。 *睡得比我迟一点&#xff0c;醒来早一点。 …

你的公司内卷化了吗?

大家看上去都很忙&#xff0c;但就是没结果怎么办&#xff1f;忙有结果都是好的&#xff0c;没有结果都是问题。其实可以从三方面来看这个问题&#xff1a;1、没有正确找到方法大家都在教科书学过一只乌鸦喝水的故事。故事告诉人们遇到困难不要放弃&#xff0c;要运用身边可以利…

java.awt.headless_以编程方式设置java.awt.headless = true

小编典典我正在使用一个main()类&#xff0c;该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。将静态加载块移到类的顶部解决了我的问题。这不起作用&#xff1a;public class Foo() {private static final Color COLOR_BACKGROUND Color.WHITE;static { /* too l…

飘逸的python - hack输出流便于调试

当项目有很多文件时&#xff0c;要找出控制台的输出是在哪里print出来的很麻烦&#xff0c;不过这事对于强大的python来说小菜一碟。 先上代码和效果&#xff0c;再说明。 import sys,traceback class mystdout:stdout sys.stdoutdef write(self,_str):if _str ! \n:filepath…

每日一笑 | 3 X 4 = ?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

ASP.NET下MVC设计模式的实现

1 MVC设计模式简介 MVC由Trygve Reenskaug提出&#xff0c;首先被应用在SmallTalk-80环境中&#xff0c;是许多交互和界面系统的构成基础。MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的&#xff0c;它很好的实现了数据层与表示层的分离。MVC作为一种开发模型…