JavaScript中能否用变量动态引用对象属性以优化自动化测试代码?
可以通过「配置抽离+动态遍历」的方式彻底重构这类代码,完全解决重复冗余、难维护的问题,同时适配多窗口复用、多操作类型的需求。
注意原代码存在明显的复制粘贴错误:所有字段的判断条件都写为object.field1,会导致只要field1为空,其余字段哪怕传值也不会被处理,重构时可直接修正。
优化步骤
1. 抽离字段元数据配置
把每个字段的固定规则(参数对象的键名、对应的操作类型枚举、目标控件)统一存为配置数组,不同窗口可以维护独立的配置:
// 「创建对象」菜单的字段配置,新增/删除字段仅需修改该配置 const createObjectFieldMeta = [ { key: 'field1', operateFunc: enums.RunFunctions.INPUTFUNCTION, target: this.WindowObjects.FIELD1_TEXTBOX }, { key: 'field2', operateFunc: enums.RunFunctions.INPUTFUNCTION, target: this.WindowObjects.FIELD2_TEXTBOX }, { key: 'field3', operateFunc: enums.RunFunctions.INPUTFUNCTION, target: this.WindowObjects.FIELD3_TEXTBOX }, { key: 'field4', operateFunc: enums.RunFunctions.INPUTFUNCTION, target: this.WindowObjects.FIELD4_TEXTBOX }, { key: 'field5', operateFunc: enums.RunFunctions.INPUTFUNCTION, target: this.WindowObjects.FIELD5_TEXTBOX }, { key: 'field6', operateFunc: enums.RunFunctions.INPUTFUNCTION, target: this.WindowObjects.FIELD6_TEXTBOX }, // 下拉框类型字段配置示例,无需修改核心逻辑 { key: 'selectField1', operateFunc: enums.RunFunctions.SELECTFUNCTION, target: this.WindowObjects.SELECT1_DROPDOWN } ]
2. 重构核心方法,用循环生成操作数组
利用JavaScript对象的动态属性访问特性(obj[key]形式),遍历配置生成符合要求的二维数组:
// 封装为公共方法,接收参数对象和字段配置,支持多窗口复用 this.initiateObject = function (inputParams, fieldMeta) { const input = fieldMeta.map(item => { // 仅当参数中存在对应字段的值时,生成有效操作数组 if (inputParams[item.key]) { return [item.operateFunc, inputParams[item.key], item.target] } return [] }) this.runFunctions(input) this.clickDone() } // 调用示例 this.initiateObject(object1, createObjectFieldMeta)
优化优势
- 维护成本极低:50个字段仅需维护50行配置,新增/删除字段无需修改逻辑代码,完全避免复制粘贴带来的低级错误
- 复用性强:不同窗口仅需传入对应窗口的字段配置,即可复用同一套初始化逻辑
- 扩展性好:后续新增操作类型(如复选框勾选、单选框选择等),仅需在配置中指定对应枚举值即可,无需调整核心逻辑
内容的提问来源于stack exchange,提问作者JohnN
相关产品推荐
相关产品推荐

