当前位置: 首页 > news >正文

【playwright】新一代自动化测试神器playwright+python系列课程01-playwright驱动浏览器

Playwright驱动浏览器

安装 Playwright 时,Playwright默认自动安装了三种浏览器(Chromium、Firefox 和 WebKit)。我们可以驱动这三种浏览器中的任意一种。

使用with上下文管理器

启动chromium浏览器


```python
# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectwith sync_playwright() as p:browser = p.chromium.launch(headless=False) # 设置有头模式启动chrome浏览器context = browser.new_context() # 创建上下文,打开浏览器page = context.new_page() # 打开标签页page.goto('127.0.0.1')page.wait_for_timeout(10000)context.close()browser.close()
启动firefox浏览器```python
# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectwith sync_playwright() as p:browser = p.firefox.launch(headless=False) # 设置有头模式启动chrome浏览器context = browser.new_context() # 创建上下文,打开浏览器page = context.new_page() # 打开标签页page.goto('127.0.0.1')page.wait_for_timeout(10000)context.close()browser.close()

启动webkit浏览器

'''# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectwith sync_playwright() as p:browser = p.webkit.launch(headless=False) # 设置有头模式启动chrome浏览器context = browser.new_context() # 创建上下文,打开浏览器page = context.new_page() # 打开标签页page.goto('127.0.0.1')page.wait_for_timeout(10000)context.close()browser.close()

不使用with上下文管理器

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectplaywright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False) # 设置有头模式启动chrome浏览器,没执行一个动作等待2秒
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.get_by_text('开源版').click()
page.locator('#account').fill('admin')
page.locator('[name="password"]').fill('Deshifuzhi01')
page.locator('#submit')
page.wait_for_timeout(10000)context.close()
browser.close()
playwright.stop()

同时打开多个浏览器执行

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectwith sync_playwright() as p:browser = p.chromium.launch(headless=False,slow_mo=1000) # 启动本地的谷歌浏览器,设置有头模式启动chrome浏览器context1 = browser.new_context() # 创建上下文,打开浏览器context2 = browser.new_context() # 创建上下文,打开浏览器page = context1.new_page() # 打开标签页page2 = context2.new_page() # 打开标签页page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')page2.goto('http://127.0.0.1:8080/oa/')page.locator('#account').fill('admin')page.locator('[name="password"]').fill('Deshifuzhi01')page.locator('#submit')page.wait_for_timeout(10000)page2.locator('[name="loginId"]').fill('sup')page2.locator('[name="password"]').fill('s1234567')page2.locator('#button_submit').click()page2.wait_for_timeout(10000)context1.close()context2.close()browser.close()

一个浏览器中同时打开多个标签页分别执行

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectwith sync_playwright() as p:browser = p.chromium.launch(headless=False,slow_mo=1000) # 启动本地的谷歌浏览器,设置有头模式启动chrome浏览器context = browser.new_context() # 创建上下文,打开浏览器page = context.new_page() # 打开标签页page2 = context.new_page() # 打开标签页page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')page2.goto('http://127.0.0.1:8080/oa/')page.locator('#account').fill('admin')page.locator('[name="password"]').fill('Deshifuzhi01')page.locator('#submit').click()page.wait_for_timeout(10000)page2.locator('[name="loginId"]').fill('sup')page2.locator('[name="password"]').fill('s1234567')page2.locator('#button_submit').click()page2.wait_for_timeout(10000)context.close()browser.close()

slow_mo减慢执行速度
Playwright 打开浏览器运行脚本的速度那就是一个字:快!相对于selenium,playwright执行速度会更快,眨眼间就完事了。因此为了便于我们查看执行的过程,我们可以加上等待来减缓执行,但是与selenium不同,playwright通过slow_mo (单位是毫秒)减慢执行速度,它的作用范围是全局的,从启动浏览器到操作元素每个动作都会有等待间隔,方便在出现问题的时候看到页面操作情况。使用方法如下:

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''from playwright.sync_api import sync_playwright,Playwright,expectplaywright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False,slow_mo=2000) # 设置有头模式启动chrome浏览器,没执行一个动作等待2秒
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.get_by_text('开源版').click()
page.locator('#account').fill('admin')
page.locator('[name="password"]').fill('Deshifuzhi01')
page.locator('#submit')
page.wait_for_timeout(10000)context.close()
browser.close()
playwright.stop()

以上案例为同步模式驱动浏览器,接下来我们看一下异步模式:

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
import asyncio
from playwright.async_api import async_playwright,Playwright,expect
async def run(playwright):browser =await playwright.chromium.launch(headless=False,slow_mo=1000) # 启动本地的谷歌浏览器,设置有头模式启动chrome浏览器context =await browser.new_context() # 创建上下文,打开浏览器page = await context.new_page() # 打开标签页page2 = await  context.new_page() # 打开标签页await page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')await page2.goto('http://127.0.0.1:8080/oa/')await page.locator('#account').fill('admin')await page.locator('[name="password"]').fill('Deshifuzhi01')await page.locator('#submit').click()await page.wait_for_timeout(10000)await page2.locator('[name="loginId"]').fill('sup')await page2.locator('[name="password"]').fill('s1234567')await page2.locator('#button_submit').click()await page2.wait_for_timeout(10000)context.close()browser.close()async def main() -> None:async with async_playwright() as playwright:await run(playwright)asyncio.run(main())

启动本地浏览器
Playwright启动浏览器时,默认启动Playwright安装的浏览器,如果想要启动本地安装的浏览器,可在启动浏览器时通过channel 指定打开浏览器
Google Chrome 和 Microsoft Edge浏览器都是用的 chromium 内核,所以只需加一个channel=“chrome” 即可打开本地谷歌浏览器(需要将谷歌浏览器安装目录C:\Program Files\Google\Chrome\Application 添加到环境变量Path下)

 browser=p.chromium.launch(channel="chrome",headless=False)

相关文章:

【playwright】新一代自动化测试神器playwright+python系列课程01-playwright驱动浏览器

Playwright驱动浏览器 安装 Playwright 时,Playwright默认自动安装了三种浏览器(Chromium、Firefox 和 WebKit)。我们可以驱动这三种浏览器中的任意一种。 使用with上下文管理器 启动chromium浏览器 python # # author: 测试-老姜 交流…...

POSIX API与网络协议栈

本文介绍linux中与tcp网络通信相关的POSIX API,在每次调用的时候,网络协议栈会进行的操作与记录。 POSIX API Posix API,提供了统一的接口,使程序能得以在不同的系统上运行。简单来说不同的操作系统进行同一个活动,比…...

互联网加竞赛 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...

腾讯云 IPv6 解决方案

产品矩阵全覆盖 腾讯云全线产品 All in IPv6;云服务器、私有网络、负载均衡、内容分发、域名解析、DDoS 高防等都已支持 IPv6。 全球 IPv6 基础设施 腾讯云在全球开放25个地理区域,运营53个可用区;目前已有多个地域提供 IPv6 接入能力。 …...

Appium 自动化测试

1.Appium介绍 1,appium是开源的移动端自动化测试框架; 2,appium可以测试原生的、混合的、以及移动端的web项目; 3,appium可以测试ios,android应用(当然了,还有firefoxos)…...

深入浅出Android dmabuf_dump工具

目录 dmabuf是什么? dmabuf_dump工具介绍(基于Android 14) Android.bp dmabuf_dump.cpp 整体架构结构如下 dmabuf_dump主要包含以下功能 前置背景知识 fdinfo 思考 bufinfo Dump整个手机系统的dmabuf Dump某个进程的dmabuf​​​​​​​ 以Table[buff…...

Guava RateLimiter预热模型

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 什么是流量预热 我们都知道在做运动之前先得来几组…...

【搭建个人知识库-3】

搭建个人知识库-3 1 大模型开发范式1.1 RAG原理1.2 LangChain框架1.3 构建向量数据库1.4 构建知识库助手1.5 Web Demo部署 2 动手实践2.1 环境配置2.2 知识库搭建2.2.1 数据收集2.2.2 加载数据2.2.3 构建向量数据库 2.3 InternLM接入LangChain2.4 构建检索问答链1 加载向量数据…...

如何看待 Linux 内核邮件列表重启将内核中的 C 代码转换为 C++

如何看待 Linux 内核邮件列表重启将内核中的 C 代码转换为 C 的讨论? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿…...

springboot网关添加swagger

添加依赖 <dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>2.0.2</version></dependency>添加配置类&#xff0c;与服务启动类同一个层级 地址&#xff1a;http…...

代码随想录 Leetcode383. 赎金信

题目&#xff1a; 代码&#xff08;首刷自解 2024年1月15日&#xff09;&#xff1a; class Solution { public:bool canConstruct(string ransomNote, string magazine) {vector<int> v(26);for(auto letter : magazine) {v[letter - a];}for(auto letter : ransomNote…...

上下左右视频转场模板PR项目工程文件 Vol. 05

pr转场模板&#xff0c;视频画面上下左右转场后带有一点点回弹效果的PR项目工程模板 Vol. 05 项目特点&#xff1a; 回弹效果视频转场&#xff1b; Premiere Pro 2020及以上&#xff1b; 适用于照片和视频转场&#xff1b; 适用于任何FPS和分辨率&#xff1b; 视频教程。 PR转场…...

【正点原子STM32连载】第三十三章 单通道ADC采集实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第三…...

Linux系统使用docker部署Geoserver(简单粗暴,复制即用)

1、拉取镜像 docker pull kartoza/geoserver:2.20.32、创建数据挂载目录 # 统一管理Docker容器的数据文件,geoserver mkdir -p /mydata/geoserver# 创建geoserver的挂载数据目录 mkdir -p /mydata/geoserver/data_dir# 创建geoserver的挂载数据目录&#xff0c;存放shp数据 m…...

libcurl使用默认编译的winssl进行https的双向认证

双向认证&#xff1a; 1.服务器回验证客户端上报的证书 2.客户端回验证服务器的证书 而证书一般分为&#xff1a;1.受信任的根证书&#xff0c;2不受信任的根证书。 但是由于各种限制不想在libcurl中增加openssl&#xff0c;那么使用默认的winssl也可以完成以上两种证书的双…...

MySQL运维实战(3.3) 管理数据库(database)

作者&#xff1a;俊达 引言 数据库的创建和管理是构建可靠数据的关键&#xff0c;关系到所存储数据的安全与稳定。在 MySQL 这个强大的关系型数据库系统中&#xff0c;数据库的创建与管理需要精准的步骤和妥善的配置。下面&#xff0c;将深入探讨如何使用MySQL 来管理数据库&…...

Web3去中心化存储:重新定义云服务

随着Web3技术的崭露头角&#xff0c;去中心化存储正在成为数字时代云服务的全新范式。传统的云服务依赖于中心化的数据存储架构&#xff0c;而Web3的去中心化存储则为用户带来了更安全、更隐私、更可靠的数据管理方式&#xff0c;重新定义了云服务的未来。 1.摒弃中心化的弊端 …...

纸尿裤行业调研:预计到2024年提高至68.1%

母婴大消费是指围绕孕产妇和0-14岁婴幼童人群&#xff0c;贯穿孕产妇孕产及产后护理周期、婴幼童成长周期的满足其衣、食、住、行、用、玩、教等需求的消费品的总和。 不同产品消费频次各异&#xff0c;纸尿裤是母婴大消费中的最为高频且刚需的易耗品。当前&#xff0c;消费升…...

目标检测数据集 - 行人检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;行人检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如校园行人、街景行人、道路行人、遮挡行人、严重遮挡行人数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控场景下行人检测项目&#xff0c;以及作为…...

重磅!巨匠纺品鉴正式签约“体坛冠军程晨”为品牌形象代言人

2024年&#xff0c;巨匠纺品鉴打响品牌营销开年第一战&#xff0c;携手全国啦啦操冠军程晨&#xff0c;强势开启“冠军品牌、冠军优选、冠军品质”中国年&#xff0c;实现品牌战略全面升级&#xff0c;全力传递"冠军品质"的品牌精神,拓展品牌影响力的深度和广度,为品…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...