本章要回答的三个问题:点开一个新标签、页面里嵌着一个第三方组件、目标元素藏在前端组件的影子树里——这些"页面套页面"的场景怎么定位与操作?文件上传、下载进度、浏览器原生弹窗,这些"浏览器管、页面不管"的对话框怎么自动化?移动端浏览器与混合应用里,Selenium 的能力边界又在哪里?本章处理的是"页面不配合"的三类高阶战场,前三章的基本功在这里接受实战检验。
基础教程教你在"理想页面"上自动化:元素都在主文档里,交互都是普通点击。真实项目从不理想。企业级页面里,第三方客服、支付组件、地图控件各占一块 iframe;前端组件库把按钮和表单封装进影子树;上传下载与原生弹窗根本不在 DOM 里,页面级的定位技巧全部失灵。这些场景的自动化代码并不复杂,复杂的是背后的认知——你得知道"上下文"这个概念在浏览器里的真实形态,知道哪些东西属于页面、哪些属于浏览器外壳。
这一章的每节都延续全册的工单传统:先给一个真实故障现场,再拆机制,再给可复用的处理模板。读完你会发现,所谓复杂场景,不过是"定位目标不在你以为的地方"或"操作对象根本不是页面元素"——认清楚这两句,复杂就不再复杂。
读完本章,你应当能:在多窗口多标签的流程里稳定切换上下文并正确回收;写出一套可复用的 iframe 穿越代码,处理嵌套与时机问题;穿透 Shadow DOM 定位组件库内部元素,并知道什么时候该绕开它;自动化文件上传与下载的全流程(含等待下载完成的判定);区分三类浏览器弹窗并各用正确的工具处理;判断一个移动端需求该用浏览器模拟、真机云测还是原生框架,并知道混合应用的调试入口。六样能力对应三节,每节自带处理模板可直接搬进工程。
| 节号 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 5.1 | 页面套页面怎么定位与回收 | 窗口、iframe、影子树三套模板 |
| 5.2 | 浏览器管的对话框怎么自动化 | 上传下载与弹窗处理清单 |
| 5.3 | 移动端场景怎么选工具 | 能力边界与选型决策 |
这张分流图是本章的导航逻辑:动手前先问"目标属于谁"——属于另一个文档或影子树,走上下文与穿透;属于浏览器外壳,走专用工具;属于另一台设备,走选型判断。分类对了,工具就对了;工具对了,代码往往只有几行。
问:这些复杂场景可以绕开吗? 绕开的思路常常是对的——比如通过预授权参数避开系统弹窗、用接口构造会话避开登录页。但"页面套页面"的场景(iframe、影子树)绕不开,它们就是被测系统的真实形态。本章的读法是:能绕的学会绕,绕不开的按模板打。
问:三节有先后依赖吗? 5.1 是基础,5.2 与 5.3 相对独立。若你的项目眼下正被文件下载问题卡住,直接跳 5.2 没有问题——每节的处理模板都自带前置说明。
问:模板搬进工程后要不要再加工? 要。模板给的是骨架与判断顺序,落进你的工程时应按第 4 章的规矩归位:页面对象、工具函数、夹具各归各层,并补上你所在页面的具体锚点。
问:复杂场景的用例失败率是不是天然就高? 前期是的,模板化之后不该是。本章三节的每一套模板都内嵌了等待与恢复动作,落进工程后,复杂场景的稳定性应当向普通场景收敛——收敛不了说明模板只搬了代码没搬纪律,回到各节的"成对动作"检查。
本章需要第 3 章的定位与等待功夫烂熟于心——复杂场景的失败十有八九先表现为"找不到",你得能快速判断这是上下文问题还是时序问题。5.1 需要你在浏览器开发者工具里查看过 iframe 边界与影子根标记;5.2 需要理解浏览器下载目录的基本行为;5.3 只做认知与选型,不需要真机在手。
复杂场景的单点攻坚完成之后,下一章回答规模问题:同样的用例要在五个浏览器上验证、要在十分钟内跑完两小时的手工等价工作量——跨浏览器矩阵、并行执行与网格调度登场。你在本章沉淀的每个处理模板,都应当是"单环境可跑、多环境可复制"的形状,这是规模化对代码形态的隐性要求。