Hello Playwright:(4)自动化测试

利用 Playwright 提供的 API,我们在浏览器上做的很多事情都可以自动化。例如,搜索数据、填写表单和下载文件等等。

但最适合的工作,就是自动化测试 Web 应用程序。

自动化测试

测试是软件开发中的一项基本任务,至少,你需要运行应用程序以查看它是否按预期工作。

但是要真正测试一个功能是否正常,需要要覆盖尽可能多的场景。例如,填写一个表单,你就必须要验证如下常见的场景:

  • 完全正确的数据

  • 错误的数据类型,比如数字框输入了字母

  • 错误的数据范围,比如年龄输入了1000

  • 必填字段为空

虽然可以用纯手工进行测试。但是有经验的开发人员会基于这些场景编写测试代码,并且可以自动化运行这些测试代码,保证不会遗漏任何场景或必须重复执行相同的测试。

而测试 Web 应用程序需要使用浏览器,这正给了 Playwright 以用武之地。

测试框架

虽然 Playwright for .NET 不依赖于特定的测试运行程序或测试框架就可运行,但是利用测试框架可以帮助我们更好地编写自动化测试。

.NET 下的测试框架有很多。但是官方推荐使用 NUnit 作为测试框架。你也可以尝试使用其他你熟悉的测试框架。

Demo

下面我们将将使用站点 https://www.baidu.com 作为测试用例,测试页面标题是否为“百度一下,你就知道”。

在命令行窗口,使用 dotnet CLI 创建一个 NUnit 测试项目,并添加 Playwright 依赖:

dotnet new nunit -n HelloPlaywright_04
cd HelloPlaywright_04dotnet add package Microsoft.Playwright.NUnit

修改 UnitTest1.cs 代码如下:

using Microsoft.Playwright.NUnit;
using NUnit.Framework;
using System.Threading.Tasks;namespace HelloPlaywright_04
{public class Tests : PageTest{[Test]public async Task Title_IsCorrect(){var result = await Page.TitleAsync();Assert.AreEqual("百度一下,你就知道", result);}}
}

运行测试,失败

67b89189f7f62c2c8be822daadae1489.png

但是这是对的,因为我们还没有初始化环境:

namespace HelloPlaywright_04
{public class Tests : PageTest{[SetUp]public async Task SetUp(){await Page.GotoAsync("https://www.baidu.com");}...}
}

运行测试,成功

39eb88a964cfb0513352fcd3edc9f60a.png

结论

Microsoft.Playwright.NUnit 提供了多个基类用于创建不同级别下的测试:

类名说明
PageTest每个测试都会获得在其自己独有的 BrowserContext 中创建的网页的新副本。扩展此类是编写全功能 Playwright 测试的最简单方法。
ContextTest每个测试都会得到一个 BrowserContext 的新副本。你可以根据需要在此上下文中创建任意数量的页面。使用此测试是测试需要多个选项卡的多页场景的最简单方法。
BrowserTest每个测试都将获得一个浏览器,并且可以创建任意数量的上下文。每个测试负责清理它创建的所有上下文。
PlaywrightTest为每个测试提供了一个 Playwright 对象,以便测试可以启动和停止任意数量的浏览器。

添加微信号【MyIO666】,邀你加入技术交流群

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

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

相关文章

通才和专家:如何选择

原文:Generalists and specialists: thoughts on hiring作者:Nicholas C. Zakas 我的职业生涯经历过各种规模的公司,从非常小的五人创业团队到 13000 人的大公司雅虎,再到约 1000 人规模的 Box(我目前所在)…

Android之解决NestedScrollView嵌套ViewPager导致出现左右页面滑动冲突

1 问题 NestedScrollView里面嵌勒ViewPagerTabLayout,导致在这个页面监听不到左右页面滑动,需要解决这个监听滑动问题。 2 解决办法 val nestedScrollView: NestedScrollView mainView!!.findViewById(R.id.nestedScrollView)nestedScrollView.isFillV…

linux和裸机的区别,操作系统与裸机的区别

我们在学习stm32到一定阶段可能会了解操作系统,然后便有这种问题产生,下面我就来粗略说说“操作系统与裸机的区别,以及stm32能运行什么操作系统,能运行linux系统吗”等问题。操作系统与裸机的区别裸机运行的程序代码,一…

ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法

GIS中经常会出现多部件要素的现象,为了便于检查拓扑等关系,需要将其拆分为单个的部件。例如,在用同一个图层的多个图斑去裁剪(Clip)时,或者将多个不相邻的图斑进行合并(merge)时,可能会产生多部件要素,本文演示ArcGIS10.7版本中常见的两种拆分多部件要素至单部件要素…

spring-session + redis 实现集群 session 共享

2019独角兽企业重金招聘Python工程师标准>>> 目前市面上实现session共享的方案有很多,其中比较常用的是使用Tomcat、Jetty等web服务器提供的session共享功能,以此将session内容统一存放在数据库(如mysql)或者缓存&…

第三方的使用

1. MMDrawerController 抽屉效果 2.SVProgressHUD 透明指示层 3.SDCycleScrollView 无限轮播器 4.SDWebImage 异步图片加载 5.RESideMenu 抽屉效果 6.AFNetworking 网络请求 7.MJRefresh tableView上下拉刷新 8.MJExtension json转模型 9.Masonry 布局适配框架 10.UMengSocia…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。 若…

业务流水号规则生成组件

对于很多业务系统都需要生成业务流水号,如果订单号、购采单号等等;而这些业务流水号并不是简单的一个增长数值,它们很多时候都有一些不同的规则来定义,如不同类型的字母或地区拼音简写等。为了更灵活生成这些有规则的业务流水号Be…

Android之奔溃提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap

1 问题 Android端获取服务端的数据然后我直接把数据转hashMap提示错误如下&#xff0c; com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap 2 解决办法 直接转Map集合即可 (t.data as Map<String, String>).forEach({if (KEEP_NAME.equals…

ArcGIS中国工具(ArcGISCTools)3.2 安装教程(附安装包下载)

ArcGIS中国工具,简称CTools,集成在ArcGIS 10.x系列版本中。本文在ArcGIS10.7的基础之上,演示3.2版本安装过程,并提供下载地址共大家学习和交流。 一、安装过程

函数式编程工具:filter和reduce

# -*- coding: utf-8 -*- #python 27 #xiaodeng #函数式编程工具&#xff1a;filter和reduce#python内置函数中&#xff0c;map函数是用来进行函数式编程这类工具最简单的内置函数代数#函数式编程含义&#xff1a; #一种编程范式&#xff0c;也就是如何编写程序的方法论&#x…

阿里云ECS,搭建MySQL5.7数据库环境

为什么80%的码农都做不了架构师&#xff1f;>>> 配置mysql yum源 [rootiZbp1j6oiamq7t2otpryarZ ~]# cd /data/ [rootiZbp1j6oiamq7t2otpryarZ data]# ll total 0###################################下载mysql源安装包# [rootiZbp1j6oiamq7t2otpryarZ data]# wge…

Python——通过斐波那契数列来理解生成器

一、生成器&#xff08;generator&#xff09; 先来看看一个简单的菲波那切数列&#xff0c;出第一个和第二个外&#xff0c;任意一个数都是由前两个数相加得到的。如&#xff1a;0,1,1,2,3,5,8,13...... 输入斐波那契数列前N个数&#xff1a; def fab(max): n, a, b 0, 0, 1 …

《看聊天记录都学不会Python到游戏实战?太菜了吧》(9)集万家之长不死 python

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼6、free()函数问&#xff1a;下面的程序会在用户输入’freeze’的时候出问题&#xff0c;而’zebra’则不会&#xff0c;为什么?#include int main(int argc, char *argv[]) {char *ptr (char*)malloc(10);if(NULL ptr){printf(…

Android之解决TabLayout里面每个Tab项的间距和修改指示线的长度(非反射)和修改选中字体大小

1 问题 1)由于TabLayout设置了可滑动Tab参数 app:tabMode="scrollable" 导致每个Tab之间的间距很大,但是UI设计图里面的字体之间的间距很小,我们改怎么解决? 2)修改TabLayout指示线的长度(非反射) 3)修改选中的字体大小并且加粗 2 解决办法 问题1解决办法…

【重磅】ArcGIS 10.8手把手经典图文安装教程(附安装包全套装下载,亲测可用)

ArcMap时代的最后一版软件,未来官方对ArcMap的支持将仅限于提供补丁,更新和新环境支持,换句话说ArcMap10.8.X将会是最终版本,以后不会再有ArcMap10.9了,官方建议所有人在完成工作流程后立即迁移到ArcGIS Pro。 时间真快,ArcGIS 10.7刚装完没几天,作为GISer的我,有的开始…

聊聊 C# 中的 Visitor 模式

前言 Visitor模式在日常工作中出场比较少&#xff0c;如果统计大家不熟悉的模式&#xff0c;那么它榜上有名的可能性非常大。使用频率少&#xff0c;再加上很多文章提到Visitor模式都着重于它克服语言单分派的特点上面&#xff0c;而对何时应该使用这个模式及这个模式是怎么一…

AcWing 889. 满足条件的01序列(卡特兰数应用)

满足条件的01序列 假设长度为n个序列要求满足题意1的前缀0的个数不能超过1的个数 将问题抽象为从(0, 0)到(n, n) 向上走一个代表这一步对应序列中的值是1&#xff0c;向右走代表序列中的值是0 要想满足1的前缀0的数量大于1的数量就需要满足所有路过的途径在y x这个函数个下面…

添加ASP.NET网站资源文件夹

ASP.NET应用程序包含7个默认文件夹&#xff0c;分别为Bin、APP_Code、App_GlobalResources、App_LocalResources、App_WebReferences、App_Browsers和“主题”文件夹。每个文件夹都存放ASP.NET应用程序的不同类型的资源。 方法 说明Bin  包含程序所需的所有已编译程序集&#…