新崛起的自动化神器Playwright

1430 篇文章 54 订阅
273 篇文章 20 订阅

简介

Playwright是微软开源的一个UI自动化测试工具。添加了默认等待时间增加脚本稳定性,并提供视频录制、网络请求支持、自定义的定位器、自带调试器等新特性。

Playwright的优势

  • playwright支持同步和异步两种使用方法

  • 不需要为每个浏览器下载webdriver

  • 支持无头浏览器,且较为推荐(headless默认值为True)

  • 可以使用传统定位方式(CSS,XPATH等),也有自定义的新的定位方式(如文字定位)

  • 没有使用selenium的先定位元素,再进行操作的方式,而是在操作方法中传入了元素定位,定位和操作同时进行

已知局限性

  • 1、旧版Edge和IE11支持。Playwright不支持旧版Microsoft Edge或IE11(弃用通知)。支持新的Microsoft Edge(在Chromium上)。

  • 2、Java语言绑定:Playwright API目前无法在Java或Ruby中使用。这是暂时的限制,因为Playwright旨在支持任何语言的绑定。

  • 3、在真实的移动设备上进行测试:Playwright使用桌面浏览器来模拟移动设备。如果您有兴趣在实际的移动设备上运行,请支持此问题。

安装

pip install playwright  # 安装playwright的python版本playwright install  # 安装playwright自带的浏览器和ffmepg,此步骤耗时较长

示例:以百度为例,输入百度网址打开百度页面,搜索框中输入“playwright”,点击“百度一下”按钮,录制代码如下

from playwright.sync_api import sync_playwright  # 导入playwright同步api

def run(playwright):  # 定义run方法    browser = playwright.chromium.launch(headless=False)  # 创建chromium的browser对象,当前使用的是playwright安装的自带的chromium    context = browser.new_context()  # 创建context对象,context之间是相互隔离的,可以理解为轻量级的浏览器实例

    page = context.new_page()  # 创建page对象,真正打开浏览器界面

    page.goto("https://www.baidu.com/")  # 跳转到百度url

    page.fill("input[name=\"wd\"]", "playwright")  # 通过css定位在搜索框中输入"playwright"

    with page.expect_navigation():  # 预期结果,点击"百度一下"按钮后会发生页面导航        page.click("text=百度一下")  # 通过playwright自定义的文字定位器定位"百度一下"按钮并点击

    # ---------------------    context.close()  # 关闭context    browser.close()  # 关闭browser

with sync_playwright() as playwright:  # playwright使用入口,通过上下文方式    run(playwright)  # 调用run方法,将playwright实例传入

基本概念

browser

浏览器:支持多种浏览器:Chromium(chrome、edge)、Firefox、WebKit(Safari),一般每一种浏览器只需要创建一个browser实例。示例:

browser = playwright.chromium.launch()browser = playwright.firefox.launch()

context

上下文:一个浏览器实例下可以有多个context,将浏览器分割成不同的上下文,以实现会话的分离,如需要不同用户登录同一个网页,不需要创建多个浏览器实例,只需要创建多个context即可。

示例:

context1 = browser.new_context()context2 = browser.new_context()

page

页面:一个context下可以有多个page,一个page就代表一个浏览器的标签页或弹出窗口,用于进行页面操作。

示例:

page = context.new_page()
# 显式导航,类似于在浏览器中输入URLpage.goto('http://example.com')# 在输入框中输入字符page.fill('#search', 'query')
# 点击提交按钮page.click('#submit')# 打印当前urlprint(page.url)

frame

一个页面至少包含一个主frame,新的frame通过iframe标签定义,frame之间可以进行嵌套,只有先定位到frame才能对frame里面的元素进行定位和操作。playwright默认使用page进行的元素操作会重定向到主frame上。

示例:

# 通过名称获得frameframe = page.frame('frame-login')
# 通过frame的url获得frameframe = page.frame(url=r'.*domain.*')
# 通过选择器获得frameframe_element_handle = page.query_selector('.frame-class')frame = frame_element_handle.content_frame()
# 操作frame中的元素frame.fill('#username-input', 'John')

异步

异步操作可结合asyncio同时进行三个浏览器操作。

import asynciofrom playwright import async_playwrightasync def main():async with async_playwright() as p:for browser_type in [p.chromium, p.firefox, p.webkit]:browser = await browser_type.launch()page = await browser.newPage()await page.goto('http://baidu.com/')await page.screenshot(path=f'example-{browser_type.name}.png')await browser.close()asyncio.get_event_loop().run_until_complete(main())

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


在此特意为大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面,涵盖功能测试、Python编程语言,接口测试、UI自动化测试、性能测试......包括软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2022软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..关注下方公众号免费获取~

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值