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

JavaScript GUI自动化测试优化:如何在for循环创建对象并跨独立循环复用

JavaScript 自动化GUI测试传参改造后的跨循环对象传递问题

代码改造背景

原有逐行输入字段值的函数为inputRowValues(row, field1, field2, field3, field4, field5, field6, field7),因参数繁多、写法笨重,已改造为接收单个行对象的形式,即inputRowValues(rowObject)。
约定的rowObject结构为:

let rowObject = {
    field1: someValue,
    field2: someValue,
    field3: someValue,
    field4: someValue,
    field5: someValue,
    field6: someValue,
    field7: someValue
};

改造后的写法原本运行效果良好,但在测试「向窗口输入值后关闭窗口重开,输入值仍被保留」的需求时遇到了实现瓶颈。

现有测试流程实现

首先通过createVarArray函数(参数依次为随机数最小值、最大值、数组长度、可选的非10进制基数),生成每个字段对应的10组随机值数组,以及控制可选字段是否随机留空的布尔类数组:

// Generate random values for fields
var
    field1 = createVarArray(1, 2, 10),
    field2 = createVarArray(0, 1, 10),
    field3 = createVarArray(0, 77777, 10, 8),
    field4 = constantValue,
    field5 = createVarArray(0, 77777, 10, 8),
    field6 = createVarArray(0, 31, 10),
    field7 = createVarArray(0, 7, 10)
;
    
// Boolean values to randomly enter optional fields
var
    field3Bool = createVarArray(0, 1, 10),
    field5Bool = createVarArray(0, 1, 10),
    field6Bool = createVarArray(0, 1, 10),
    field7Bool = createVarArray(0, 1, 10)
;

第一个for循环负责逐行处理可选字段的留空逻辑、调用输入函数向界面录入每行的字段值:

for (var i = 0; i < 10; i++) {
    if (field3Bool[i] === 0) field3[i] = "";
    if (field5Bool[i] === 0) field5[i] = "";
    
    if (field6Bool[i] === 0) {
        field6[i] = "";
        field7[i] = "";
    } else if (field6Bool[i] === 1 && field7Bool[i] === 0) {
        field7[i] = "";
    }
    
    // Input values into fields
    inputRowValues(i+1, field1[i], field2[i], field3[i], field4, field5[i], field6[i], field7[i]);
}

录入完成后,执行clickDone(); clickX(); openWindow();三步操作(分别对应保存值、关闭窗口、重新打开窗口),之后在独立的第二个for循环中校验所有字段的保存值,校验循环代码如下:

for (i = 0; i < 10; i++) {
    // 系统对不足5位的数字字段会自动补前导0,因此校验前需要对齐补位规则
    if (field3[i] !== "") field3[i] = math.pad(field3[i], 5);
    if (field5[i] !== "") field5[i] = math.pad(field5[i], 5);
    
    // Verify correct values are saved in all fields
    verifyAllFields(i+1, field1[i], field2[i], field3[i], field4, field5[i], field6[i], field7[i]);
}

当前卡点

如果在第一个for循环内创建rowObject对象,由于两个循环中间隔了UI操作步骤,第二个循环将无法访问这些对象的内容。目前能想到的唯一方案是手动创建10个独立的rowObject对象,这完全抵消了之前改造函数传参形式的优化收益,需要更高效的实现方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 16:24:04