Playwright工作原理

 执行test时,有哪些关键步骤

  当我们用Playwright编写一段简单的test script,代码如下所示:在test case中第一段代码就是await page.goto(xxxxx)

import { test, expect } from '@playwright/test';test('test', async ({ page }) => {await page.goto('https://www.thoughtworks.com/');await page.getByLabel('Insights').click();await page.getByLabel('Technology', { exact: true }).click();await page.getByLabel('Investors').click();await page.getByRole('button', { name: 'Earnings' }).click();
});

执行上面的代码,查看test-report,实际playwright工具在testcase前BeforeHook和AfterHook.BeforeHook中有三句代码,分别是:launch,newContext,newPage.

以chromium为例子,具体的代码如下所示:

import { chromium } from 'playwright';(async () => {// Launch browserconst browser = await chromium.launch({ headless: false });const context = await browser.newContext();const page = await context.newPage();// test case step
// Close browserawait browser.close();
})();

  执行上面的测试脚本(执行命令:npx playwright test tests/xxx.spec.ts)会看到,成功开启了一个chromium,然后成功关闭了该浏览器。说明上面的命令能调起browser,另外,所有的UI step操作,都是调用page这个对象执行的。chromium 来自playwright包。

   palywright-core中实现launch browser

查看代码会发现,chromium来自playwright-core lib中,查看chromium的代码,可以看到有connect的详细代码。这里connect chromium是使用了DevTools协议。

  这里playwright自己实现了launch 浏览器的具体代码,实际,也有一些三方包可以快速实现launch browser,例如可以通过chrome-launcher来launch浏览器。总结而言,launch browser是一个很典型的任务,可以自己写代码实现,也可以直接使用第三方包实现。

import * as ChromeLauncher from 'chrome-launcher';const chrome = await ChromeLauncher.launch({startingUrl: "https://angularjs.realworld.io/#/login",chromeFlags: ['--headless', '--disable-gpu', '--no-sandbox']});

   playwright-core的主要模块

  实际,playwright-core除了负责launch browser,管理页面外,server目录下还包括recorder,主要负责录制脚本,injected主要是注入脚本到浏览器页面中,这样才能监听页面情况,isomorphic。除了server目录,还有cli目录,主要是实现执行某个命令时,对应调用的具体方法,以保证用户输入命令时,能正确执行相关任务。另外,image_tool主要用于视觉测试部分。

   在启动浏览器中,user编写的是安装playwright语法格式写的locator,action等,当执行这些脚本是,playwright会将这些script进行转换,转换后再发送到浏览器执行。playwright-core中就有各种parser负责对locator进行转换。

 

   在isomorphic目录下,除了各种parser脚本,还有locatoreGenerators脚本,这个主要用户录制时自动生成代码,或者执行playwright codegen命令时,生成代码。locatorGenerators会根据选择不同language,生成不同的代码。具体可查看locatorGenerators.ts文件查看具体内容。

  总结而言,playwright-core是playwright的核心模块,负责浏览器的启动,页面,上下文管理,locator的转换。对于gencode模块,playwright-core还负责代码生成,会根据不同的client language生成不同的code,另外,还负责record模块,因为在浏览器中注入的脚本,所以可以监听浏览器上的行为,从而实现record的功能。

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

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

相关文章

【Windows】配置Flutter开发环境

一、下载 flutter sdk 点此跳至下载官网 下载好flutter sdk,并解压到自定义的位置。 二、配置环境变量 此电脑 --> 右键 选择 属性 --> 点击 高级系统设置 --> 会弹出系统属性的窗口,点击 环境变量 按钮 1.配置加速镜像地址 PUB_HOSTED_…

为啥找对象千万别找大厂男,还好我不是大厂的。。

网上看到一大厂女员工发文说:找对象千万别找大厂男,理由说了一大堆,无非就是大厂男为了逃避带娃,以加班为由宁愿在工位上玩游戏也不愿回家。当然这种观点有的人赞同有的人反对。 网友精彩评论: --------------下面是今…

Python武器库开发-武器库篇之链接提取器(六十)

Python武器库开发-武器库篇之链接提取器(六十) 链接提取器介绍 链接提取器(Link Extractor)是一种用于从网页中提取链接的工具。它可以从网页的源代码中识别出所有的链接,并将这些链接提取出来。链接提取器可以用于各…

Maya 白膜渲染简单教程

零基础渲染小白,没关系,一篇超简单教程带你学会渲染白膜。 先打开Maya,看看面板有没有渲染器,这里以Arnold为主。 要是没有这个,就去找插件管理器, Arnold的是mtoa,在搜索栏搜,然后把…

打造精致UI界面:字体设计的妙招

字体设计是UI设计的关键模块之一。字体设计是否有效可能直接实现或破坏整个UI界面。那么,界面设计的字体设计有哪些规范呢?如何设计细节字体?本文将解释字体设计规范的可读性、可读性和可用性,并介绍UI界面中的字体设计技巧。 如…

02-ES6新语法

1. ES6 Proxy与Reflect 1.1 概述 Proxy 与 Reflect 是 ES6 为了操作对象引入的 API 。 Proxy 可以对目标对象的读取、函数调用等操作进行拦截,然后进行操作处理。它不直接操作对象,而是像代理模式,通过对象的代理对象进行操作,…

功能测试的内容与目的是什么?

在软件开发与测试过程中,功能测试是不可或缺的关键步骤,它主要关注软件产品是否能够按照设计规格和用户需求实现预定的功能。功能测试的内容与目的,简单来讲,就是验证软件的各种特性和功能是否正确、完整且符合预期,确…

docker 中 File Sharing 和Volumes 的区别

在 Docker 中,File Sharing 和 Volumes 都涉及到将文件和目录从主机系统映射到容器中,但它们的用途和实现方式有一些重要的区别: 一、简介 File Sharing 是 Docker Desktop 在 Windows 和 macOS 上的一项功能,允许你将主机文件系…

API-操作元素内容

学习目标: 掌握操作元素内容 学习内容: 操作元素内容元素innerText属性元素innerHTML属性案例 操作元素内容: DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。就是操作对象使用的点语法。如果想要修…

开源的数字孪生平台

欧洲对工业4.0的追求体现在三个方面: 数字孪生、智能制造和万物互联。 资助2440万欧元的开源数字孪生平台 源代码: http://www.gitpp.com/ccdan/dpqq-digital-twins 这套数字孪生是工业4.0整体规划中的中的一项技术,实现了一种称为“数字…

正则表达式常用表示

视频教程:10分钟快速掌握正则表达式 正则表达式在线测试工具(亲测好用):测试工具 正则表达式常用表示 限定符 a*:a出现0次或多次a:a出现1次或多次a?:a出现0次或1次a{6}:a出现6次a…

UE4_材质_雨滴涟漪效果ripple effect_ben教程

学习笔记,不喜勿喷!侵权立删,祝愿生活越来越好! 雨水落下时会产生这些非常漂亮的同心环波纹,我们要做的第一件事是创建一个单个的圆环遮罩动画,我们希望环在开始的时候在中心很小,然后放大&…

论文发表CN期刊《高考》是什么级别的刊物?

论文发表CN期刊《高考》是什么级别的刊物? 《高考》是由吉林省长春出版社主管并主办的省级教育类期刊,期刊以科教兴国战略为服务宗旨,专门反映和探索国内外教育教学和科研实践的最新成果。该期刊致力于为广大教育工作者提供一个高质量的学术…

Docker部署常见应用之SFTP服务器

文章目录 简介Dockers部署单用户多用户用户信息加密使用SSH密钥认证 参考文章 简介 atmoz/sftp 是一个基于 Docker 的 SFTP 服务镜像,它使用 OpenSSH 来提供 SFTP 服务。这个镜像支持创建单个或多个用户的 SFTP 访问,并允许用户通过 SFTP 协议安全地共享…

CAN总线仲裁(四)

​ 多设备同时发送遇到的问题 CAN总线只有一对差分信号线,同一时间只能有一个设备操作总线发送数据,若多个设备同时有发送需求,该如何分配总线资源? 解决问题的思路:制定资源分配规则,依次满足多个设备的…

空气质量预报模式系统WRF-CMAQ

空气污染问题日益受到各级政府以及社会公众的高度重视,从实时的数据监测公布到空气质量数值预报及预报产品的发布,我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…

【vue大作业-端午节主题网站】【预览展示视频和详细文档】

vue大作业-端午节主题网站介绍 端午节,又称为龙舟节,是中国的传统节日之一,每年农历五月初五庆祝。这个节日不仅是纪念古代爱国诗人屈原的日子,也是家人团聚、共享美食的时刻。今天,我们非常高兴地分享一个以端午节为…

高压防触碰预警装置,工期重要还是命重要?

“说了多少遍了,不要在高压线下赶工期”吊车违规施工碰撞到高压线,导致供电线路跳闸停电事故,现场火花四溅及其危险, 高压线路被外力破坏的情况,违规施工、赶工期、视觉盲区导致线路外破等情况,想必大家也…

基于STM32的简易智能家居设计(嘉立创支持)

一、项目功能概述 1、OLED显示温湿度、空气质量,并可以设置报警阈值 2、设置4个继电器开关,分别控制灯、空调、开关、风扇 3、设计一个离线语音识别系统,可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上 4、OLED实时显示&#…

基于B/S版java语言+SpringBoot技术开发的云HIS系统源码 HIS系统住院业务模块常见问题及解决方案

基于B/S版java语言SpringBoot技术开发的云HIS系统源码 HIS系统住院业务模块常见问题及解决方案 随着医疗技术的不断提高,住院治疗已成为许多病人的常规选择。但是,住院治疗不仅需要医护人员的精心照顾,也需要个高效的信息系统来保证整个治疗过…