Python中Playwright set_input_files()多文件上传异常问题
解决Playwright上传多文件仅第一个被服务器接收的问题
针对你遇到的Playwright上传两个文件但服务器仅收到第一个的问题,可按以下步骤排查解决:
1. 检查Django视图的文件处理逻辑
这是最常见的原因:如果视图中直接通过request.FILES['file_field_name']获取文件,只会拿到第一个上传的文件。必须使用getlist()方法来获取多个文件:
# 错误写法(仅获取第一个文件) file = request.FILES['my_file_input'] # 正确写法(获取所有上传文件) files = request.FILES.getlist('my_file_input') for file in files: # 处理每个文件
2. 确认HTML输入字段的multiple属性
确保页面中的<input type="file">标签带有multiple属性,否则即使前端能选中多个文件,表单提交时可能只会发送第一个:
<input type="file" name="my_file_input" multiple>
(虽然你手动测试正常,但需确认测试环境下页面渲染的HTML是否包含该属性)
3. 用绝对路径指定文件
使用pathlib构建文件的绝对路径,避免相对路径可能导致的文件找不到问题(即使你试过绝对路径,可再按此方式验证):
from pathlib import Path # 获取测试文件的绝对路径 test_file1 = Path(__file__).parent / "Input1.xlsx" test_file2 = Path(__file__).parent / "Input2.xlsx" # 设置文件输入 file_input = page.locator('input[type="file"]') file_input.set_input_files([test_file1, test_file2])
4. 触发文件输入的change事件
部分前端框架需要监听change事件来同步文件选择状态,设置文件后手动触发该事件:
file_input.set_input_files([test_file1, test_file2]) file_input.dispatch_event("change")
5. 验证表单提交时的请求
通过Playwright监听提交请求,确认所有文件是否被正确发送:
# 等待提交请求完成 with page.expect_request_finished() as request_ctx: page.locator('button[type="submit"]').click() submission_request = request_ctx.value # 检查请求中的文件数据(可选) form_data = submission_request.post_data # 可打印或断言form_data中是否包含两个文件的信息
内容的提问来源于stack exchange,提问作者avrelum
相关产品推荐
相关产品推荐

