最后更新:2026-09-04 01:19
实验15 高级操作与Unittest框架¶
15.1 实验目的¶
- 知识目标:理解删除元素属性、
submit()提交表单、滚动条操作、下拉框处理、文件上传、页面截图与 alert 对话框处理的作用与适用场景;理解 Unittest 框架四大组件(TestCase/TestSuite/TestRunner/TestFixture)与执行流程; - 技能目标:能用
execute_script删除 target 属性、用 Select 模块操作下拉框、用send_keys上传文件、用get_screenshot_as_file截图、处理三种 alert 对话框;能编写继承unittest.TestCase的测试用例并用 setUp/tearDown 组织执行; - 素养目标:养成「用框架管理用例、批量执行自动出结果」的工程化测试意识。
15.2 实验环境¶
- 操作系统:Windows 10 / Windows 11;
- 工具:PyCharm + Python + Selenium;
- 浏览器:Chrome;
- 被测系统:人力资源综合服务系统(
http://192.168.X.XXX/suthr/logon)。
15.3 实验重难点¶
重点:execute_script 执行 JS 删除属性;Select 模块三种选择方法;alert 的 switch_to_alert() 处理;Unittest 的 setUp/tearDown 与用例编写。
难点:文件路径反斜杠处理;alert 类型区分(send_keys 只能用于 prompt);Unittest 中 setUpClass 与 setUp 的区别。
15.4 实验内容¶
15.4.1 删除页面元素属性¶
1. 任务描述
用 JavaScript 删除链接的 target 属性,让链接不再弹出新窗口,在同一标签页中打开。
2. 实验步骤
-
步骤 1:理解原理:HTML 中链接有
target属性就会新开窗口;删除target后就在当前页打开。 -
步骤 2:记住三步:
arguments[0] 表示 JS 字符串后面的第一个参数(即 login_link)的真实值。
为什么要删除 target 属性?
target 属性就像快递单上写的「送到新地址」——链接带了 target 就会新开一个窗口;把它删掉,链接就在当前页面打开,不用来回切换窗口。
常见错误与排错
- 若删除后仍弹新窗口:确认
removeAttribute('target')里写的属性名是target,且定位到的元素是链接本身; -
若
execute_script报错:检查arguments[0]与后面传入的元素参数是否一一对应。 -
步骤 3:完整实例——进入回帖管理页面(不弹新标签页):
15.4.2 submit() 方法¶
1. 任务描述
用 submit() 提交表单,代替单击"登录"按钮。
2. 实验步骤
-
步骤 1:理解:在 form 表单中,只要定位到表单里的任意元素,都可以用
submit()提交整个表单。 -
步骤 2:实例:
submit() 和 click() 有什么区别?
submit() 相当于按下表单的「提交回车键」:只要元素在 form 表单里,定位到表单内任意一个元素都能提交整个表单;click() 只是模拟鼠标点那个按钮。如果元素不在 form 表单里,就只能用 click()。
常见错误与排错
- 若
submit()报错:确认目标元素确实在 form 表单内,否则改用定位到登录按钮的click()。
15.4.3 操作下拉滚动条¶
1. 任务描述 用键盘方向键或 JavaScript 实现页面滚动条移动。
2. 实验步骤
方式一:连续按方向键
方式二:JavaScript 滚动
实例:登录后进入"人资工作台",用 JS 把页面纵向滚动到 400:
按方向键和 JS 滚动,哪种更常用?
按方向键是「一下一下挪」,模拟的是人的操作;window.scrollTo(0,400) 是「一步到位跳到指定坐标」,精准且不受页面响应快慢影响——实际脚本里 JS 滚动更常用。
常见错误与排错
- 若页面没滚动:检查
scrollTo(0,400)的两个坐标——第 1 个是横向、第 2 个是纵向,别写反;要纵向滚动就改第 2 个数。
15.4.4 下拉框处理(三种方法)¶
1. 任务描述 在"员工信息管理"页面选择"政治面貌",掌握下拉框的三种处理方式。
2. 实验步骤
方法一:option 标签定位
方法二:xpath 层级标签定位
方法三:Select 模块(推荐,最专业)
三种方法怎么选?
Select 模块最规范、最不易错。索引(index)从 0 开始;value 是 option 的 value 属性;visible_text 是页面上显示的文字。
常见错误与排错
- 若 Select 模块报错:确认定位到的元素确实是
select标签(下拉框本体),而不是某个option; - 若用方法一/二没反应:页面结构一变,下标和 xpath 就会失效,优先改用 Select 模块。
15.4.5 文件上传¶
1. 任务描述
定位上传按钮的 input 标签,用 send_keys 填入本地文件路径完成上传。
2. 实验步骤
-
步骤 1:理解:Selenium 上传文件的关键是思路——定位
<input type="file">后,用send_keys直接填本地路径(不需要操作 Windows 弹窗)。 -
步骤 2:注意路径写法(把反斜杠
\处理成/,推荐加前缀r):
-
路径中不要有中文。
-
步骤 3:完整实例:
为什么不操作 Windows 上传弹窗?
Selenium 只能操作网页里的元素,Windows 弹窗属于操作系统界面,它够不着。好在 <input type="file"> 本身就支持「把路径填进去」这种做法,就像不打开快递柜、直接把取件码给柜子,柜子自己就把件取出来了。
常见错误与排错
- 若上传后文件为空/报路径错误:检查路径是否加了
r前缀(或用/、双反斜杠),且路径中不能有中文。
15.4.6 页面截图¶
1. 任务描述
用 get_screenshot_as_file() 对页面进行截图。
2. 实验步骤
- 步骤 1:记住截图方法:
- 步骤 2:实例——对登录页面截图:
截图有什么用?
自动化测试跑完,通常要截图留证(成功界面、报错界面)。这也是你提交作业最常用的"成果证据"。
常见错误与排错
- 若截图文件没生成:检查保存路径的文件夹是否存在、图片名是否带
.png后缀,路径记得加r前缀防止反斜杠转义。
15.4.7 alert 对话框处理¶
1. 任务描述 处理登录/操作过程中弹出的警告、确认、提示对话框。
2. 实验步骤
-
步骤 1:认识三种对话框: | 类型 | 特点 | 可操作 | | --- | --- | --- | | 警告对话框 alert | 只有一个"确定"按钮,必须先关闭 | accept | | 确认对话框 confirm | "确定 / 取消"两个按钮 | accept / dismiss | | 提示对话框 prompt | 有输入框,可输入答案 | accept / dismiss / send_keys |
-
步骤 2:使用
switch_to_alert()定位,配合text/accept/dismiss/send_keys:
- 步骤 3:完整实例——弹出并处理警告对话框:
send_keys 只能用在哪?
send_keys 只能用于 prompt(提示对话框),alert 和 confirm 没有输入框,用了会报错。
常见错误与排错
- 若弹框弹出后脚本卡住、后续代码不执行:alert 不关闭页面就无法继续操作,必须先用
accept()/dismiss()关掉它; - 若
switch_to_alert()报NoAlertPresentException:说明弹框还没弹出来,可在前面加time.sleep()等待。
15.4.8 Unittest 单元测试框架¶
1. 任务描述 掌握 Unittest 框架原理,用 setUp/tearDown 组织自动化测试用例。
2. 实验步骤
-
步骤 1:理解四大核心部分: | 组件 | 作用 | | --- | --- | | TestCase | 测试用例基类,
run()依次调用 setUp → 用例方法 → tearDown | | TestSuite | 测试用例集合,可用addTest()手动添加或用 TestLoader 自动加载 | | TestRunner | 运行测试用例的驱动类,执行后自动管理 TestResult | | TestFixture | 测试准备活动,常用 setUp() / tearDown() | -
步骤 2:理解测试流程:
- 写 TestCase(class 继承
unittest.TestCase,方法以test开头); - TestLoader 把 TestCase 加载到 TestSuite;
- TextTestRunner 运行 TestSuite,结果保存在 TextTestResult;
-
unittest.main()或 TextTestRunner 触发执行。 -
步骤 3:理解关键方法:
setUp():每个用例执行前执行一次;tearDown():每个用例执行后执行一次;setUpClass():整个用例集执行前只执行一次(需@classmethod);-
tearDownClass():整个用例集执行后只执行一次(需@classmethod)。 -
步骤 4:实例1——setUp 启动浏览器、tearDown 关闭浏览器、两个登录用例:
- 步骤 5:实例2——setUpClass 只启动一次浏览器(用
@classmethod):
setUp 和 setUpClass 怎么选?
- 每个用例独立浏览器(互不干扰):用
setUp/tearDown; - 所有用例共用一个浏览器(更快):用
setUpClass/tearDownClass(注意加@classmethod)。
常见错误与排错
- 若写好的用例方法不被执行:检查方法名是否以
test开头(如test_denglu),Unittest 只认test开头的方法; - 若
setUpClass不生效:检查上面有没有加@classmethod装饰器。
15.5 实验总结¶
本次实验掌握了以下要点:
- 一是理解了删除元素属性、
submit()提交、滚动条操作、下拉框处理、文件上传、截图、alert 对话框处理的作用与适用场景(对应知识目标); - 二是掌握了
execute_script删属性、Select 模块选下拉框、send_keys上传、get_screenshot_as_file截图、三种 alert 处理,以及编写继承unittest.TestCase的测试用例(对应技能目标); - 三是建立了「用框架管理用例、批量执行自动出结果」的工程化测试意识(对应素养目标)。
15.6 作业提交¶
- 提交地点:吾爱作业网
- 提交资料:
- 15.4.4 下拉框 Select 模块实例运行截图;
- 15.4.7 alert 处理实例运行截图(能看到打印的警告文字);
- 15.4.8 Unittest 实例运行结果截图。
- 不会做时填写"心得感悟"(1~50 字)。
15.7 知识检测¶
- [ ] (填空)删除链接的 target 属性后,链接就不会再弹出新窗口,而是在当前页面打开。
- [ ] (填空)Select 模块按页面显示文字选择下拉选项的方法是 select_by_visible_text()(另有 select_by_index / select_by_value)。
- [ ] (选择)alert / confirm / prompt 三种对话框中,可以输入内容的是( )。
- A. alert B. confirm C. prompt D. 都可以
查看解析
正确答案:C。只有 prompt 有输入框,send_keys 只能用于 prompt;alert 和 confirm 用了会报错。
- [ ] (选择)Unittest 中 setUpClass 的执行时机是( )。
- A. 每个用例前执行一次 B. 每个用例后执行一次 C. 整个用例集执行前只执行一次 D. 从不执行
查看解析
正确答案:C。setUpClass 在整个用例集执行前只执行一次(需加 @classmethod);每个用例前执行的是 setUp。
- [ ] (判断)Unittest 测试用例类中的方法可以随意命名,比如叫
denglu1也会被执行。(错)
查看解析
错。方法必须以 test 开头(如 test_denglu),Unittest 只会执行 test 开头的用例方法。
本课相关资源¶
| 序号 | 资源名称 | 类型 | 说明 |
|---|---|---|---|
| 1 | 任务3.8 页面元素属性删除方法使用.pptx | 课件 | removeAttribute |
| 2 | 任务3.9 submit()方法使用.pptx | 课件 | 表单提交 |
| 3 | 任务3.10 操作下拉滚动条方法使用.pptx | 课件 | 滚动条 |
| 4 | 任务3.11 页面中下拉框方法的使用.pptx | 课件 | 下拉框三方法 |
| 5 | 任务3.12 文件上传处理方法使用.pptx | 课件 | 文件上传 |
| 6 | 任务3.13 页面截图操作方法使用.pptx | 课件 | 截图 |
| 7 | 任务3.14 alert对话框处理方法使用.pptx | 课件 | alert 处理 |
| 8 | 任务3.15 Unittest单元测试框架方法使用.pptx | 课件 | Unittest 框架 |
实验素材下载
点击下方链接获取本节课全部资源(含课件、任务清单、安装包等): 🔗 夸克网盘

