大家好,我是阿萨。 Web 页面测试过程中下载非常常见。那如何写下载的测试用例呢?对于每一个由页面下载的附件,page.on("download")事件都会被触发出来。所有这些附件都被下载到一个临时文件夹中。你可以使用事件中的Download对象获得下载的URL、文件系统路径和有效载荷流。
你可以使用browser_type.launch()中的downloads_path选项来指定下载文件的保存位置。
注意
当产生这些文件的浏览器上下文关闭时,下载的文件会被删除。
这里是处理文件下载的最简单方法。
同步:
# 开始等待下载with page.expect_download() as download_info:# 执行启动下载的动作 page.get_by_text("Download file").click()# 等待下载开始download = download_info.value# 等待下载过程的完成print(download.path())# 将下载的文件保存在某处download.save_as("/path/to/save/download/at.txt")
异步:
# 开始等待下载async with page.expect_download() as download_info:# 执行启动下载的动作await page.get_by_text("Download file").click()download = await download_info.value# 等待下载过程的完成print(await download.path())# 将下载的文件保存在某处download.save_as("/path/to/save/download/at.txt")
如果你不知道是什么启动了下载,你仍然可以处理这个事件。
同步:
page.on("download", lambda download: print(download.path()))
异步
async def handle_download(download):print(await download.path())page.on("download", handle_download)
请注意,处理事件会分叉控制流,使脚本更难阅读。所以最好是下载结束,当前用例就结束,不要添加更多逻辑。