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

前言

说到 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)。

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

  1. from playwright.sync_api import sync_playwright

  2. # 咖啡加剁椒

  3. # blog:https://www.cnblogs.com/yoyoketang/

  4. with sync_playwright() as p:

  5. browser = p.chromium.launch(headless=False) # 启动 chromium 浏览器

  6. page = browser.new_page() # 打开一个标签页

  7. page.goto("https://www.baidu.com") # 打开百度地址

  8. print(page.title()) # 打印当前页面title

  9. browser.close() # 关闭浏览器对象

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

以下是异步运行方式

  1. import asyncio

  2. from playwright.async_api import async_playwright

  3. # 咖啡加剁椒

  4. # blog:https://www.cnblogs.com/yoyoketang/

  5. async def main():

  6. async with async_playwright() as p:

  7. browser = await p.chromium.launch(headless=False)

  8. page = await browser.new_page()

  9. await page.goto("https://www.baidu.com")

  10. print(await page.title())

  11. await browser.close()

  12. asyncio.run(main())

headless 模式

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

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

  1. from playwright.sync_api import sync_playwright

  2. # 咖啡加剁椒

  3. # blog:https://www.cnblogs.com/yoyoketang/

  4. with sync_playwright() as p:

  5. browser = p.chromium.launch() # 启动 chromium 浏览器

  6. page = browser.new_page() # 打开一个标签页

  7. page.goto("https://www.baidu.com") # 打开百度地址

  8. print(page.title()) # 打印当前页面title

  9. browser.close() # 关闭浏览器对象

关于等待

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

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

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

使用示例

  1. from playwright.sync_api import sync_playwright

  2. # 咖啡加剁椒

  3. # blog:https://www.cnblogs.com/yoyoketang/

  4. with sync_playwright() as p:

  5. browser = p.chromium.launch(headless=False)

  6. page = browser.new_page()

  7. page.goto("https://www.baidu.com")

  8. print(page.title())

  9. page.fill('#kw', "上海-悠悠博客")

  10. page.click('#su')

  11. browser.close()

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

time.sleep() 不再使用

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

  1. from playwright.sync_api import sync_playwright

  2. # 咖啡加剁椒

  3. # blog:https://www.cnblogs.com/yoyoketang/

  4. with sync_playwright() as p:

  5. browser = p.chromium.launch(headless=False, slow_mo=1000)

  6. page = browser.new_page()

  7. page.goto("https://www.baidu.com")

  8. print(page.title())

  9. # 等待5秒

  10. page.wait_for_timeout(5000)

  11. page.fill('#kw', "上海-悠悠博客")

  12. page.click('#su')

  13. browser.close()

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

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值