You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分支逻辑的软件设计模式?测试自动化Page Object代码冗余优化

针对你的问题的解决方案

嘿,刚好我之前也踩过类似Page Object冗余的坑,来给你唠唠实用的思路!

一、适用于分支逻辑的常见设计模式

先回应你第一个问题,适合处理分支逻辑的设计模式除了你提到的几个,还有这些高频实用的:

  • Strategy模式:把不同分支逻辑封装成独立策略类,通过上下文动态切换,适合分支逻辑差异大、需要灵活替换的场景。
  • 简单工厂模式:通过工厂类根据输入参数创建不同对象,特别适合分支逻辑是生成不同实例的场景(和你当前问题高度契合)。
  • State模式:适合对象状态变化驱动分支逻辑的场景,比如页面状态切换后触发不同交互逻辑。
  • Chain of Responsibility:适合需要按顺序处理请求、每个节点决定是否处理或传递的分支场景,比如多步骤表单校验。

二、解决你Page Object冗余的极简方案

你当前的问题核心是重复的点击逻辑+不同页面对象返回,完全不需要用State或责任链这种重模式,一个通用方法就能搞定,几乎不用重构原有代码:

方案:泛型通用跳转方法(支持Java/TypeScript等主流语言)

把重复的clickSubmitButton()逻辑抽出来,把返回的页面对象类型作为参数传入,用泛型实现通用跳转:

示例代码(Java版)

class Checkout { 
    // 保留原有私有点击逻辑
    private void clickSubmitButton() { 
        // 你的点击提交按钮实现
    }

    // 通用跳转方法,传入目标页面的Class
    public <T> T gotoNextPage(Class<T> targetPageClass) throws InstantiationException, IllegalAccessException {
        clickSubmitButton();
        // 反射创建目标页面对象并返回
        return targetPageClass.newInstance();
    }
}

调用方式

// 跳转到信用卡页面
CreditCardPage creditCardPage = checkout.gotoNextPage(CreditCardPage.class);
// 跳转到PayPal页面
PaypalPage paypalPage = checkout.gotoNextPage(PaypalPage.class);
// 跳转到错误页面
ErrorPage errorPage = checkout.gotoNextPage(ErrorPage.class);

如果是TypeScript/JavaScript版

class Checkout { 
    private clickSubmitButton() {
        // 你的点击提交按钮逻辑
    }

    gotoNextPage<T>(pageConstructor: new () => T): T {
        this.clickSubmitButton();
        return new pageConstructor();
    }
}

调用方式

const creditCardPage = checkout.gotoNextPage(CreditCardPage);
const paypalPage = checkout.gotoNextPage(PaypalPage);
const errorPage = checkout.gotoNextPage(ErrorPage);

为什么这个方案适合你?

  • 零冗余:把N个重复方法压缩成1个,后续新增页面只需要传入对应的类即可,不用再写新方法。
  • 侵入性极低:只需要新增一个通用方法,原有点击逻辑完全保留,不需要重构整个Checkout类。
  • 复杂度低:不需要引入额外的模式或类,理解和维护成本都很低。

如果以后跳转逻辑需要加入不同前置判断(比如某些页面需要先勾选协议),再考虑抽成Strategy策略类也不迟,现在这个方案完全能解决你当前的问题。

内容的提问来源于stack exchange,提问作者nhle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:19:50