Playwright快速入门
一:什么是Playwright?
Playwright是由微软基于node.js开发的开源自动化框架,适合用于web网页,移动端网页,具有执行速度快,编写简单的特性;与selenium不同的是,playwright不需要去下载指定的浏览器驱动,支持chorme,firefox,webkit内核的浏览器,与selenium不同的是它并不支持ie古老的浏览器;
在响应速度方面,playwright执行相同的步骤,selenium需要8s而playwright只需要3s;
二:支持的语言?
playwright支持的语言有python,java,js/ts,c#,go
三:如何安装?
在python中使用pip安装
pip install playwright
安装驱动
playwright install
安装完成后就可以正式进入使用
四:如何使用
1.打开浏览器
playwright支持同步和异步的使用,这里用同步的编写
from playwright.sync_api import sync_playwright
with sync_playwright as p:
wd=p.chromium.lauch(headless=False)#打开浏览器,使用ui画面执行
2.打开网址
```python
page=p.new_page()#创建页面对象
page.goto('www.google.com')#跳转到指定的页面
```
3.定位元素
```python
#css选择器
page.locator('#name')#通过id定位,使用#
page.locator('.name')#通过class定位,使用.
page.locator('.name>li')#通过父级元素定位li子元素,li与上级是上下级关系
page.locator('.name , .phone')#定位多个元素,用逗号分割
page.locator('span:nth-child(2)')#定位标签下的第几个标签,从0开始计算
page.locator('span:nth-last(2)')#定位标签下倒数的第几个标签,从0开始计算
page.lcoator('span:nth-child(event)')#定位标签的偶数次数的标签
page.lcoator('span:nth-child(odd)')#选择奇数位置的元素
page.lcoator('[herf:"www.baidu.com"]')#选择标签属性包含了本链接的元素
#语义化定位
page.getByRole('button',{name:'提交'})#通过角色+可访问名称定位
page.getByLabel('用户名')#通过表单控件的label文本定位
page.getByPlaceholder('请输入账号')#通过输入框的提示词定位
page.getByText('登录')#根据标签文本内容定位
page.getAltText('test')#根据标签alt定位
page.getBytitle('标题')#根据标题内容定位
page.getByTestID('test')#根据data-testid属性定位
#xpath定位
page.loactor('//input[@id="kw"]')#f放入xpath表达式就可以
```
拥有role的标签
| HTML 标签(写法) | 默认/隐式 role | 能否用 getByRole |
|---|---|---|
<a href> |
link |
|
<area href> |
link |
|
<button> |
button |
|
<input type="button"> |
button |
|
<input type="submit"> |
button |
|
<input type="reset"> |
button |
|
<input type="checkbox"> |
checkbox |
|
<input type="radio"> |
radio |
|
<input type="range"> |
slider |
|
<input type="search"> |
searchbox |
|
<input type="text"> |
textbox |
|
<input type="password"> |
textbox |
|
<input type="email"> |
textbox |
|
<input type="tel"> |
textbox |
|
<input type="url"> |
textbox |
|
<input type="number"> |
spinbutton |
|
<textarea> |
textbox |
|
<select> |
combobox |
|
<select multiple> |
listbox |
|
<option> |
option |
|
<img alt="…"> |
img |
|
<table> |
table |
|
<thead> |
rowgroup |
|
<tbody> |
rowgroup |
|
<tfoot> |
rowgroup |
|
<tr> |
row |
|
<th scope="col"> |
columnheader |
|
<th scope="row"> |
rowheader |
|
<td> |
cell |
|
<ul> |
list |
|
<ol> |
list |
|
<li> |
listitem |
|
<dl> |
term / definition |
|
<dt> |
term |
|
<dd> |
definition |
|
<nav> |
navigation |
|
<main> |
main |
|
<aside> |
complementary |
|
<header> |
banner |
|
<footer> |
contentinfo |
|
<section aria-label="xxx"> |
region |
|
<article> |
article |
|
<dialog>(open 时) |
dialog |
|
<details> |
group |
|
<summary> |
button |
|
<h1>–<h6> |
heading + 级别 |
|
<form> |
form |
|
<fieldset> |
group |
|
<legend> |
无 role,但提供 <fieldset> 的 name |
|
<label> |
无 role | |
<div> |
无 role(除非显式写 role="xxx") |
|
<span> |
无 role | |
<p> |
无 role | |
<i> / <b> / <em> / <strong> |
无 role |
4.缺省等待
在playwright中,各个操作动作都默认包含了一个等待时间,一个步骤的默认等待时间为30s,单条测试的默认最大超时时间也为30s,如果需要修改元素的等待时间也可以手动修改等待时间;
当元素查询超过了等待时间就会抛出超时错误
page.locator('.login').click({timeout:10000})#修改等待时间为100S
page.setDefaultTimeout(2000)#修改所有locator动作的等待时间
5.界面操作
```python
page.locator('.test').inner_text()#获取的单个文本内容,不适用于多个元素的文本
page.locator('.test').all_inner_text()#获取所有文本的内容,返回一个列表,单个元素也可以返回
page.locator('.test').get_attribute('href')#获取元素的属性,方法内填入需要的属性名
page.locator('.test').get_inner_html#
page.locator('.test').click()#操作元素点击
page.locator('.test').dbclick()#操作元素双击
page.locator('.test').fill()#操作输入框写入文本
page.locator('.test').type("hi", delay=100)#逐个字符敲击键盘
page.locator('.test').hover()#操作鼠标悬浮
page.locator('.test').drag_to()#操作拖动元素道另一个元素的位置
```
page.locator('.test').check()/uncheck()#勾选或者取消勾选
page.locator('.test').select_option()#下拉选择框选择
page.locator('.test').set_input_files()#上传文件,方法内传入文件
page.locator('.test').clear()#清空输入框
page.locator('.test').dialog()#监听弹窗
6.网页Page对象操作
```python
#导航
page.goto('www.baiud.com')#操作打开网页
page.reload()#操作刷新网页
page.go_back()#返回上一步
page.forward()#前进一步,如果前一步的话
page.wait_for_load_state('networkkidle')#等待网络空闲
page.wait_for_url()#等待url匹配
获取内容
page.content()#获取整页的html
page.title()#获取网页标题
page.innert_text()#获取可视文本
page.input_value()#获取表单值
注入脚本/样式
page.add_script_tag(content='windows.foo=1')
鼠标键盘
page.mouse.move(100,200)#移动鼠标道制定的位置
page.keyboard.press('enter')#键盘按下回车键
事件监听
page.on('dialog',lambda d:d.accept())#弹窗点击确定
截图/pdf
page.screenshot(path='full.png',full+page=True)#截取整个屏幕
page.locator('#box').screenshot(path='test.png')#截取制定区域的截图
page.pdf(path='page.pdf',format='A4')
设备模拟
page.set_viewport_size({'windows':1280,'height':720})#模拟窗口大小
page.set_suer_agent(''MyBOT/1.0)#模拟用户设备
cookie&本地存储
page.context.add_cookies(["name":"token","value":""123123])#注入cookie
page.contenxt.clear_cookies()#清除浏览器cookies
page.evaluate("localStorage.setItem('theme','dark')")#
iframe=page.frame_locator('#myframe')#切换到frame
iframe.locator('.test').click()#后续操作与普通无异,如果需要继续操作原页面,离开frm作用于就行
窗口切换
with page.expect_event("popup") as popup_info:#检测到页面跳转就把对象存在popup_info中
page.get_by_text('登录').click()#页面跳转
login_page=popup_info.value#获取到新的页面
login_page=wait_for_load_state()#等待新页面网络加载完成
login_page.locator('.test').click()#操作新页面的元素
login_page.close()#关闭新的页面标签
page.bring_to_fromt()#返回原页面
Playwright快速入门的更多相关文章
- 【web自动化测试】Playwright快速入门,5分钟上手
我喜欢Playwright! 这是微软开源的一款非常强大的自动化工具,再过几年,他很有可能取代Selenium在浏览器自动化的通知地位.使用过一段时间,我没有找到很好的中文资料可以参考,导致很多问题无 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- git 在C# 中常用的忽略文件配置
.gitignore文件 .vs *.vssscc obj bin /packages *.vspscc */Properties/PublishProfiles *.log 简易的命令行入门教程: ...
- jq回调函数、jq一个函数执行完毕后再执行另一个函数
jq回调函数.jq一个函数执行完毕后再执行另一个函数 - small-match - 博客园 (cnblogs.com) jq回调函数第一版 复制代码 <!DOCTYPE html> &l ...
- 在 GoRoute 中使用 NavigationBar
前言 在App 中通常会把主要的几个页面放在下方icon,让使用者能够方便操作,这个元件在flutter 中称为BottomNavigationBar. 而GoRouter则是Flutter 官方所提 ...
- RNN实现股价预测
简介 import pandas as pd import numpy as np data = pd.read_csv('zgpa_train.csv') data.head() price = d ...
- link and import
转载 http://www.divcss5.com/rumen/r431.shtml 1.link语法结构<link href="CSSurl路径" rel="s ...
- ETL是什么?浅谈ETL对数据仓库的重要性
在当今数字化浪潮席卷全球的时代,存在着大量的数据孤岛,企业对于数据的重视程度达到了前所未有的高度.有效集成数据也成为企业决策分析过程的重中之重,ETL对数据集成发挥着至关重要的作用.那么,什么是ETL ...
- Rust:axum学习笔记(1) hello world
axum是Rust生态的web框架新秀,虽然项目成立不久,但github上的star数已超2.8k,其底层依赖的是高性能的Tokio,Tokio这货就不多说了,借用知乎<深入浅出Rust异步编程 ...
- .NET SDK 9.0.200引入对SLNX解决方案文件的支持
引言 解决方案文件长期以来一直是.NET和Visual Studio开发体验的重要组成部分,其格式在过去二十多年基本保持不变.最近,Visual Studio解决方案团队推出了一种基于XML的新格式- ...
- JAVA基础-5-类型转换--九五小庞
代码示例: public class Demo2 { public static void main(String[] args) { //类型转换的练习 /** * @param 类型转换从低到高 ...
- 进阶篇:2.2)DFMA设计检查表格的制作方法
本章目的:自己制作DFMA的设计检查表格,逐步完善设计方法. 1.前言 作者在总章的网盘中,有分享自己做的DFMA表格的. 但这份表格永远是不完整的,而且随着公司的不同,这份表格需要做对应的调整. 所 ...