最后更新:2026-09-04 01:19
实验29 文件上传模拟¶
29.1 实验目的¶
- 理解 UI 自动化中文件上传的核心原理(底层
<input type="file">标签); - 掌握用 Selenium 的
send_keys("文件绝对路径")绕过系统弹窗直接上传文件; - 掌握处理现代文件上传组件(弹窗、拖拽、隐藏 input)的自动化思路;
- 掌握 alert 弹窗处理与截图。
29.2 实验环境¶
- 操作系统:Windows 10 / Windows 11;
- 工具:PyCharm + Python + Selenium + Chrome + ChromeDriver(实验6 已装好);
- 素材:桌面
<a href="#resources" class="res-link">5.html</a>(现代文件上传组件页面)、upload_test.txt(测试上传文件)。
29.3 实验重难点¶
重点:核心思路——无论前端多炫酷(拖拽、弹窗),底层一定隐藏一个原生 <input type="file"> 标签;直接定位该标签用 send_keys(绝对路径) 投递文件。
难点:现代上传组件的"伪装"穿透(点开弹窗 → 定位隐藏 input → 注入路径 → 提交 → 处理 alert);路径拼接用 os.path.join 规避转义。
29.4 实验内容¶
29.4.1 原理引入:文件上传的底层真相¶
1. 任务描述 理解文件上传自动化为什么不需要操作系统弹窗。
2. 实验步骤
-
步骤 1:痛点分析:UI 自动化测试中,文件上传(上传头像、上传凭证、导入 Excel)是极其常见的场景。
-
步骤 2:核心知识:无论前端页面设计得多炫酷(支持拖拽、支持弹窗),它的底层一定隐藏着一个原生 HTML 标签
<input type="file">。 -
步骤 3:在 Selenium 中对付这种上传组件,完全不需要理会弹出的系统窗口——只需精准定位到这个 input 标签,使用
send_keys("文件的绝对路径")方法,即可直接把文件投递过去。
为什么自动化上传不用理会系统弹窗?
底层的 <input type="file"> 像快递柜的投递口:直接把包裹(文件路径)塞进投递口就行,不用去按柜子的屏幕(系统弹窗)——那块屏幕根本不归 Selenium 管。
常见错误与排错
- 试图用 Selenium 去点 Windows 系统弹窗会失败:弹窗属于操作系统,Selenium 只能操作网页元素;
- 正确思路是定位隐藏的 input 标签后
send_keys(绝对路径)。
29.4.2 页面准备¶
1. 任务描述 准备本地测试页面与测试文件。
2. 实验步骤
-
步骤 1:在桌面上新建一个文本文件,重命名为 5.html,把现代文件上传组件的完整源码复制进去(含触发按钮
open-modal-btn、上传弹窗upload-modal、隐藏的原生 inputfile-input、提交按钮submit-btn,支持拖拽、文件列表、alert 提示)。 -
步骤 2:在桌面上手动新建用于测试上传的文本文件,命名为 upload_test.txt。
常见错误与排错
- 两个文件都要放桌面且命名一致(5.html、upload_test.txt):代码按桌面路径拼接,放别处会报找不到文件;
- 5.html 保存时注意扩展名是
.html而不是.html.txt(资源管理器需开启"显示文件扩展名")。
29.4.3 实战:自动化核心代码¶
1. 任务描述 编写 Selenium 脚本完成"唤起弹窗→注入文件→提交→关 alert"完整闭环。
2. 实验步骤
-
步骤 1:思路讲解(四步走):
- 先点击
id="open-modal-btn"唤起现代上传弹窗; - 绕过页面伪装,直接定位隐藏的
id="file-input"真实标签,向其注入桌面测试文件的绝对路径; - 点击
id="submit-btn"触发提交,让业务流转完成成功闭环; - 处理系统 Alert 提示框。
- 先点击
-
步骤 2:代码实现:
为什么用 os.path.join 拼路径?
手写路径里的 \ 会和 \t、\n 等转义字符打架,os.path.join 像一个自动对接员,按系统规则帮你把路径接对,省心不踩坑。
常见错误与排错
- 运行报找不到 chrome/chromedriver:确认桌面下
chrome-win64、chromedriver-win64文件夹层级与代码中os.path.join的路径一致; - 别删代码里的
time.sleep等待:弹窗动画没播完就定位元素,会直接报错。
29.4.4 随堂练习¶
1. 任务描述 完整跑通文件上传自动化并截图。
2. 实验步骤
-
步骤 1:将 5.html 代码保存至电脑桌面;
-
步骤 2:在电脑桌面手动创建一个表示你姓名的文本文档(如 张三.txt);
-
步骤 3:执行程序,要求流程通畅:自动唤起弹窗 → 自动添加文件 → 自动点击上传 → 自动关闭 Alert 提示框;
-
步骤 4:确保控制台无任何红字报错,完整输出"✅ 随堂文件上传测试成功"字样;
-
步骤 5:截取控制台输出成功界面、浏览器 Alert 弹窗界面各 1 张截图。
踩坑提醒
send_keys必须传文件的绝对路径(用os.path.join自动规避斜杠转义);- 定位的是隐藏的 input 标签(id=file-input),不是外层 div 容器(drop-zone);
- Alert 弹窗要先
switch_to.alert再accept()。
29.5 实验总结¶
本次实验完成了文件上传自动化的核心训练:掌握"无论前端多炫酷,底层必有 <input type="file">"的第一性原理,学会用 send_keys(绝对路径) 绕过系统弹窗直接投递文件,并完整跑通"唤起弹窗 → 注入文件 → 提交 → 关闭 Alert"的业务闭环。这是 Selenium 自动化(实验15 已学的文件上传)在现代前端组件场景下的进阶实战,也是国赛和实际项目的高频考点。
29.6 作业提交¶
- 提交地点:吾爱作业网
- 提交资料:
- 控制台输出"随堂文件上传测试成功"界面截图;
- 浏览器 Alert 弹窗界面截图。
- 不会做时填写"心得感悟"(1~50 字)。
29.7 知识检测¶
- [ ] (填空)无论前端多炫酷,文件上传的底层一定隐藏着一个原生 input 标签,它的 type 属性值是 file。
- [ ] (填空)在 Selenium 中向该 input 标签投递文件,使用的方法是 send_keys("文件的绝对路径")。
- [ ] (选择)自动化处理网页 Alert 弹窗的正确顺序是( )。
- A. 直接
accept()B. 先switch_to.alert再accept()C. 先accept()再switch_to.alertD. 刷新页面
查看解析
正确答案:B。要先切换到弹窗上下文,才能对它点击确定。
- [ ] (填空)拼接桌面路径、规避斜杠转义,使用 os.path.join。
- [ ] (选择)向隐藏 input 注入文件路径时,定位对象应是( )。
- A. 外层 div 容器(drop-zone) B. 隐藏的原生 input(id="file-input") C. 提交按钮 D. 弹窗标题
查看解析
正确答案:B。send_keys 必须作用于原生 input 标签(file-input),定位外层容器无效。
本课相关资源¶
| 序号 | 资源名称 | 类型 | 说明 |
|---|---|---|---|
| 1 | 实验15-文件上传模拟.docx | 讲义 | 页面源码 + 核心代码 + 练习 |
| 2 | 5.html | 素材 | 现代文件上传组件页面 |
实验素材下载
点击下方链接获取本节课全部资源(含课件、任务清单、安装包等): 🔗 夸克网盘