多态通过抽象接口统一管理浏览器驱动与交互逻辑。定义DriverProvider、Element、BrowserRecoveryStrategy等接口,由各浏览器实现类封装差异;工厂根据配置动态注入具体实现,新增浏览器仅需扩展实现类,无需修改测试代码。

多态本身不直接“处理”浏览器驱动,而是为统一管理不同浏览器行为提供结构基础。关键在于把浏览器差异封装进抽象,让上层测试逻辑无需感知具体是 Chrome 还是 Firefox。
定义统一的 WebDriver 操作接口
不直接 new ChromeDriver() 或 FirefoxDriver(),而是抽象出一个 DriverProvider 接口:
- 声明 getDriver() 方法,返回 WebDriver 类型
- 声明 tearDown() 方法,统一释放资源
- 各浏览器实现类(ChromeProvider、FirefoxProvider)各自完成初始化、启动参数、日志配置等差异化逻辑
- 测试执行时只依赖 DriverProvider,运行时由配置决定注入哪个实现
用工厂+策略组合动态创建驱动
避免在测试代码里写 if-else 判断 browserName,把选择逻辑收口到工厂中:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 读取配置(如 config.properties 中的 browserName=Chrome)
- 工厂根据值返回对应 Provider 实例(可配合 Map
缓存) - Provider 内部调用 System.setProperty 和 new XXXDriver(),并设置隐式等待、窗口最大化等通用动作
- 新增 Edge 或 Playwright 支持时,只需加一个新 Provider 类和工厂注册,不改已有测试
结合 Page Object 将多态延伸到页面交互层
页面类中所有元素操作不直接调用 driver.findElement(),而是通过封装后的 Element 接口:
立即学习“Java免费学习笔记(深入)”;
- 定义 BaseElement 抽象类,含 click()、sendKeys(String)、getText() 等方法
- ChromeElement、FirefoxElement 等子类按需重写——例如对某些 CSS 属性兼容性做适配
- 页面类字段声明为 BaseElement 类型,实际由工厂根据当前 driver 类型注入对应子类
- 这样连元素级交互也能自动适配浏览器特性,而不用在页面方法里判断 driver 类型
异常与恢复也走多态路线
不同浏览器失败表现不同(如 Chrome 崩溃 vs Firefox 页面假死),恢复方式也应解耦:
- 定义 BrowserRecoveryStrategy 接口,含 recover(DriverContext context) 方法
- ChromeCrashRecovery 重启 session,FirefoxHangRecovery 发送强制刷新命令
- 执行引擎捕获异常后,根据当前 Provider 类型自动选用对应策略,不是堆 if-else
- 策略可记录日志标记“Chrome 恢复成功”,便于后续分析稳定性瓶颈


















