写点什么

无需手动操作:利用 Playwright 自动上传文件

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

    阅读完需:约 5 分钟

前言

Playwright 是一个由 Microsoft 开发的自动化测试工具,它提供了跨浏览器的自动化测试能力,包括 Chrome、Firefox 和 Safari。除了测试之外,Playwright 还可以用于执行浏览器操作,例如模拟用户行为来实现文件上传功能。在本文中,我们将使用 Playwright 和 Python 实现自动上传文件的功能,这对于那些需要大量上传文件的应用程序来说尤为实用。

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

文件上传

playwright 提供了locator.set_input_files()方法选择要上传的输入文件,它期望第一个参数指向 <input > 的输入元素"file",数组中可以传递多个文件,如果某些文件路径是相对的,则它们将相对于当前工作目录进行解析。空数组清除所选文件。


# 选择一个文件page.get_by_label("Upload file").set_input_files('myfile.pdf')
# 选择多个文件page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])
# 移除所有文件page.get_by_label("Upload file").set_input_files([])
复制代码


如果没有输入元素(它是动态创建的),可以使用 page.on("filechooser") 事件或在您的操作中使用相应的等待方法:


with page.expect_file_chooser() as fc_info:    page.get_by_label("Upload file").click()file_chooser = fc_info.valuefile_chooser.set_files("myfile.pdf")
复制代码


相关操作:


  • file_chooser.element 返回与此文件选择器关联的输入元素

  • file_chooser.is_multiple() 返回此文件选择器是否接受多个文件

  • file_chooser.page 返回此文件选择器所属的页面


设置与此选择器关联的文件输入的值。如果其中一些 filePaths 是相对路径,那么它们将相对于当前工作目录进行解析。对于空数组,清除所选文件


file_chooser.set_files(files)file_chooser.set_files(files, **kwargs)
复制代码


相关参数


  • files pathlib.Path

  • no_wait_after 启动导航的操作正在等待这些导航发生并等待页面开始加载。您可以通过设置此标志来选择退出等待。您仅在特殊情况下才需要此选项,例如导航到无法访问的页面。默认为 false.

  • timeout 以毫秒为单位的最长时间,默认为 30 秒,传递 0 以禁用超时,可以使用browser_context.set_default_timeout()page.set_default_timeout()方法更改默认值

实例

下面我们分情况来介绍 playwright 上传文件的方法。


  1. input 输入框,并且类型是type="file",如下图所示:



我们可以直接定位输入框,用 set_input_files('myfile.pdf') 方法上传文件路径,类似于 selenium 的 send_keys('文件路径.xx')


    page.goto("*****l")
page.get_by_label("文件名称").fill("xxxx") # 不点开文件框的情况下 page.get_by_label("选择文件").set_input_files('xxx.png')
复制代码


  1. 不是 input 输入框,必须点开文件框的情况(selenium 上没法实现的操作)


可以使用page.expect_file_chooser() 监听到弹出框,在弹出框上输入文件路径,代码如下:


with page.expect_file_chooser() as fc_info:        page.get_by_label("选择文件").click()    page.pause()    file_chooser = fc_info.value    file_chooser.set_files(path)
复制代码


在运行过程中你是感知不到文件选项框弹出来的


异步代码示例:


async with page.expect_file_chooser() as fc_info:    await page.get_by_text("Upload file").click()file_chooser = await fc_info.valueawait file_chooser.set_files("myfile.txt")
复制代码

总结

使用 Playwright 和 Python 可以轻松实现文件自动上传功能,这对于需要大量上传文件的应用程序来说是非常实用的。

用户头像

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

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

评论

发布
暂无评论
无需手动操作:利用 Playwright 自动上传文件_霍格沃兹测试开发学社_InfoQ写作社区