Playwright工作原理

2024-06-19 09:12
文章标签 工作 原理 playwright

本文主要是介绍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的功能。

这篇关于Playwright工作原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074606

相关文章

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit