写点什么

零操作,高效下载:利用 Playwright 和 Python 完成文件下载

  • 2024-05-14
    江西
  • 本文字数:1208 字

    阅读完需:约 4 分钟

前言

Playwright 是一个由 Microsoft 开发的跨浏览器自动化测试工具,它提供了强大的功能来模拟用户在浏览器中的操作。Playwright 还可以应用于诸如文件下载等实际场景的测试。本文将介绍如何利用 Playwright 在 Python 中实现文件下载功能。

获取更多技术资料,请点击!

文件下载

文件下载也是我们进行 web 自动化测试时经常需要面对的场景,如果我们使用的是 selenium,会出现无法处理 Windows 系统弹出的对话框的情况,需要借助 autoit 等第三方工具来实现下载功能,playwright 则可以不借助其他工具来实现文件自动下载。


playwright 提供了expect_download()操作来实现文件的下载操作,当浏览器上下文关闭时,所有属于浏览器上下文的下载文件都会被删除。下载开始后会发出下载事件。下载完成后,下载路径可用:


with page.expect_download() as download_info:    page.get_by_text("Download file").click()download = download_info.value# wait for download to completepath = download.path()
复制代码

相关操作

  1. 取消下载


如果下载已经完成或取消,则不会失败。成功取消后,download.failure()将解析为'canceled'


download.cancel()
复制代码


  1. .删除下载的文件


download.delete()
复制代码


  1. 返回下载错误(如果有)


download.failure()
复制代码


  1. 获取下载所属的页面


download.page
复制代码


  1. 下载路径


下载成功,则返回下载文件的路径。如有必要,该方法将等待下载完成。该方法在远程连接时抛出。


download.path()
复制代码


注:下载的文件名是随机 GUID,使用 download.suggested_filename 获取建议的文件名


  1. 将下载复制到用户指定的路径。在下载仍在进行时调用此方法是安全的。如有必要,将等待下载完成。


download.save_as(path)
复制代码


  1. 返回此下载的建议文件名


download.suggested_filename
复制代码


注:通常由浏览器根据 Content-Disposition 响应标头或 download 属性计算得出


  1. 返回下载的 url


download.url
复制代码

实例

我们以下载我们常用的 Python 单元测试框架 pytest 为例,使用 playwright 的代码如下:


from playwright.sync_api import sync_playwright
def run(playwright): browser = playwright.chromium.launch(headless=False) context = browser.new_context(accept_downloads=True) # Open new page page = context.new_page()
page.goto("https://pypi.org/project/pytest/#files") # 点击要下载的文件按钮 with page.expect_download() as download_info: page.click("text=pytest-7.3.1.tar.gz") download = download_info.value path = download.path() download.save_as(path) # 打印保存路径 print(path) # --------------------- context.close() browser.close()with sync_playwright() as playwright: run(playwright)
复制代码


运行脚本,结果如下,我们可以看到,我们正在下载 pytest 的压缩文件。


总结

使用 Playwright 和 Python,我们可以轻松实现文件下载功能,这对于需要大量下载文件的应用程序来说非常实用。

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
零操作,高效下载:利用Playwright和Python完成文件下载_霍格沃兹测试开发学社_InfoQ写作社区