浏览器自动化测试工具 Playwright 简介,再见 Selenium,虽然我依然爱你

编程入门 行业动态 更新时间:2024-10-25 18:35:11

浏览器自动化<a href=https://www.elefans.com/category/jswz/34/1767317.html style=测试工具 Playwright 简介,再见 Selenium,虽然我依然爱你"/>

浏览器自动化测试工具 Playwright 简介,再见 Selenium,虽然我依然爱你

Based playwright 1.17
发布时间:2021-12-01

作为一个兴趣驱动的代码农场主,我用 python 的原因真的是“人生苦短”,能省一点时间就省一点,本着能用就行的态度对待一切,但我依然无法忍受 Selenium 是不是冒一些小强出来。在网上冲浪的时候发现了 Playwright(aka 剧作家,没错微软就是这么文采斐然)。

1. Playwright 是什么

官网 h1 是这么写的:Playwright enables reliable end-to-end testing for modern web apps. 翻译成中国话就是“Playwright 为现代网络应用程序提供可靠的端到端测试”,说人话就是一个测试工具,当然大家都懂要用测试工具做什么。

这玩意名字里有个 play,那么,有什么好玩的呢?

  • 适用于常见的现代化浏览器(官网说所有浏览器,这口气这自信)
    • 可以用简单的 API 调用 Chromium、Firefox 和 WebKit 内核进行自动化操作。
    • 可以模拟移动端访问。
    • 跨平台测试。
    • 可以以有头或无头模式调用(我哔好吓人,其实就是有没有浏览器窗口而已)
  • 执行快速而可靠
    • 可以为现代化的单页网络应用(哪里现代化?)进行自动化操作。
    • 浏览器隔离:多个执行环境通过 browser contexts 进行隔离,使用重用的同一个浏览器实例。
    • 自动超时控制:网络堵塞时,不用再 sleep 阻塞线程了,剧作家会自动等待超时。
    • 元素选择器:可以依靠文本内容或辅助标签选择元素(美丽汤下岗了)
  • 多语言支持
    • JavaScript & TypeScript, Python, .NET and, Java 可用。
  • 还有一大堆,懒得翻了,总之一个字,好!

.NET 就是个折翼的天使,我现在都不敢相信我曾经认真学过。随着年龄增长,我面对问题的解决方案越来越功利,所以 python。

2. python 库安装

pip

pip install --upgrade pip
pip install playwright
playwright install

第一行看心情。

Conda

conda config --add channels conda-forge
conda config --add channels microsoft
conda install playwright
playwright install

浏览器内核安装

playwright install

会安装可用的全部 3 种内核,也可以传参只安其中的一个或几个:

playwright install webkit

3. 基础用法

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("")print(page.title())browser.close()

还有异步调用,代码方面 Docs 内容还相对可以,自行查看就好。

比较关键的就是选择器,除了 focus click dblclick hover 等操作以外,

# 通过文本选择元素,这是 Playwright 自定义的一种表达式
page.click("text=登陆")# 直接通过 id 选择
page.click("id=login")# 通过 CSS 选择元素
page.click("#search")
# 除了常用的 CSS 表达式外,Playwright 还支持了几个新的伪类
# :has 表示包含某个元素的元素
page.click("article:has(div.prome)")
# :is 用来对自身做断言
page.click("button:is(:text('sign in'), :text('log in'))")
# :text 表示包含某个文本的元素
page.click("button:text('Sign in')")  # 包含
page.click("button:text-is('Sign is')")  # 严格匹配
page.click("button:text-matches('\w+')")  # 正则
# 还可以根据方位匹配
page.click("button:right-of(#search)")  # 右边
page.click("button:left-of(#search)")  # 左边
page.click("button:above(#search)")  # 上边
page.click("button:below(#search)")  # 下边
page.click("button:near(#search)")  # 50px 之内的元素# 通过 XPath 选择
page.click("//button[@id='search'])")
# 所有 // 或者 .. 开头的表达式都会默认为 XPath 表达式

4. 命令行工具

4.1 codegen

重头戏来了。
codegen 是懒人福音。通过记录用户操作自动生成代码括弧笑。

4.1.1 基础用法

自动打开一个记录窗口、一个浏览器窗口,并访问某度:

playwright codegen /

进阶玩法,指定生成代码的语言,自动把生成的代码保存为 baidu_test.py,并指定浏览器内核。
其实不用这么复杂,记录窗口上可以直接操作生成的代码:)

playwright codegen --target python -o baidu_test.py -b chromium /

4.1.2 进阶操作

4.1.2.1 保留认证状态

需要登录的那些货,颤抖吧!

使用 --save-storage 参数指定文件名,可以保存网站的 cookie 和 localStorage 以便将来复用:

playwright codegen --save-storage=auth.json

重用:

playwright open --load-storage=auth.json my.web.app
playwright codegen --load-storage=auth.json my.web.app

4.2 open

4.2.1 用不同的内核打开

# Open page in WebKit
playwright wk example

4.2.2 模拟设备

模拟爱疯 11:

# Emulate iPhone 11.
playwright open --device="iPhone 11" /

模拟色彩模式和网页视口大小:

# Emulate screen size and color scheme.
playwright open --viewport-size=800,600 --color-scheme=dark /

模拟地理位置、语言和时区,牛哔(破音):

# Emulate timezone, language & location
# 页面打开后,点击“我的位置”(意大利语),官方例子定位在罗马斗兽场……
playwright open --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" /

4.3 选择器

使用 opencodegen 期间(codegen 要先取消录制模式),可以 F12 打开开发人员工具,在 console 窗口输入选择器选择页面元素:

常用选择器:

  • playwright.$(selector)​:基本选择器,选择符合的第一个元素
  • playwright.$$(selector)​:与基本选择器一致,返回所有匹配的对象
  • playwright.inspect(selector)​:在元素(Elements)窗口中查看元素,如果开发人员工具支持
  • playwright.selector(element)​:从给定的元素生成选择器

4.4 网页截屏

# See command help
playwright screenshot --help
# Wait 3 seconds before capturing a screenshot after page loads ('load' event fires)
playwright screenshot \--device="iPhone 11" \--color-scheme=dark \--wait-for-timeout=3000 \twitter twitter-iphone.png
# Capture a full page screenshot
playwright screenshot --full-page /python/docs/cli doc-full.png

4.5 生成 PDF​

只有无头 Chromium 可以生成 PDF 文件。

# See command help
playwright pdf  wiki.pdf

5. 获取百度首页链接的代码

from playwright.sync_api import sync_playwrightURI = '/'def get_links(uri):with sync_playwright() as p:browser = p.chromium.launch(headless=True)page = browser.new_page()page.goto(uri)all_links = page.query_selector_all('a')for i in all_links:print(f'Link name : {i.inner_text()}', end='\t')print(f'addr : {i.get_attribute("href")}')browser.close()returnget_links(URI)

先这样吧,挺有意思。

更多推荐

浏览器自动化测试工具 Playwright 简介,再见 Selenium,虽然我依然爱你

本文发布于:2024-02-11 07:16:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1679793.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:测试工具   浏览器   简介   我依然   Playwright

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!