如何用Python Playwright实现自动化测试中的文件上传?
- 内容介绍
- 文章标签
- 相关推荐
你有没有遇到过这种情况:明明代码写得没问题,但就是上传不了文件?特别是当你在做自动化测试的时候,文件上传这个环节总是让人头大。今天我们就来聊聊,如何用Python Playwright来搞定这个“小麻烦”。
文件上传的两种方式
在Playwright中, 文件上传其实有两种方式:一种是针对input控件的,另一种是针对非input控件的。听起来是不是有点绕?别急,我们慢慢来。

input控件上传
input控件上传是最常见的一种方式。你只需要找到那个input元素, 然后调用set_input_files方法, 说真的... 把文件路径传进去,就OK了。比如:
# 定位input控件并上传文件
page.locator.set_input_files
这种方式简单粗暴,适用于大多数场景。但如果你遇到的不是input控件,那就得用第二种方式了,希望大家...。
非input控件上传稍微复杂一点。你需要监听filechooser事件,然后在点击上传按钮后手动选择文件。代码大概是这样的:,一句话。
with page.expect_file_chooser as fc_info:
page.locator.click # 点击上传按钮
file_chooser = fc_info.value
file_chooser.set_files
这种方式虽然麻烦一点, 但胜在通用性强,几乎可以应对所有上传场景。
一个让人抓狂的小插曲
别担心... 宏哥在实际操作中发现了一个奇怪的现象:明明他用的是非input控件的上传方式,但代码却莫名其妙地成功了。这是怎么回事呢?
经过一番排查,宏哥发现,原来他定位的元素虽然是个按钮,但背后其实是个input控件。也就是说他以为自己在用非input的方式上传,其实吧却误打误撞用了input的方式。这就解释了为什么两种方法都能成功,这玩意儿...。
所以 大家在写代码的时候,一定要搞清楚自己定位的元素到底是什么类型的, 无语了... 不然很容易被“假象”误导。
常见问题及解决方案
绝了... 在文件上传的过程中, 宏哥还遇到了一些其他问题,比如:
- 文件选择对话框不弹出这种情况通常是主要原因是你定位的元素不是真正的上传按钮,或者页面有其他逻辑阻止了对话框的弹出。
- 上传后页面无响应可能是文件上传成功了但页面没有自动刷新或跳转。这时候你可以手动加个等待时间,或者检查一下上传后的回调逻辑。
- 文件路径错误这个是最常见的低级错误。上传文件时一定要确保文件路径是正确的,最好是使用绝对路径。
实战演练:百度识图上传
为了让大家更好地理解,宏哥这里用百度识图的上传功能来演示一下。打开百度首页,点击搜索框左边的照相机图标,然后选择“上传图片”,就可以进行图片识别了。
我们来模拟一下这个过程:
from playwright.sync_api import sync_playwright
def run:
browser = playwright.chromium.launch
context = browser.new_context
page = context.new_page
page.goto
# 点击照相机图标
page.locator.click
# 等待一下让页面加载完成
page.wait_for_timeout
# 上传图片
with page.expect_file_chooser as fc_info:
page.locator.click
file_chooser = fc_info.value
file_chooser.set_files
# 等待上传完成
page.wait_for_timeout
browser.close
with sync_playwright as playwright:
run
这段代码大体上涵盖了我们前面讲的所有知识点。你可以根据自己的需求,稍作修改。
工具对比:Playwright vs Selenium
换句话说... 说到自动化测试,就不得不提Selenium。宏哥之前在做Java+Selenium系列时文件上传可是费了不少劲。比一比的话,Playwright在文件上传这块要友好得多。
| 工具 | input控件上传 | 非input控件上传 | 易用性 | 稳定性 |
|---|---|---|---|---|
| Playwright | 简单 | 中等 | 高 | 高 |
| Selenium | 中等 | 复杂 | 中 | 中 |
从表格可以看出,Playwright在文件上传这块确实比Selenium要省心不少。当然Selenium也有它的优势, 性价比超高。 比如生态更成熟,资料更多。但如果你主要做的是Web自动化测试,Playwright绝对值得一试。
文件上传虽然看起来是个小功能,但在自动化测试中却是个大问题。掌握了Playwright的这两种上传方式,大体上可以应对90%的场景。 归根结底。 当然实际操作中还会遇到各种奇奇怪怪的问题,这就需要大家多动手、多实践,慢慢积累经验了。
好了今天就聊到这里。如果你觉得这篇文章对你有帮助, 纯属忽悠。 别忘了点个赞、分享给你的朋友。我们下期再见!
你有没有遇到过这种情况:明明代码写得没问题,但就是上传不了文件?特别是当你在做自动化测试的时候,文件上传这个环节总是让人头大。今天我们就来聊聊,如何用Python Playwright来搞定这个“小麻烦”。
文件上传的两种方式
在Playwright中, 文件上传其实有两种方式:一种是针对input控件的,另一种是针对非input控件的。听起来是不是有点绕?别急,我们慢慢来。

input控件上传
input控件上传是最常见的一种方式。你只需要找到那个input元素, 然后调用set_input_files方法, 说真的... 把文件路径传进去,就OK了。比如:
# 定位input控件并上传文件
page.locator.set_input_files
这种方式简单粗暴,适用于大多数场景。但如果你遇到的不是input控件,那就得用第二种方式了,希望大家...。
非input控件上传稍微复杂一点。你需要监听filechooser事件,然后在点击上传按钮后手动选择文件。代码大概是这样的:,一句话。
with page.expect_file_chooser as fc_info:
page.locator.click # 点击上传按钮
file_chooser = fc_info.value
file_chooser.set_files
这种方式虽然麻烦一点, 但胜在通用性强,几乎可以应对所有上传场景。
一个让人抓狂的小插曲
别担心... 宏哥在实际操作中发现了一个奇怪的现象:明明他用的是非input控件的上传方式,但代码却莫名其妙地成功了。这是怎么回事呢?
经过一番排查,宏哥发现,原来他定位的元素虽然是个按钮,但背后其实是个input控件。也就是说他以为自己在用非input的方式上传,其实吧却误打误撞用了input的方式。这就解释了为什么两种方法都能成功,这玩意儿...。
所以 大家在写代码的时候,一定要搞清楚自己定位的元素到底是什么类型的, 无语了... 不然很容易被“假象”误导。
常见问题及解决方案
绝了... 在文件上传的过程中, 宏哥还遇到了一些其他问题,比如:
- 文件选择对话框不弹出这种情况通常是主要原因是你定位的元素不是真正的上传按钮,或者页面有其他逻辑阻止了对话框的弹出。
- 上传后页面无响应可能是文件上传成功了但页面没有自动刷新或跳转。这时候你可以手动加个等待时间,或者检查一下上传后的回调逻辑。
- 文件路径错误这个是最常见的低级错误。上传文件时一定要确保文件路径是正确的,最好是使用绝对路径。
实战演练:百度识图上传
为了让大家更好地理解,宏哥这里用百度识图的上传功能来演示一下。打开百度首页,点击搜索框左边的照相机图标,然后选择“上传图片”,就可以进行图片识别了。
我们来模拟一下这个过程:
from playwright.sync_api import sync_playwright
def run:
browser = playwright.chromium.launch
context = browser.new_context
page = context.new_page
page.goto
# 点击照相机图标
page.locator.click
# 等待一下让页面加载完成
page.wait_for_timeout
# 上传图片
with page.expect_file_chooser as fc_info:
page.locator.click
file_chooser = fc_info.value
file_chooser.set_files
# 等待上传完成
page.wait_for_timeout
browser.close
with sync_playwright as playwright:
run
这段代码大体上涵盖了我们前面讲的所有知识点。你可以根据自己的需求,稍作修改。
工具对比:Playwright vs Selenium
换句话说... 说到自动化测试,就不得不提Selenium。宏哥之前在做Java+Selenium系列时文件上传可是费了不少劲。比一比的话,Playwright在文件上传这块要友好得多。
| 工具 | input控件上传 | 非input控件上传 | 易用性 | 稳定性 |
|---|---|---|---|---|
| Playwright | 简单 | 中等 | 高 | 高 |
| Selenium | 中等 | 复杂 | 中 | 中 |
从表格可以看出,Playwright在文件上传这块确实比Selenium要省心不少。当然Selenium也有它的优势, 性价比超高。 比如生态更成熟,资料更多。但如果你主要做的是Web自动化测试,Playwright绝对值得一试。
文件上传虽然看起来是个小功能,但在自动化测试中却是个大问题。掌握了Playwright的这两种上传方式,大体上可以应对90%的场景。 归根结底。 当然实际操作中还会遇到各种奇奇怪怪的问题,这就需要大家多动手、多实践,慢慢积累经验了。
好了今天就聊到这里。如果你觉得这篇文章对你有帮助, 纯属忽悠。 别忘了点个赞、分享给你的朋友。我们下期再见!

