playwright原理概述

playwright自动化测试工具,是相较于Selenium自动化测试工具后出现的WEB UI自动化测试工具,帮助快速获取界面元素,构建页面元素定位的编码。
本文系统地介绍了playwright的基础概念,架构,安装过程,编码demo(python实例),常用API,录制脚本的方法以及playwright在无头模式的应用和其与selenium的对比。
简单介绍:
playwright能够普及使用,因为其具有以下优点:
在这里插入图片描述
playwright是由微软开发的Web UI自动化测试工具, 支持的浏览器包括:Chromium, Firefox and WebKit,支持的编码语言包括:Node.js、Python、C# 和 Java语言。

官网https://playwright.dev/

playwright具有以下特点:

一、支持所有主流浏览器并跨平台

支持所有主流浏览器:基于Chromium内核的Google Chrome 和 Microsoft Edge浏览器), WebKit内核的Apple Safari 和 Mozilla Firefox浏览器,不支持IE11。

跨平台:Windows、Linux 和macOS

可用于模拟移动端WEB应用的测试,不支持在真机上测试。

支持无头模式(默认)和有头模式

二、快速可靠的执行

自动等待元素

Playwright基于Websocket协议,可以接受浏览器(服务端)的信号

浏览器上下文并行:单个浏览器实例下创建多个浏览器上下文,每个浏览器上下文可以处理多个页面。

有弹性的元素选择:可以使用文本、可访问标签选择元素。
playwright与selenium使用的协议不同:
selenium使用的是http协议,playwright使用的是websock协议,Playwright使用 Chrome DevTools 协议 (CDP) 与 Chromium 通信。对于Firefox和WebKit,Playwright实现了自己的协议,类似于CDP。一旦触发测试,client端代码将被转换为JSON格式,然后使用websocket 协议发送到服务器。palywright通过单个 websocket 协议连接传达所有请求,该连接将保持不变,直到所有测试执行完成。由于命令是在单个连接上发送的,因此测试失败或不稳定的可能性较小,并且命令可以快速执行。这种架构与Selenium相反,Selenium使用HTTP连接协议,并将每个命令(如浏览器打开,单击,发送密钥或关闭浏览器)作为单独的HTTP请求发送。此外,在Selenium中,服务器和客户端之间的连接将在每次请求后终止,并为下一个请求重新建立。最后划重点:这就是Playwright比selenium快的原因!
websock协议和http协议介绍:
WebSocket协议是H5的提出的在单个TCP协议上进行全双工通信的协议,它允许服务器主动向客户端推送数据,客户端和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输,WebSocket是基于HTTP协议的,借助HTTP协议来完成握手。

WebSocket的工作过程

客户端发送HTTP请求,经过三次握手,建立TCP连接,在HTTP请求里存放WebSocket支持的版本号等信息
服务器接收请求,同样以HTTP协议回应
连接成功,客户端与服务器建立持久性的连接,连接之后客户端和服务器之间就可以随时通讯了,直到其中一方关闭连接
两个协议之间的比较
相同点:
都是基于TCP协议实现的
都使用Request/Response模型进行连接的建立
WebSocket是基于HTTP的,他们的兼容性都很好
在连接的建立过程中对错误的处理方式相同
都可以在网络中传输数据
不同点:
WebSocket是持久连接,而HTTP是短连接,这意味着WebSocket可以在连接建立后保持连接状态,而HTTP需要在每次请求完成后关闭连接。
WebSocket是以ws/wss开头,而HTTP则是以http/https开头
WebSocket是有状态的,而HTTP是无状态的,这意味着WebSocket可以在连接建立后保持状态,而HTTP每次请求都是独立的。
WebSocket连接之后,服务器和客户端可以双向发送数据,而HTTP只能是客户端发起一次请求后,服务器才能返回数据

playwright的安装:
playwright如果基于python环境进行测试的话,就需要先安装python,然后控制台输入pip install playwright
安装Chromium、Firefox、WebKit等浏览器的驱动文件(内置浏览器)

python -m playwright install

playwright脚本编写:

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    page.locator("#kw").click()
    page.locator("#kw").fill("playwright介绍")
    page.locator("#kw").click()
    page.locator("#kw").click()
    page.locator("#kw").click()
    page.locator("#kw").press("ArrowLeft")
    page.locator("#kw").press("ArrowLeft")
    page.locator("#kw").fill("playwright使用介绍")
    page.get_by_role("button", name="百度一下").click()

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


with sync_playwright() as playwright:
    run(playwright)

playwright元素定位的方法还是以往的8大定位方法,不过相比较selenium在写法上有区别:详细定位方法之前文章整理过https://blog.youkuaiyun.com/qqlovelinlin/article/details/138997908,可以看这个文章

playwright 和selenium比较:
playwright比selenium快,但是不适用于旧版浏览器和设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值