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
相关产品推荐
相关产品推荐

