Playwright快速上手-1

 

前言

    随着近年来对UI自动化测试的要求越来越高,,功能强大的测试框架也不断的涌现。本系列主讲的Playwright作为一款新兴的端到端测试框架,凭借其独特优势,正在逐渐成为测试工程师的热门选择。

本系列文章将着重通过示例讲解

  1. Playwright + python开发环境的搭建    

  2. 定位方式(重点)

  3. Playwright 的重要API(重点)

  4. Playwright 的 其他重要特性

  5. Playwright + Python 自动化框架的搭建 (重点)

希望搭建能通过本系列文章的学习,能通过 Playwright +Python 搭建实用的框架解决工作中的实际问题。

1. Playwright 简介

1.1 Playwright 是什么

     Playwright 是一个用于浏览器自动化和跨浏览器测试的开源工具,由 Microsoft Edge 团队开发。它允许开发者编写代码来模拟用户在不同浏览器中的交互,执行页面操作,处理网络请求,截取屏幕截图,生成 PDF 等,从而有效地进行自动化测试和性能测试。

1.2 为什么要学Playwright

  1. 由于Selenium在3.x和4.x两个版本的迭代中并没有发生多大的变化,因此Selenium一统天下的地位可能因新框架的出现而变得不那么稳固。

  2. 后续的Cypress、TestCafe、Puppeteer被誉为后Selenium时代Web UI自动化的三驾马车。但是由于这三个框架都是基于JavaScript开发的,且都不支持Python,所以使用率并没有很高。

  3. Playwright 则是综合了上述框架的优点,提供了很好的体验,将来可能成为流行的趋势。

1.3 playwright 的特点(优势)

  1. 多浏览器支持:Playwright 支持 Chromium(包括 Chrome 和 Edge)、Firefox 和 WebKit(Safari),这使得您可以在不同浏览器中进行测试,确保您的应用在各个浏览器上都能正常工作。

  2. 速度与稳定性:Playwright被设计为高性能工具,它在执行页面操作和网络请求时非常快速。同时,它还具备稳定性,可以处理各种异步操作和复杂场景。

  3. 功能丰富:Playwright 提供了丰富的 API,可以模拟用户的各种交互,如点击、填写表单、键盘输入等。此外,它还支持录制和回放操作,方便非开发人员使用。

  4. 并行测试:Playwright 允许在多个浏览器实例中并行运行测试,从而加快测试速度。

  5. 跨平台:Playwright 可以在 Windows、macOS 和 Linux 等多个平台上运行。

    ps: 上内容均来自官方文档,想要了解更多关于Playwright 的知识,请参考其官方文档

2.搭建python + Playwright开发环境

2.1

  1. 安装python (版本必须 不小于Python3.7)

  2. 安装Playwright 

    pip install playwright
  3. 安装内置浏览器

    python -m playwright install
  4. 验证是否安装成功, 只要显示对应的版本号,即为安装成功

    playwright -V---Version 1.35.0

2,2 . 入门实战-脚本录制

Playwright 自带的 Playwright Inspector工具 可以像 selenium 和 QTP 一样,录制页面动作,产生脚本,并且能帮您快捷的定位页面元素。

在终端(或命令行窗口)输入一下命令

playwright codegen

系统会打开一个浏览器,另外会打开一个 Playwright Inspector,如下图所示 

图片

在浏览器中的所有操作,都会在在 Playwright Inspector 实时的产生代码,现在就以打开百度,并进行搜索为例,看下Playwright Inspector 所产生的代码。

在浏览器中输入百度网址, 并在搜索栏中输入 米兰, 再在Playwright Inspector 停止录制(默认开启的) 

图片

来看下产生的代码

rom playwright.sync_api import Playwright, sync_playwright, expectdef run(playwright: Playwright) -> None:    browser = playwright.chromium.launch(headless=False)    context = browser.new_context()    page = context.new_page()    page.goto(百度网址)    page.locator("#kw").fill("米兰")    page.get_by_role("button", name="百度一下").click()
    # ---------------------    context.close()    browser.close()with sync_playwright() as playwright:    run(playwright)

代码分析

with sync_playwright() as playwright

这一行代码表示用同步的方式生成一个playwright对象, 用 with ... as ... 方式参考处理文件的方式, 可以省略 playwright.stop(),上面的代码 等同于

from playwright.sync_api import sync_playwright
playwright = sync_playwright().start() 
...
...
playwright.stop()

run 函数中的代码就比较明了了

# 启动浏览器
browser = playwright.chromium.launch(headless=False)
# 打开一个新的页面
context = browser.new_context()
page = context.new_page()
# 跳转至 百度
page.goto("百度网址")
# 在搜索框 输入 米兰
page.locator("#kw").fill("米兰")# 点击 百度一下
page.get_by_role("button", name="百度一下").click()

可以看到,Playwright 的定位方式和 selenium 还是有很大的不同的,下一节就将开始介绍其丰富的定位方式!敬请期待!

作者微信,说明来意,不闲聊,不白嫖。

图片

 

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

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

相关文章

Linux Day07

一、僵死进程 1.1僵死进程产生的原因 子进程先于父进程结束, 而父进程没有获取子进程退出码,释放子进程占用的资源,此时子进程将成为一个僵死进程。 在第一个框这里时父进程子进程都没有结束,显示其pid 父进程是2349,子进程是235…

【Nginx】Nginx网站服务

国外主流还是使用apache;国内现在主流是nginx(并发能力强,相对稳定) nginx:高性能、轻量级的web服务软件 特点: 1.稳定性高(没apache稳); 2.系统资源消耗比较低&#xf…

Failed to set locale, defaulting to C.UTF-8 或者中文系统语言转英文系统语言

CentOS 8中执行命令,出现报错:Failed to set locale, defaulting to C.UTF-8报错原因: 1、没有安装相应的语言包。2、没有设置正确的语言环境。 解决方法1:安装语言包 设置语言环境需使用命令 localelocale -a 命令,查…

代码随想录day02

977.有序数组的平方 ● 力扣题目链接 ● 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 思路 ● 暴力排序,时间复杂度O(n nlogn) ● 使用双指针,时间复杂度O(n) …

Vue中使用v-bind:class动态绑定多个类名

Vue.js是一个流行的前端框架,它可以帮助开发者构建动态交互的UI界面。在Vue.js开发中,经常需要动态绑定HTML元素的class(类名)属性,以改变元素的外观和行为。本文将介绍采用v-bind:class指令在Vue中如何动态绑定多个类…

【大数据】-- 本地部署 Flink kubernetes operator

目录 1.说明 1.1 版本 1.2 kubernetes 环境 1.3 参考 2.安装步骤 2.1 安装本地 kubernetes 环境

判断链表有环的证明

目录 1.问题 2.证明 3.代码实现 1.问题 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用…

TansUNet代码理解

首先通过论文中所给的图片了解网络的整体架构: vit_seg_modeling部分 模块引入和定义相关量: # codingutf-8 # __future__ 在老版本的Python代码中兼顾新特性的一种方法 from __future__ import absolute_import from __future__ import division fr…

新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元

伦敦, 8月14日 - 在英国伦敦隆重的Raffles OWO举办的欧盟数字超算新时代战略合作签约仪式,CosmosAI、Infinite Money Fund与Internet Research Lab三方强强联手,达成了历史性的合作协议,共同迈向超算租赁新纪元。 ​ 这次跨界的合作昭示了全球…

Session基础

文章目录 什么是Sessionsession与cookie的区别和联系Session的存Session的取 什么是Session 服务器为每个用户浏览器创建一个会话对象(session对象),一个浏览器只能产生一个session当新建一个窗口访问服务器时,还是原来的那个ses…

VR家装提升用户信任度,线上体验家装空间感

近些年,VR家装逐渐被各大装修公司引入,VR全景装修的盛行,大大增加了客户“所见即所得”的沉浸式体验感,不再是传统二维平面的看房模式,而是让客户通过视觉、听觉、交互等功能更加真实的体验家装后的效果。 对于传统家装…

本地Linux 部署 Dashy 并远程访问教程

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

JS如何向数组中添加数组

常见的办法有 1、push()方法 var arr [a, b, c,d]; arr.push(e); console.log(arr); // [a, b, c, d,e] 2、concat()方法 var arr1 [a, b, c]; var arr2 [d, e, f]; var arr3 arr1.concat(arr2); console.log(arr3); // [a, b, c, d, e, f] 3、可以使用ES6中的spread操作符…

【git】Fork或者git clone克隆了别人项目,如何保持与原项目同步更新

Fork或者git clone克隆了别人项目,如何保持与原项目同步更新 #mermaid-svg-LC920CR873UxZJC3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LC920CR873UxZJC3 .error-icon{fill:#552222;}#mermaid-svg-…

BUUCTF 还原大师 1

题目描述: 我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4D…

【Vue3】自动引入插件-`unplugin-auto-import`

Vue3自动引入插件-unplugin-auto-import,不必再手动 import 。 自动导入 api 按需为 Vite, Webpack, Rspack, Rollup 和 esbuild 。支持TypeScript。由unplugin驱动。 插件安装:unplugin-auto-import 配置vite.config.ts(配置完后需要重启…

迪瑞克斯拉算法 — 优化

在上一篇迪瑞克斯拉算法中将功能实现了出来,完成了图集中从源点出发获取所有可达的点的最短距离的收集。 但在代码中getMinDistanceAndUnSelectNode()方法的实现并不简洁,每次获取minNode时,都需要遍历整个Map,时间复杂度太高。这…

stable diffusion安装包和超火使用文档及提示词,数字人网址

一:文生图、图生图 1:stable diffusion:对喜欢二次元、美女小姐姐、大眼萌妹的人及其友好哈哈(o^^o) 1):关于安装包和模型包: 链接:https://pan.baidu.com/s/11_kguofh76gwhTBPUipepw 提取码…

HTML详解连载(5)

HTML详解连载(5) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高:设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…

阿里云国际站对象储存OSS的常见问题?

1.什么是阿里云OSS? 阿里云对象存储服务OSS(Object Storage Service),是阿里云提供的海量、安全、低成本、高持久性的云存储服务,并可无限扩展。其数据设计持久性不低于99.9999999999%(12个9)&a…