自动化测试框架Playwright安装以及使用

最近,微软开源了一个非常强大的自动化项目叫 playwright-python

它支持主流的浏览器,包含:Chrome、Firefox、Safari、Microsoft Edge 等,同时支持以无头模式、有头模式运行,并提供了同步、异步的 API,可以结合 Pytest 测试框架 使用,并且支持浏览器端的自动化脚本录制。

项目地址:https://github.com/microsoft/playwright-python

而对于Python爱好者来说,还有一个更大的福利,这个项目是针对Python语言的纯自动化工具,可以做到,连一行代码都不用写,就能实现自动化功能。听起来,简直太碉堡了!

可能你会觉得有点不可思议,真的不用写一行代码吗?但它真的就是这么厉害。下面我们一起看下这个神器。

1、Playwright介绍

Playwright是一个强大的Python库,仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。

Playwright提供的自动化技术是绿色的、功能强大、可靠且快速,支持Linux、Mac以及Windows操作系统。

官网:https://playwright.dev/

从官网的解释,官方给Playwright定位是一款真正意义上的Web端到端测试工具。

2、Playwright安装

Playwright功能强大,但它的安装步骤,非常简单,只需要 2 步:

第 1 步,安装 playwright-python 依赖库 (需要注意的是,playwright库需要依赖Python3.7+以上)

#此处可能是pip/pip3,或者两者皆可

pip3 install playwright
可以在https://pypi.org/project/playwright/查看它的依赖版本信息。

第 2 步,安装主流的浏览器驱动

这样,会将 Chromeium、Firefox、Webkit 浏览器驱动下载到本地

# 安装浏览器驱动(安装过程稍微有点慢,请耐心等待)

python3 -m playwright install

如果想查看Playwright支持的功能, 可以直接在命令行输入:

python3 -m playwright helpUsage: index [options] [command]Options:-V, --version                          output the version number-b, --browser <browserType>            browser to use, one of cr, chromium, ff, firefox, wk,webkit (default: "chromium")--color-scheme <scheme>                emulate preferred color scheme, "light" or "dark"--device <deviceName>                  emulate device, for example  "iPhone 11"--geolocation <coordinates>            specify geolocation coordinates, for example"37.819722,-122.478611"--lang <language>                      specify language / locale, for example "en-GB"--proxy-server <proxy>                 specify proxy server, for example "http://myproxy:3128" or"socks5://myproxy:8080"--timezone <time zone>                 time zone to emulate, for example "Europe/Rome"--timeout <timeout>                    timeout for Playwright actions in milliseconds (default:"10000")--user-agent <ua string>               specify user agent string--viewport-size <size>                 specify browser viewport size in pixels, for example "1280,720"-h, --help                             display help for commandCommands:open [url]                             open page in browser specified via -b, --browsercr [url]                               open page in Chromiumff [url]                               open page in Firefoxwk [url]                               open page in WebKitcodegen [options] [url]                open page and generate code for user actionsscreenshot [options] <url> <filename>  capture a page screenshotpdf [options] <url> <filename>         save page as pdfinstall                                Ensure browsers necessary for this version of Playwrightare installedhelp [command]                         display help for command

从命令行帮助信息中可以看出,Playwright支持的功能相当丰富!

3、实操演示

开篇就提到,使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。

1)录制脚本

我们先查看录制脚本的命令说明

python3 -m playwright codegen --helpUsage: index codegen [options] [url]open page and generate code for user actionsOptions:-o, --output <file name>  saves the generated script to a file--target <language>       language to use, one of javascript, python, python-async, csharp (default: "python")-h, --help                display help for commandExamples:$ codegen$ codegen --target=python$ -b webkit codegen https://example.com

其中:

python -m playwright codegen  录制脚本
--help  帮助文档
-o  生成自动化脚本的目录
--target 脚本语言,包含 JS 和 Python,分别对应值为:python 和 javascript
-b  指定浏览器驱动
比如,我要在baidu.com搜索,用chromium驱动,将结果保存为mikezhou.py的python文件。# 我们通过下面命令打开 Chrome 浏览器开始录制脚本
# 指定生成语言为:Python(默认Python,可选)
# 保存的文件名:mikezhou.py(可选)
# 浏览器驱动:webkit(默认webkit,可选)
# 最后跟着要打开的目标网站(默认仅仅是打开浏览器,可选)
python3 -m playwright codegen --target python -o 'mikezhou.py' -b chromium https://www.baidu.com

命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,如下所示:

最后,自动化脚本会自动生成,保存到文件中mikezhou.py, 且上述所有的人工操作,都会被自动转化成代码:

2)支持同步

同步的关键字为:sync_playwright

比如,我们依次使用三个浏览器内核打开浏览器,然后百度一下,接着对在搜索界面截图,最后关闭浏览器

from time import sleep
from playwright import sync_playwright

# 注意:默认是无头模式
with sync_playwright() as p:
    # 分别对应三个浏览器驱动
    for browser_type in [p.chromium, p.firefox, p.webkit]:

        # 指定为有头模式,方便查看
        browser = browser_type.launch(headless=False)
        page = browser.newPage()
        page.goto('http://baidu.com')

from playwright import sync_playwrightdef run(playwright):browser = playwright.chromium.launch(headless=False)context = browser.newContext()# Open new pagepage = context.newPage()# Go to https://www.baidu.com/page.goto("https://www.baidu.com/")# Click input[name="wd"]page.click("input[name=\"wd\"]")# Fill input[name="wd"]page.fill("input[name=\"wd\"]", "禾目大")# Press CapsLockpage.press("input[name=\"wd\"]", "CapsLock")# Fill input[name="wd"]page.fill("input[name=\"wd\"]", "自动化测试实战宝典 ")# Press Enterpage.press("input[name=\"wd\"]", "Enter")# assert page.url() == "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E5%AE%9D%E5%85%B8%20&fenlei=256&rsv_pq=af40e9aa00012d5a&rsv_t=c659gpz2%2Fjri1SAoIXdT9gP%2BmrqufXzRtMSSAL0n0fv7GSoLF5vaiNVPA3U&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=38&rsv_sug1=22&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=8034&rsv_sug4=9153"# Close pagepage.close()# ---------------------context.close()browser.close()with sync_playwright() as playwright:run(playwright)# 执行一次搜索操作page.fill("input[name=\"wd\"]", "自动化测试实战宝典")with page.expect_navigation():page.press("input[name=\"wd\"]", "Enter")# 等待页面加载完全page.waitForSelector("text=搜索工具")# 截图page.screenshot(path=f'test-{browser_type.name}.png')# 休眠3ssleep(3)# 关闭浏览器browser.close()

需要指出的是,playwright-python 内置的 API 基本上囊括常见的自动化操作。

3)支持异步

异步步的关键字为:async_playwright,异步操作可结合asyncio同时进行三个浏览器操作。

import asyncio
from playwright import async_playwright# 异步执行
async def main():async with async_playwright() as p:for browser_type in [p.chromium, p.firefox, p.webkit]:# 指定为有头模式,方便查看browser = await browser_type.launch(headless=False)page = await browser.newPage()await page.goto('http://baidu.com')# 执行一次搜索操作await page.fill("input[name=\"wd\"]", "自动化测试实战宝典")await page.press("input[name=\"wd\"]", "Enter")# 等待页面加载完全await page.waitForSelector("text=搜索工具")# 截图await page.screenshot(path=f'test-{browser_type.name}.png')await browser.close()asyncio.get_event_loop().run_until_complete(main())

4)支持移动端

更厉害的是,playwright还可支持移动端的浏览器模拟。下面是官方文档提供的一段代码,模拟在给定地理位置上手机iphone 11 pro上的Safari浏览器,首先导航到maps.google.com,然后执行定位并截图。

from playwright import sync_playwrightwith sync_playwright() as p:iphone_11 = p.devices['iPhone 11 Pro']browser = p.webkit.launch(headless=False)context = browser.newContext(**iphone_11,locale='en-US',geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },permissions=['geolocation'])page = context.newPage()page.goto('https://maps.google.com')page.click('text="Your location"')page.screenshot(path='colosseum-iphone.png')browser.close()

5)支持Pytest框架

另外,还可以配合pytest插件一起使用,给出一段官网示例:

def test_playwright_is_visible_on_google(page):
    page.goto("https://www.google.com")
    page.type("input[name=q]", "Playwright GitHub")
    page.click("input[type=submit]")
    page.waitForSelector("text=microsoft/Playwright")
当然,除了上面列举出来的特性,还有更多有意思的用法,感兴趣的读者可以自行探索一下。

4、小结

playwright相比已有的自动化测试框架来说,具有有很多优势,比如:

跨浏览器,支持Chromium、Firefox、WebKit;
跨操作系统,支持Linux、Mac、Windows;
可提供录制生成代码功能,解放双手;
可用于移动端;
目前存在的缺点就是生态和文档还不是非常完备,比如没有API中文文档、没有较好的教程和示例供学习。不过相信,随着知道的人越来越多,未来会越来越好。

最后,再说一个小秘密,Playwright 是一个跨语言的自动化框架,除了支持 Python,也支持Java、JS 等,更加详细的功能可以通过官方项目去解锁~


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战 

三、Web自动化项目实战

四、App自动化项目实战 

五、一线大厂简历

六、测试开发DevOps体系 

七、常用自动化测试工具

八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

Python 实现:OCR在图片中提取文字(基于Gradio实现)

Paddle OCR PaddleOCR 基于深度学习技术实现的&#xff0c;使用十分简单。 先看效果 可以看出来识别效果还是不错的&#xff0c;里面的“湿”字识别成了繁体字。如果不是连体字&#xff0c;就不会出现这个问题。 1.测试环境 操作系统&#xff1a;Win10 Python&#xff1a;3…

对BIOS进行简单快速的设置更改,就能启用安全引导来安装Windows 11

本文介绍如何在UEFI/BIOS中启用安全引导&#xff0c;以便继续安装Windows 11。 如何启用安全引导 启用安全引导最简单的方法是通过UEFI/BIOS进行。它通常被列为BIOS中的众多选项之一&#xff0c;因此你只需打开它即可启用它。 1、启动&#xff0c;或重新启动你的电脑或笔记本…

Domino万物可订阅

大家好&#xff0c;才是真的好。 如果你还不知道什么是RSS&#xff0c;从V站截图一份放到这里供大家参考&#xff1a; 其实&#xff0c;Domino上也可以很简单地发布RSS站点&#xff0c;以供内部或外部用户订阅。 前面其实我们说了不少关于Notes客户端的RSS订阅功能&#xff…

人工智能驱动的智慧城市:科技之光照亮未来城市发展

导言 人工智能在智慧城市建设中扮演着关键角色&#xff0c;通过智能化、自动化的手段&#xff0c;为城市提供高效、智能的管理和服务。本文将深入研究人工智能在智慧城市中的应用、创新技术以及对城市未来发展的引领作用。 智慧城市是利用先进的信息技术和大数据分析手…

nodejs+vue+微信小程序+python+PHP邮件分类系统的设计与实现-计算机毕业设计推荐

运用现代化信息技术手段加强电子邮件的管理&#xff0c;可以大大地降低管理工作量加快收集信息的速度&#xff0c;通过加强管理&#xff0c;保护电子邮件完整无缺&#xff0c;过滤垃圾邮件&#xff0c;节省办公时间。 论文先介绍当前邮件分类系统的现状&#xff0c;然后调研开发…

jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱

前言 个人其实一直的不太喜欢用邮箱发送报告&#xff0c;测试报告用邮件通知这都是五六年前的事情了&#xff0c;但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。 配置你的邮箱 配置邮箱这一步最繁琐&#xff0c;由于每个人使用的邮箱不一样&…

Qt容器QScrollArea小部件的滚动视图

​# QScrollArea 平台:linux、windows、mac皆可,Qt版本:Qt5.14.2 QScrollArea是Qt框架中用于提供可滚动视图区域的小部件。它通常被用来包含一个较大的内容区域,并且可以在其中嵌入其他小部件。下面是一些常用的QScrollArea函数: 1. `setWidget(QWidget *widget)`: 设置在…

机器学习支持向量机(SVM)

svm与logstic异同 svm支持向量机&#xff0c;因其英文名为support vector machine&#xff0c;故一般简称SVM&#xff0c;通俗来讲&#xff0c;它是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;其学习策略便是间隔最大化&#x…

微服务保护--熔断降级

1.熔断降级介绍 熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例&#xff0c;如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求&#xff1b;而当服务恢复时&#xff0c;断路器会放行访问该服务的请求。 断路器控制熔断和放行…

3小时快速入门自动化测试 —— Selenium测试工具

自动化测试 自动化测试简单来说就是利用自动化测试工具和自动化测试脚本来完成指定的测试任务&#xff0c;测试启动过程无需人工参与&#xff0c;但自动化测试之前的准备工作需要人工手动配置好。它是一种将重复性、繁琐的测试任务交给计算机自动执行的方法&#xff0c;能够显…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

【采坑分享】npm login/publish/whoami失败采坑,解决npmERR426、ETIMEDOUT、ECONNREFUSED等错误

目录 前言背景&#xff1a; 采坑之路&#xff1a; 1.修改https为http&#xff0c;问题还在 2.修改为淘宝镜像&#xff0c;问题还在 3.修改为官网地址&#xff0c;问题还在 4.升级node和npm&#xff0c;问题还在 5.猜想网络问题&#xff0c;问题解决 采坑总结&#xff1a…

HTTP 414错误:请求URI过长,如何避免

在Web开发中&#xff0c;HTTP状态码是用于表示Web服务器响应的各种状态。其中&#xff0c;HTTP 414错误表示请求URI过长&#xff0c;这意味着客户端发送的请求URL超过了服务器所能处理的长度限制。 当请求的URI过长时&#xff0c;服务器可能无法正确处理请求&#xff0c;从而导…

Spring批量加载Resource目录下的文件

项目中的配置文件用json方式存储在了resources下面的文件夹下面。如下&#xff1a; 在代码里面需要将他们全部读出来。 但是ClassLoader.getResource 只能读取单个文件&#xff0c;不能读取文件列表。然后就想到了 mybatis 同样也是要读配置文件列表&#xff0c;就想看看 myba…

01-EEA电子电器架构

1.背景 汽车正在从传统的机械装置逐步电气化&#xff0c;汽车电子电气功能不断的丰富。越来越多的电气系统和功能被集成到汽车上&#xff0c;传统的原理及线束设计已经远远不能满足。为此&#xff0c;EEA(电子电气架构)应运而生。如何设计电子电气架构&#xff0c;满足日益增长…

字符串——OJ题

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、字符串相加1、题目讲解2、思路讲解3、代码实现 二、仅仅反转字母1、题目讲解2、思路讲解3…

前端面试CSS知识点

目录 前言 一、块级元素、行内元素和行内块元素的区别 1. 块级元素-display:block 1.1.1 常见的块级元素 1.1.2 块级元素的特点 2. 行内元素-display-inline 2.1.1 常见的行内元素 2.1.2 行内元素的特点 3. 行内块元素-display:inline-block 3.1.1 常见的行内块元素 3.1.2 行内…

媒体直播平台有哪些,活动直播如何扩大曝光?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体直播平台包括人民视频、新华社现场云、中国网、新浪新闻直播、搜狐视频直播、凤凰新闻直播、腾讯新闻直播等。活动直播想要扩大曝光&#xff0c;可以考虑以下方式&#xff1a; 1.选择…

Nginx七层代理,四层代理 + Tomcat多实例部署

目录 1.tomcat多实例部署 准备两台虚拟机 进入pc1 pc2同时安装jdk 进入pc1 pc2安装tomcat PC1配置&#xff08;192.168.88.50&#xff09; 安装tomcat多实例 tomcat2中修改端口 启动tomcat1 tomcat2 分别在三个tomcat服务上部署jsp的动态页面 2.nginx的七层代理&…

Logistic 回归算法

Logistic 回归 Logistic 回归算法Logistic 回归简述Sigmoid 函数Logistic 回归模型表达式求解参数 $\theta $梯度上升优化算法 Logistic 回归简单实现使用 sklearn 构建 Logistic 回归分类器Logistic 回归算法的优缺点 Logistic 回归算法 Logistic 回归简述 Logistic 回归是一…