前言

说到 web 自动化,大家最熟悉的就是 selenium 了,selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe, 但这3个都需要掌握 JavaScript 语言,所以只是少部分人在用。
2020年微软开源一个 UI 自动化测试工具 Playwright, 支持 Node.js、Python、C# 和 Java 语言。

为什么要学 Playwright ?

selenium 在国内普及程度非常高,说到 web 自动化很多人第一个就会想到 selenium,它的出现确实是给整个行业带来了很多的影响。
支持多语言,开源的框架,可以兼容多种浏览器,上手非常容易。

那么现在微软推出的 Playwright 到底有没必要去学呢?先看下官方介绍https://playwright.dev/python/

跨浏览器和平台

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

稳定性

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

运行机制

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

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

完全隔离-快速执行

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

强大的工具

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

环境准备

Playwright 是专门为满足端到端测试的需要而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行本地测试或在 CI 上进行测试.

python 版本要求 python3.7+ 版本。

安装 playwright:

pip install playwright

安装所需的浏览器 chromium,firefox 和 webkit:

playwright install

仅需这一步即可安装所需的浏览器,并且不需要安装驱动包了(解决了selenium启动浏览器,总是要找对应驱动包的痛点)

简单使用

安装后,您可以在 Python 脚本中使用 Playwright,并启动 3 种浏览器中的任何一种(chromium,firefox和webkit)。

启动浏览器并打开百度页面

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/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())                    # 打印当前页面titlebrowser.close()                        # 关闭浏览器对象

Playwright 支持2种运行方式:同步和异步。如果您的现代项目使用asyncio,您应该使用 async API:

以下是异步运行方式

import asyncio
from playwright.async_api import async_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/async def main():async with async_playwright() as p:browser = await p.chromium.launch(headless=False)page = await browser.new_page()await page.goto("https://www.baidu.com")print(await page.title())await browser.close()asyncio.run(main())

headless 模式

默认情况下,Playwright 以无头模式运行浏览器。要查看浏览器 UI,请headless=False在启动浏览器时传递标志。

headless 无头模式运行浏览器示例:

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/with sync_playwright() as p:browser = p.chromium.launch()          # 启动 chromium 浏览器page = browser.new_page()              # 打开一个标签页page.goto("https://www.baidu.com")     # 打开百度地址print(page.title())                    # 打印当前页面titlebrowser.close()                        # 关闭浏览器对象

关于等待

Playwright 打开浏览器运行脚本的速度那就是一个字:快!

您还可以用来slow_mo (单位是毫秒)减慢执行速度。它的作用范围是全局的,从启动浏览器到操作元素每个动作都会有等待间隔,方便在出现问题的时候看到页面操作情况。

chromium.launch(headless=False, slow_mo=50)

使用示例

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/with sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto("https://www.baidu.com")print(page.title())page.fill('#kw', "上海-悠悠博客")page.click('#su')browser.close()

运行后会发现每个操作都会有间隔时间。

time.sleep() 不再使用

Playwright 在查找元素的时候具有自动等待功能,如果你在调试的时候需要使用等待,你应该使用page.wait_for_timeout(5000) 代替 time.sleep(5)并且最好不要等待超时。

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/with sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000)page = browser.new_page()page.goto("https://www.baidu.com")print(page.title())# 等待5秒page.wait_for_timeout(5000)page.fill('#kw', "上海-悠悠博客")page.click('#su')browser.close()

请使用 wait( wait_for_timeout) 方法而不是time模块。这是因为我们内部依赖于异步操作,并且在使用时time.sleep(5)无法正确处理它们。

python+playwright 学习-1.环境准备与快速开始相关推荐

  1. python+playwright 学习-10.pytest-playwright插件编写测试用例

    前言 pytest-playwright插件完美的继承了pytest 用例框架和playwright基础使用的封装,基本能满足工作中的常规需求了,不需要我们再做额外的插件开发. pytest-play ...

  2. python+playwright 学习-6.截图使用

    前言 playwright 除了可以截取当前屏幕,还可以截长图,也可以对某个元素截图,这点非常棒. screenshot 截图 这是捕获屏幕截图并将其保存到文件中的快速方法: page.screens ...

  3. python+playwright 学习-17.模拟手机浏览器测试

    前言 使用 Playwright,您可以在任何浏览器上测试您的应用程序,也可以模拟真实设备,例如手机或平板电脑. 设置手机模式 只需配置您想要模拟的设备,Playwright 就会模拟浏览器行为,例如 ...

  4. python+playwright 学习-32 启动Google Chrome 或 Microsoft Edge浏览器

    前言 playwright 默认会下载 chromium,firefox 和 webkit 三个浏览器,目前支持通过命令下载的浏览器有:chromium.chrome.chrome-beta.msed ...

  5. 【物体检测快速入门系列 | 03】Windows部署Docker GPU深度学习开发环境

    这是机器未来的第3篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/124815912 1. 概述 在<物体检测快速入门 ...

  6. python469教程_从入门到精通真不难:Python最佳学习路线(视频学习教程)分享

    随着人工智能时代的来临, Python开始崭露头角并迅速吸引了人们的广泛关注.很多人想要从事Python开发,但需要学什么内容.怎么快速学习呢?接下来就给大家分享 Python最佳学习路线.帮你快速找 ...

  7. python培训的课时是多久_如何快速学习python,学习python的最短时间是多久?

    在我们即将迈入python培训课堂之前,你肯定很关注学习python的最短时间是多久,怎样才能快速学习python等问题,今天就为大家详细地回答一下这个问题,希望对你有所帮助! 这篇文章将为你的自学之 ...

  8. 快速搭建Python+Selenium+Sublime 自动化测试环境方法

    随着业内越来越多的公司对自动化测试的大力推行,对测试人员能够使用自动化工具的要求也随之增多.为了能让更多的同事在学习selenium的初期,能够顺利的迈出第一步,即可以通过代码操作selenium d ...

  9. Python深度学习-快速指南

    Python深度学习-快速指南 (Python Deep Learning - Quick Guide) Python深度学习-简介 (Python Deep Learning - Introduct ...

最新文章

  1. mysql update 并发 慢_MySQL跑在CentOS 6 和 7上的性能比较
  2. 005_控制器和动作
  3. 再也不用担心面试官问你HashCode和equals了
  4. Currency determination callback
  5. ubuntu 18 Cannot find installed version of python-django or python3-django.
  6. 使用函数进行邮件发送的示例
  7. oneplus 驱动_OnePlus投放CyanogenMod,Raspberry Pi 2驱动的机器人等
  8. 阿拉伯数字转换成中文大写
  9. matlab 符号表,MATLAB——matlab特殊符号表【转载】
  10. 一路风雨走过来:那些我亲密接触过的项目
  11. Openlayer:学习笔记之交互
  12. ASP.Net Mvc 发布网站 (样式+图片问题)
  13. 水箱液位计算机控制系统设计,水箱水位PLC自动控制系统的设计_吕宁.pdf
  14. ApacheCN 活动汇总 2019.8.9
  15. python怎么导入大小字母_python遍历小写英文字母的方法
  16. 金融科技赋能 互融云手机回租系统 实现资产全流程在线运营管理
  17. 符合应急监管要求的危化品企业双重预防数字化系统
  18. 某机主存容量为4Nx16位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式
  19. Logstash:Logstash translate 过滤器简介
  20. ai如何做倒角和圆角_在ai中怎么用小白工具把矩形的直角改成圆角?,你值得一看的技巧...

热门文章

  1. GPS周 北斗周 年月日转换
  2. Java8 Stream(6)List集合排序 多字段排序 Null值排序
  3. 哈工大计算机系统大作业: 程序人生-Hello’s P2P/ hello 的一生
  4. [FAQ10927][USB serial number客制化][系列6]:能否实现adb devices的序列号,usb serialnumber, cts device ID,SN一致?
  5. java.lang.NoClassDefFoundError与aspectjrt、aspectjweaver的联系
  6. 使命召唤手游需要的配置及要求
  7. 解决51单片机学习过程中mac环境下虚拟机不能安装ch341驱动的问题
  8. 非正常卸载后重装软件无法安装的问题
  9. 英国女王在白金汉宫为比尔·盖茨授勋
  10. 五项按键控制LED灯亮灭