《最新出炉》Python+Playwright自动化测试-1-环境准备与搭建

news2024/9/21 11:13:39

一.简介

有很多人问能不能介绍一下Playwright这款自动化神器的相关知识,现在网上的资料太少了。其实在各大博客和公众号也看到过其相关的介绍和讲解。要不就是不全面、不系统,要不就是系统全面但是人家是收费的。当然了接下来也可能介绍的不全面或者不系统,能力有限望大家理解。

二.Playwright 是什么

微软在 2020 年初开源的新一代自动化测试工具,它的功能类似于 Selenium、Pyppeteer 等,都可以驱动浏览器进行各种自动化操作。它的功能也非常强大,对市面上的主流浏览器都提供了支持,API 功能简洁又强大。虽然诞生比较晚,但是现在发展得非常火热。
Playwright 支持大部分的语言,Node.js,Python,Java,.net,并且支持谷歌,火狐浏览器,WebKit,对于移动端也支持,可以在 Windows、Linux、MacOs 等机器上运行。脚本执行支持同步或者异步的方式。Playwright是一个开源的自动化测试工具,用于测试网页应用。它可以操控Chromium(用于Chrome、Edge等)、Firefox和WebKit(用于Safari)等主流浏览器,使我们能在不同浏览器中执行自动化测试。
官方网站:Installation | Playwright
Github源码:GitHub - microsoft/playwright-python: Python version of the Playwright testing and automation library.

说到UI自动化,可能大家和我一样,主要是用Selenium。毕竟Selenium可是UI自动化方面的王者。而且Selenium上手很快,使用者广泛,社区活跃,遇到问题随时可以找到一大堆相关的网页给你提供帮助。

那既然这样,为什么新出的这个Playwright还能掀起一阵热潮呢?

一方面这是IT技术领域的一个趋势,从业人需要时刻关注业内的新技术,新方向,不断提升自己的能力,或者给公司,团队带来新的idea,这样才能不断在职业生涯中稳步向前。另一方面,Selenium虽然有着各种突出的优势,但是弊端也很明显:

它依赖多种不同的driver,根据浏览器的不断更新,就要不断去维护这些driver,以及处理相应的适用性问题。比如chromedriver升级到适用chrome version: 88,关于之前Ctrl+a的调用就不支持了,需要调整相应code。

2.1稳定性不够好

Selenium本身提供的方法,并不能保证test case稳定通过,因为element状态有时候并不可用,这个时候的actions肯定会有问题。

虽然使用人员会封装Selenium方法,加入一些等待,甚至是元素状态轮询判断,但是稳定性增加的同时,运行时间也同时大幅增加。

2.2录制代码不稳定

因为Selenium IDE录制的代码是基于coordinate 或者DOM 层级结构,所以极其不稳定,也就导致IDE基本无人问津。

Selenium的劣势,或许也就是Playwright能够快速崛起的抓住的机会吧。我们来看看Playwright到底有什么魔力,能撼动Selenium的王者地位?

首先,Playwright同样适用于多浏览器、多语言,这样对于准备过渡到这个工具的用户是非常友好的。

其次,Playwright可以使用基于css、xpath、text这些常用的元素定位方式进行录制生成代码,能大幅度的减少写代码的时间,同时代码稳定性也可以保证。

再有就是playwright使用api方式操作浏览器内核,速度快,而且可以和浏览器双向沟通,元素操作可以在元素ready的情况下进行,稳定性很好。

最后,支持UI和非UI方式运行,节省了debug、 run时间。

2.3playwright原理

Playwright通过直接控制浏览器引擎(如Chromium和Firefox)来执行测试,而不是通过浏览器界面。这意味着Playwright可以直接操控浏览器引擎,执行更快速和稳定的测试。Playwright使用浏览器引擎自带的JavaScript执行环境和Web API来控制浏览器。

三.Playwright 的优势

先和我看一下官方最新介绍Fast and reliable end-to-end testing for modern web apps | Playwright Python,我将其简单翻译一下如下:

3.1跨浏览器和平台

  • 跨浏览器。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。
  • 跨平台。在 Windows、Linux 和 macOS 上进行本地测试或在 CI 上进行无头或有头测试。
  • 跨语言。在TypeScript、JavaScript、Python、.NET、Java中使用 Playwright API 。
  • 测试移动网络。适用于 Android 和 Mobile Safari 的 Google Chrome 浏览器的本机移动仿真。相同的渲染引擎适用于您的桌面和云端。
     

3.2稳定性

  • 自动等待。Playwright 在执行动作之前等待元素可操作。它还具有一组丰富的内省事件。两者的结合消除了人为超时的需要——这是不稳定测试的主要原因。
  • Web优先断言。Playwright 断言是专门为动态网络创建的。检查会自动重试,直到满足必要的条件。
  • 追踪。配置测试重试策略,捕获执行跟踪、视频、屏幕截图以消除薄片。

3.3运行机制

浏览器在不同进程中运行属于不同来源的 Web 内容。Playwright 与现代浏览器架构保持一致,并在进程外运行测试。这使得 Playwright 摆脱了典型的进程内测试运行器的限制。

  • 多重一切。测试跨越多个选项卡、多个来源和多个用户的场景。为不同的用户创建具有不同上下文的场景,并在您的服务器上运行它们,所有这些都在一次测试中完成。
  • 可信事件。悬停元素,与动态控件交互,产生可信事件。Playwright 使用与真实用户无法区分的真实浏览器输入管道。
  • 测试框架,穿透 Shadow DOM。Playwright 选择器穿透影子 DOM 并允许无缝地输入帧。

3.4完全隔离-快速执行

  • 浏览器上下文。Playwright 为每个测试创建一个浏览器上下文。浏览器上下文相当于一个全新的浏览器配置文件。这提供了零开销的完全测试隔离。创建一个新的浏览器上下文只需要几毫秒。
  • 登录一次。保存上下文的身份验证状态并在所有测试中重用它。这绕过了每个测试中的重复登录操作,但提供了独立测试的完全隔离。

3.5强大的工具

  • 代码生成器。通过记录您的操作来生成测试。将它们保存为任何语言。
  • 调试。检查页面、生成选择器、逐步执行测试、查看点击点、探索执行日志。
  • 跟踪查看器。捕获所有信息以调查测试失败。Playwright 跟踪包含测试执行截屏、实时 DOM 快照、动作资源管理器、测试源等等。

四.环境准备

4.1操作系统

1.我的环境是Windows 10版本 64位系统(32位的同学自己想办法哦,当然了现在32位的一般很少见),如下图所示:

 4.2Python版本 

Python版本:python:3.7,如下图所示:

 五.环境搭建 

Playwright 是专门为满足端到端测试的需要而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit(Safari 的浏览器引擎)和 Firefox。
在 Windows、Linux 和 macOS 上进行本地测试或在 CI 上进行测试,无头或者有头的本地移动模拟测试。

5.1Python版本

python 版本要求 python3.7+ 版本。(最好用3.7,我试了下3.8有兼容问题)

5.2安装Playwright 

1.和安装其他依赖库一样,直接使用命令安装即可。可能要稍等一会....pip安装时会自动下载浏览器驱动。

pip install playwright

 2.出现如下图所示界面表示安装成功。 

 5.3安装所需的浏览器 

1.安装所需的浏览器 chromium,firefox 和 webkit,安装时会自动下载浏览器(仅需这一步即可安装所需的浏览器,并且不需要安装驱动包了(解决了selenium启动浏览器,总是要找对应浏览器版本的驱动包,有时候浏览器自动更新升级了,还得再次下载对应驱动的的这一头疼的事)。

playwright install  # 安装支持的浏览器:cr, chromium, ff, firefox, wk 和 webkit

 2.安装指定的chromium浏览器使用如下命令即可。

playwright install chromium # 安装指定的chromium浏览器

3.安装时会自动下载浏览器依赖,windows系统在%USERPROFILE%\AppData\Local\ms-playwright 路径下(可以通过Docs命令窗口查看这个安装路径)。

  4.如果安装报错,提示缺少Visual C++, 解决办法:安装Microsoft Visual C++ Redistributable 2019:https://aka.ms/vs/16/release/VC_redist.x64.exe直接点击就可以下载了,下载后直接安装即可。

到此,Python+Playwright的环境就搭建完成了。下边看一下如何使用。

六.牛刀小试

在 Python 脚本中使用 Playwright,并启动和关闭 3 种浏览器(chromium,firefox和webkit)。

6.1chromium

启动chromium浏览器并打开百度页面,获取页面的title,在搜索框输入启动的浏览器名字,最后截图,关闭浏览器。

1.参考代码

# coding=utf-8🔥
 
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-05-17
@author: 小兮说测试   
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-1-环境准备与搭建
'''
 
# 3.导入模块
 
from playwright.sync_api import sync_playwright
 
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)          # 启动 chromium 浏览器
    page = browser.new_page()              # 打开一个标签页
    page.goto("https://www.baidu.com")     # 打开百度地址
    print(page.title())                    # 打印当前页面title
    page.click("input[name=\"wd\"]")       # 点击输入框
    page.fill("input[name=\"wd\"]", "chromium")  # 在输入框输入浏览器名字
    page.screenshot(path=f'example-{p.chromium.name}.png')
    browser.close()                        # 关闭浏览器对象

 2.运行代码

 6.2firefox

启动firefox浏览器并打开百度页面,获取页面的title,截图。

1.参考代码

# coding=utf-8🔥
 
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-05-17
@author:小兮说测试
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-1-环境准备与搭建
'''
 
# 3.导入模块
 
from playwright.sync_api import sync_playwright
 
with sync_playwright() as p:
    browser = p.firefox.launch(headless=False)          # 启动 chromium 浏览器
    page = browser.new_page()              # 打开一个标签页
    page.goto("https://www.baidu.com")     # 打开百度地址
    print(page.title())                    # 打印当前页面title
    page.click("input[name=\"wd\"]")       # 点击输入框
    page.fill("input[name=\"wd\"]", "chromium")  # 在输入框输入浏览器名字
    page.screenshot(path=f'example-{p.firefox.name}.png')  #使用浏览器名字命名截图
    browser.close()                        # 关闭浏览器对象

2.运行代码

6.3webkit 

启动webkit浏览器并打开百度页面,获取页面的title,截图。

1.参考代码

# coding=utf-8🔥
 
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-05-17
@author: 小兮说测试
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-1-环境准备与搭建
'''
 
# 3.导入模块
 
from playwright.sync_api import sync_playwright
 
with sync_playwright() as p:
    browser = p.webkit.launch(headless=False)          # 启动 chromium 浏览器
    page = browser.new_page()              # 打开一个标签页
    page.goto("https://www.baidu.com")     # 打开百度地址
    print(page.title())                    # 打印当前页面title
    page.click("input[name=\"wd\"]")       # 点击输入框
    page.fill("input[name=\"wd\"]", "webkit")  # 在输入框输入浏览器名字
    page.screenshot(path=f'example-{p.webkit.name}.png')  #使用浏览器名字命名截图
    browser.close()                        # 关闭浏览器对象

2.运行代码

七.小结

7.1实践过程中遇到的问题

1.安装playwright时候,告警提示要升级pip,如下图所示:

WARNING: You are using pip version 21.3.1; however, version 23.1.2 is available.
You should consider upgrading via the 'd:\software\python\python37\python.exe -m pip install --upgrade pip' command.

解决办法:使用如下命令进行安全升级:

python -m pip install --upgrade pip

2.更新失败,报错没有权限,如下图所示:

 ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: 'd:\\software\\python\\python37\\scripts\\pip.exe'
Consider using the `--user` option or check the permissions.

解决办法:更新失败是因为没有权限,因此给上用户权限,就是加上--user即可。

pip install --upgrade --user pip

3.安装playwright时候,告警错误,本着没啥影响的态度,但看着又十分不爽,我决定解决它!

WARNING: Ignoring invalid distribution -ip (d:\software\python\python37\lib\site-packages)

解决方法:

找到警告信息中报错的目录,然后删掉~开头的文件夹,那种事之前安装插件失败/中途退出,导致插件安装出现异常导致的,虽说警告信息不影响,但是有强迫症 哈哈 。把文件夹删掉就好了。 

7.2浏览器 

前面提到过,Playwright支持所有主流浏览器,下面介绍4种浏览器的启动方法:

# chrome
browser = p.chromium.launch(channel="chrome", headless=False)
# Microsoft Edge
browser = p.chromium.launch(channel="msedge", headless=False)
# firefox
browser = p.firefox.launch(headless=False)
# webkit
browser = p.webkit.launch(headless=False)

7.3习惯问题

如果你不习惯with语句,也可以用start() 和stop() 的方式,但是宏哥建议还是要习惯,因为开发是一个团队,不是一个人。当然了也分情况不能一概而论:

用with 是香,但是,当我们用playwright做爬虫时,尤其是在某个页面长期运行,例如,向下滑动采集评论等操作。这些操作会在同一界面中加载非常多的js文件,如果你有事件监听,那资源占用会更大。最后,with管理器会直接崩溃,显示js内存溢出,难受的一匹,所以推荐第二种使用方法。

# coding=utf-8🔥
 
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-05-18
@author: 小兮说测试
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-1-环境准备与搭建
'''
 
# 3.导入模块
from playwright.sync_api import sync_playwright
 
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com/")
 
browser.close()
playwright.stop()

好了,今天时间也不早了,我就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是压力测试?什么是负载测试?这两个区别是什么?

前言 之前给一个客户做项目时,由于自己对性能测试了解并不深,搞不懂压力测试和负载测试的区别,导致后面还是由负责性能测试的同事来处理,他跟我说了很多关于压力测试和负载测试的区别,现在我总结如下。 压力测试 压…

解决node上传文件乱码问题终极方案

问题描述 今天在菜鸟教程学习node上传文件时遇到了一个中文乱码的问题,文件名包含中文就会显示乱码,上传到服务器的文件名也是乱码。试了两个方法都不行,最后还是问了万能的度娘才解决。 我做了一个非常简单的上传文件的界面, …

Java SE(十二)之多线程

文章目录 概述1.进程&线程2.并行&并发 线程创建方式1.第一种:继承Thread类2.第二种:实现Runnable接口3.Callable、FutureTask接口4.线程创建的三种方式对比 Thread常用方法1.构造器2.设置和获取线程名称3.线程调度4.线程控制5.线程生命周期 线程…

静态路由和默认路由的工作原理

目录 静态路由 静态路由配置 默认(缺省)路由 路由的高级特性 1,递归路由 2,等价路由 3,浮动路由 4,路由汇总 环路问题: 解决方法: 静态路由 在路由器手动添加路由条目 静…

基于深度学习的高精度浣熊检测识别系统(PyTorch+Pyside6+模型)

摘要:基于深度学习的高精度浣熊检测(水牛、犀牛、斑马和大象)识别系统可用于日常生活中或野外来检测与定位浣熊目标,利用深度学习算法可实现图片、视频、摄像头等方式的浣熊目标检测识别,另外支持结果可视化与图片或视…

Spring Boot 集成支付宝、微信等支付平台API

Spring Boot 集成支付宝、微信等支付平台API 在现代的 Web 应用程序开发中,与第三方 API 的集成是非常常见的需求。例如,支付宝、微信等支付平台的支付接口、短信验证码的发送接口、邮件发送接口等。Spring Boot 提供了许多便捷的方式来集成这些第三方 …

Python实战基础17-包

1、pip的安装配置 1.1 pip命令的使用 在安装python时,同时还会安装pip软件,它是python的包管理工具,可以用来查找、下载、安装和卸载python的第三方资源包。 1.2 配置pip 可以直接在终端输入pip命令,如果出错可能会有两个原因…

接口自动化测试实战:JMeter+Ant+Jenkins+钉钉机器人群通知完美结合

目录 前言 一、本地JAVA环境安装配置,安装JAVA8和JAVA17 二、安装和配置Jmeter 三、安装和配置ant 四、jmeter ant配置 五、jenkins安装和配置持续构建项目 文末福利 前言 搭建jmeterantjenkins环境有些前提条件,那就是要先配置好java环境&#…

OS-内存管理-4种内存管理方式(连续分配,页式,段式,段页)。

一,内存管理四种方式。 二,连续分配管理方式。 连续分配方式:为用户分配连续的内存空间。 1.单一连续分配方式 2.固定分区分配方式 3.动态分区分配方式 4.三种连续分配方式的对比。 三,基于页式存储管理。 1.页式 为进一步提高…

【来不及刷题之】32、二分搜索(寻找数,寻找左右边界)

1. 基础二分搜索&#xff1a;寻找一个数 一道很基础的题目&#xff0c;主要注意一下循环条件是 left<right 即可 class Solution {public int search(int[] nums, int target) {int left0;int rightnums.length-1;while(left<right){int midleft(right-left)/2;if(nums…

第二十一章行为性模式—访问者模式

文章目录 访问者模式解决的问题结构实例存在的问题使用场景 拓展动态分派静态分派双分派 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。行为型模…

华为OD机试真题B卷 Java 实现【箱子之形摆放】,附详细解题思路

一、题目描述 要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上&#xff0c;输出箱子的摆放位置&#xff0c;例如&#xff1a;箱子ABCDEFG&#xff0c;空地宽为3。 摆放效果如下图&#xff1a; 则输出结果为&#xff1a; AFG BE CD 二、输入描述 一行…

智能语音交互流程

引言 用该文来讲解语音全流程涉及到的技术&#xff0c;整体语音涉及的交互流程如下图&#xff1a; Part1 唤醒 语音唤醒指的是通过预设的关键词即可将智能硬件从休眠状态唤醒&#xff0c;来执行相应操作。 1.1 交互模式 传统模式 唤醒方式&#xff1a;先唤醒设备&#xff…

重学数据结构与算法

学习数据结构与算法的目的&#xff1a; 优化时间复杂度与空间复杂度 优化时间复杂度与空间复杂度 优化时间复杂度与空间复杂度 教程总纲&#xff1a; 暴力解法(模拟)、算法优化(递归/二分/排序/DP)、时刻转换(数据结构) 1.时间复杂度的核心方法论2.增删查——选取数据结构的基…

MySQL_9 事务机制与隔离机制

目录 一、事务概述 1.定义 : 2.事务和锁 : 二、事务操作 1.MySQL控制台事务的基本操作 : 2.代码演示 : 3.注意事项 : 三、事务的“ACID”特性 : 四、隔离机制 1.介绍 : 2.分类 : 3.常用指令 : 一、事务概述 1.定义 : 事务用于保证数据的一致性&#xff0c;它由一…

python批量实现pdf转换为图片|实现pdf转为jpg/png|实现word批量转pdf|python批量实现word转换为图片

本文介绍了一种使用 Python 脚本来完成这项工作的方法&#xff0c;该脚本基于 PyMuPDF、pdf2image 和 win32com 库实现&#xff0c;可以帮助您快速地将 Word 文档转换为 PDF 文件&#xff0c;并将 PDF 文件转换为 PNG 图片。 一、安装所需的库和软件 在开始使用该脚本之前&am…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(一):概述

AWTK=Toolkit AnyWhere,一款国产免费开源工具,ZLG开发的开源GUI引擎,为嵌入式等系统提供图形界面开发IDE。 随着汽车技术的发展,汽车仪表盘也在快速发展,从最初的机械式到电气式,再到数字化。这次电动化、智能化又一次让汽车仪表出现了飞跃式的发展,再未来,仪表板上可…

04SpringCloud 消息中间件

为什么要使用消息中间件 同步通信&#xff1a;耗时长&#xff0c;受网络波动影响&#xff0c;不能保证高成功率&#xff0c;耦合性高。 同步&#xff0c;异步 并发&#xff1a;一段时间&#xff08;1S&#xff09;多个请求数 并行&#xff1a;时间节点&#xff0c;多个指令…

干接点与湿接点

&#xff08;1&#xff09;干接点的定义 无源开关&#xff1b;具有闭合和断开的2种状态&#xff1b;2个接点之间没有极性&#xff0c;可以互换。 常见的干接点信号有&#xff1a; 1&#xff09;各种开关如&#xff1a;限位开关、行程开关、脚踏开关、旋转开关、温度开关、液…

超越象限:解密 α 碎片的归属问题

文章目录 参考环境α 碎片的归属问题问题概述终边相同角圆心角终边相同角 象限角 描述象限角第一象限角任意象限角 特殊方案问解 叠加坐标系上部下部叠加坐标系 一般方案问解任意角 α分析绘图要领叠加坐标系N-N 参考 项目描述搜索引擎Google 、Bing百度百科首页佟大大还是ETT…