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 browser
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();
 // test case step
// Close browser
  await 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.mfbz.cn/a/721645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新闻稿发布中被拒稿的原因分析

企业的公关经理在落地新闻宣传时一定碰到过新闻媒体拒稿的情况,小马识途在此总结了常见的拒稿原因,供广大企业参考。 1、新闻稿内容涉及违法违规信息 企业在发稿的时候内容一定要确认好,不要涉及违法、违规类信息,如果新闻内容里…

序列到序列模型中的注意力机制

目录 一、说明 二、编码器解码器架构中的问题:需要注意 2.1 编码器方面的问题: 2.2 解码器方面的问题: 三、什么是注意力机制? 3.1 计算 ci 值: 3.2 ci 的广义表示: 四、Bahdanau 注意 : 4.1. 兼…

报表开发工具DevExpress Reporting v23.2 - 增强PDF导出、多平台打印等

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v23.2…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题,我就在想,是否能一个创建“透明的”的工作场所?让员工和管理者能够实时查询生产进度,及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

LeRobot——Hugging Face打造的机器人领域的Transformer架构

前言 如友人邓博士所说,“用 Stanford aloha 课题组提供的训练数据,训练他们研发的 Action Chunking Transformer 动作规划模型,训练结果,能用,但是稳定性有待提高 要提高稳定性,看来必须修改 Stanford a…

C++初学者指南第一步---6.枚举和枚举类

C初学者指南第一步—6.枚举和枚举类 文章目录 C初学者指南第一步---6.枚举和枚举类1.作用域的枚举(enum class类型)(C11)2.无作用域的枚举(enum类型)3.枚举类的基础类型4.自定义枚举类映射5.和基础类型的互相转换 1.作用域的枚举(enum class类…

深度学习(九)——神经网络:最大池化的作用

一、 torch.nn中Pool layers的介绍 官网链接: https://pytorch.org/docs/stable/nn.html#pooling-layers 1. nn.MaxPool2d介绍 nn.MaxPool2d是在进行图像处理时,Pool layers最常用的函数 官方文档:MaxPool2d — PyTorch 2.0 documentation &…

耗时两天半的java之sql注入代码审计

java之sql注入代码审计 前言 其实找到漏洞原因很简单,主要想学习一下JDBCsql的过程 JDBC 简单介绍 Java通过java.sql.DriverManager来管理所有数据库的驱动注册,所以如果想要建立数据库连接需要先在java.sql.DriverManager中注册对应的驱动类&#x…

2Y0A21 GP2Y0A21YK0F 红外测距传感器 arduino使用教程

三根线 正极负极信号线 确认自己的三根线分别代表什么,我们的颜色可能不一样 附一张我买的传感器他们的说明图 正极 接 开发板5V 负极 接开发板GND 信号线 接A0 代码arduino ide上面写 // Infračerven senzor vzdlenosti Sharp 2Y0A21// připojen potře…

新火种AI|Sora发布半年之后,AI视频生成领域风云再起

作者:一号 编辑:美美 AI视频最近有些疯狂,Sora可能要着急了。 自OpenAI的Sora发布以来,AI视频生成技术便成为了科技界的热门话题。尽管Sora以其卓越的性能赢得了广泛关注,但其迟迟未能面向公众开放,让人…

Study--Oracle-03-数据库常规操作

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、oracle 版本及主要功能 二、数据安装完成后常用操作SQL 1、检查数据库监听状态 监听的常用命令 启动:[oracleoracle u01]$ lsnrctl stop 停止&am…

买家用洗地机需要注意什么?全面评测热门洗地机品牌

对于忙碌的打工族来说,“做家务”是一件非常消费时间精力的事情,但它又是生活中的一部分,为了解决这些矛盾点,越来越多的清洁家电涌向市场,像集扫地、吸尘、洗地为一体的洗地机,在推拉之间便把脏污处理干净…

网络编程4----网络原理(面试及期末必备)

1 应用层 应用层是与程序员关系最密切的一层,在应用层这里了,很多时候,都是使用程序员自定义的协议,当然,也有很多现成的协议供我们使用。 “自定义协议”: 自定义一个协议,也就是自己做一个…

Idea连接GitLab的过程以及创建在gitlab中创建用户和群组

上期讲述了如何部署GitLab以及修复bug,这期我们讲述,如何连接idea。 首先安装gitlab插件 下载安装idea上并重启 配置ssh免密登录 使用管理员打开命令行输入:ssh-keygen -t rsa -C xxxaaa.com 到用户目录下.ssh查看id_rsa.pub文件 打开复制…

新兴互联网银行搭档Apache SeaTunnel构建数据流通管道!

当新兴互联网银行乘着数字化改革的风潮搭档数据集成平台Apache SeaTunnel,成千万上亿的数据就有了快速流通的管道。6月26日14:00,Apache SeaTunnel社区将带上企业最佳实践与观众见面,与大家面对面交流最新的企业实践部署经验。锁定SeaTunnel视…

OpenCV中的圆形标靶检测——findCirclesGrid()(二)

本章我们开始讲解基于层次聚类的标靶检测算法。当我们调用如下API,且flags中包含cv::CALIB_CB_CLUSTERING标志位时,将会执行基于层次聚类的斑点检测算法。算法支持对称标靶和非对称标靶两类,相应的需要将下述flags设为包含CALIB_CB_SYMMETRIC_GRID或CALIB_CB_ASYMMETRIC_GRI…

设计模式(五)创建者模式之工厂模式

工厂模式 工厂模式上面类图代码实现Coffee 抽象类AmericanCoffeeLatterCoffeeCoffeeStoreUser 简单工厂模式增加工厂方法更改CoffeeStore 类优缺点扩展静态工厂 工厂方法模式概念结构具体类图代码实现Coffee类AmericanCoffeeLatterCoffee抽象工厂CoffeeFactoryAmericanCoffeeFa…

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo

文章目录 1. 初识1.1 到手开箱1.2 OrangePi Kunpeng Pro1.2 上电 2. 安装Ubuntu2.1 准备工作2.2 安装 3. 安装ROS23.1 设置支持UTF-8的locale编码3.2 添加证书3.3 安装ROS3.4 设置环境变量3.5 小海龟来啦 4. 运行实例4.1 安装Gazebo4.2 安装turtlebot 总结 1. 初识 1.1 到手开…

通勤必备!重回儿时回忆,完全免费!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利三个网站,可以完全免费在线玩的小霸王游戏机,重回童年游戏时刻! 最后一款还可以网页在线和朋友联机CS、吃鸡、暗黑破坏神、拳皇、恐龙…

LVS负载均衡集群企业级应用实战-LVS-DR(四)

目录 LVS-DR 一. 环境准备 二. 对虚拟主机操作 三. 对真实服务器操作 四. 打开网页测试 LVS-DR 一. 环境准备 三台虚拟机,都要在同一网段内,统一关闭防火墙和selinux,时间同步,配置好YUM源。系统用centos和roucky都行。 主…