【发布时间】:2021-04-01 15:25:30
【问题描述】:
我一直在使用 JavaScript 代码进行自动化 GUI 测试。我一直在回顾这个整体测试并优化一些代码。例如,我有一个函数可以将值输入到窗口的所有字段中,看起来或多或少像这样:
| Row | Field 1 | Field 2 | Field 3 | Field 4 | Field 5 | Field 6 | Field 7 |
|---|---|---|---|---|---|---|---|
| 1 | |||||||
| 2 | |||||||
| 3 | |||||||
| 4 | |||||||
| 5 | |||||||
| 6 | |||||||
| 7 | |||||||
| 8 | |||||||
| 9 | |||||||
| 10 |
最初的输入函数看起来像这样: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 个随机值,其中参数 1 和 2 是随机数的最小值和最大值,参数 3 是要放置的项目数在数组中,参数4是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)
;
然后我使用 inputRowValues() 函数输入值并使用 fieldBool 数组随机将一些可选字段留空。
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]);
}
然后我必须退出 for 循环,通过单击“完成”按钮“保存值”,关闭窗口然后重新打开它。
clickDone();
clickX();
openWindow();
由于这一步,我必须验证字段值是否已正确保存在单独的 for 循环中。如果我想在 for 循环中创建一个 rowObject 对象,则无法在下一个 for 循环中再次访问这些值。我能想到的唯一方法是创建 10 个不同的对象。
for (i = 0; i < 10; i++)
{
// These fields end up padding numbers that are less than 5 digits long with 0s in front so I add the padding for verification.
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]);
}
我想不出一种有效的方法来实现这一点。我想到的每个解决方案都需要创建 10 个不同的过滤器对象,然后执行 10 个不同的输入函数和 10 个不同的验证函数,如果我的意图是优化代码,这似乎是倒退。
我知道这是很多代码,但希望我没有在此过程中失去你。
【问题讨论】:
标签: javascript for-loop object