一:什么是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快速入门的更多相关文章

  1. 【web自动化测试】Playwright快速入门,5分钟上手

    我喜欢Playwright! 这是微软开源的一款非常强大的自动化工具,再过几年,他很有可能取代Selenium在浏览器自动化的通知地位.使用过一段时间,我没有找到很好的中文资料可以参考,导致很多问题无 ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  8. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. git 在C# 中常用的忽略文件配置

    .gitignore文件 .vs *.vssscc obj bin /packages *.vspscc */Properties/PublishProfiles *.log 简易的命令行入门教程: ...

  2. jq回调函数、jq一个函数执行完毕后再执行另一个函数

    jq回调函数.jq一个函数执行完毕后再执行另一个函数 - small-match - 博客园 (cnblogs.com) jq回调函数第一版 复制代码 <!DOCTYPE html> &l ...

  3. 在 GoRoute 中使用 NavigationBar

    前言 在App 中通常会把主要的几个页面放在下方icon,让使用者能够方便操作,这个元件在flutter 中称为BottomNavigationBar. 而GoRouter则是Flutter 官方所提 ...

  4. RNN实现股价预测

    简介 import pandas as pd import numpy as np data = pd.read_csv('zgpa_train.csv') data.head() price = d ...

  5. link and import

    转载  http://www.divcss5.com/rumen/r431.shtml 1.link语法结构<link href="CSSurl路径" rel="s ...

  6. ETL是什么?浅谈ETL对数据仓库的重要性

    在当今数字化浪潮席卷全球的时代,存在着大量的数据孤岛,企业对于数据的重视程度达到了前所未有的高度.有效集成数据也成为企业决策分析过程的重中之重,ETL对数据集成发挥着至关重要的作用.那么,什么是ETL ...

  7. Rust:axum学习笔记(1) hello world

    axum是Rust生态的web框架新秀,虽然项目成立不久,但github上的star数已超2.8k,其底层依赖的是高性能的Tokio,Tokio这货就不多说了,借用知乎<深入浅出Rust异步编程 ...

  8. .NET SDK 9.0.200引入对SLNX解决方案文件的支持

    引言 解决方案文件长期以来一直是.NET和Visual Studio开发体验的重要组成部分,其格式在过去二十多年基本保持不变.最近,Visual Studio解决方案团队推出了一种基于XML的新格式- ...

  9. JAVA基础-5-类型转换--九五小庞

    代码示例: public class Demo2 { public static void main(String[] args) { //类型转换的练习 /** * @param 类型转换从低到高 ...

  10. 进阶篇:2.2)DFMA设计检查表格的制作方法

    本章目的:自己制作DFMA的设计检查表格,逐步完善设计方法. 1.前言 作者在总章的网盘中,有分享自己做的DFMA表格的. 但这份表格永远是不完整的,而且随着公司的不同,这份表格需要做对应的调整. 所 ...