我试图演示在Robot Framework中运行两个for循环,以处理这些循环中的不同值,并将列表变量中的值写入Excel文件。
这个简单的演示测试目前已经通过,并且确实记录了来自这些不同循环的不同值,但在写入Excel文件时还没有正确运行。
我创建了一个列表变量@{valueslist},其中包含3个值:Listvalue 0、Listvalue 1和list value 2。
其想法是将Listvalue 0写入Excel第5行,将Listvalue 1写入Excel第6行,并将Listvalue 2写入Excel第7行。第0列中的所有行。Excel文件中的工作表命名为Listvalues。
为什么Excel文件开头有5-7行而不是0-2行?
这里的主要思想是演示不同循环处理的不同值,因为@{valueslist}的值和Excel行的值在以后的很多情况下可能会有所不同,就像本例中演示的那样。写入Excel第0-2行会更容易,因为这种情况下的值与循环范围中的INDEX相同。事实上,我已经做到了,但现在我正在尝试测试Excel行(INDEX(和@{valueslist}中I-values的不同值。
我目前的问题是,Excel列0中预期的第5-7行正在被写入并保存为新的Excel文件(保存为新Excel文件有效(,但对于5和7之间的每一行,都有Listvalue 2(当时i的值为2(正在被写入,Listvalue 1和Listvalue 2,所以只有i的最后一个值被写入Excel三次,并且每行的值没有预期的不同,所以虽然写入了预期的行,但写入部分不能正常工作。只是使用了错误的值,因为Listvalue 2重复了三次。这两个循环并没有像预期的那样协同工作。
在Robot中,我首先打开了一个名为Exceldemobase.xls(使用ExcelLibrary(的Excel文件,该文件用作Excel模板文件。然后我有一个名为Excel Values Main loop的循环,其当前范围为3到6。INDEX值和Excel行号相关,虽然不直接和相同的数值相关,但INDEX用于处理Excel行。
在Excel值主循环中,还有另一个循环作为关键字包含,名为Excel值内部循环。该循环循环${i}个值,并且i与@{valueslist}的索引相关。在该列表中,有三个索引,分别为0、1、2(列表值0、列表值1、列表值2是该列表中的实际值(。
在执行循环之后,对话框库提供了一个暂停执行弹出窗口,用于在写入Excel之前询问用户的确认。
我的机器人框架代码:
*** Settings ***
Library String
Library Dialogs
Library ExcelLibrary
*** Variables ***
${INDEX} 0
${i} 0
@{valueslist} Listvalue 0 Listvalue 1 Listvalue 2
*** Keywords ***
Excel Values Main Loop
: FOR ${INDEX} IN RANGE 3 6
Set Suite Variable ${INDEX}
Excel Values Inner Loop
Log INDEX value logged in (Excel Values Main Loop) is currently: ${INDEX}
Excel Values Inner Loop
: FOR ${i} IN RANGE 0 3
Log Value of i logged in (Excel Values Inner Loop) is currently: ${i}
Log Listvalue logged in (Excel Values Inner Loop) is currently: @{valueslist}[${i}]
Put String To Cell Listvalues 0 ${INDEX+1} @{valueslist}[${i}]
Set Suite Variable ${i}
Excel Values Dialog
Pause Execution Please press OK to write values to Excel rows
Excel Values
[Documentation] This is expected to write Listvalue 0, Listvalue 1 and Listvalue 2 (only one value per row) from variable @{valueslist} to Excel-rows 5, 6 and 7.
...
Open Excel C:/Programming/Robot_Projects/ExcelValuesDemo/Exceldemobase.xls
Excel Values Main Loop
Pause Execution Press OK to save next set of values to Excel
Save Excel C:/Programming/Robot_Projects/ExcelValuesDemo/Exceldemofilled.xls
我希望Excel第5-7行的输出为:
列表值0(Excel第5行应为(
列表值1(Excel第6行应为(
列表值2(Excel第7行需要(
但实际值为:
Listvalue 2(写入Excel第5行(
列表值2(写入Excel第6行(
列表值2(写入Excel第7行(
我认为,在Excel Values Inner Loop中,由于I的值在循环结束时为2,因此该值会传递给每一行,但我无法修复这两个循环,从而产生预期的输出。当我查看日志时,我发现I值0、1和2实际上被记录了下来,所以在循环过程中,I值在0和2之间的增量是按预期完成的,但由于某种原因,只有最后一个值2(2的列表中的实际值是Listvalue 2(被写入Excel文件。
我这样做是为了达到预期的效果。解决方案是不使用Excel值主循环中包含的Excel值内循环,而是在同一主循环代码中添加此行以直接递增i的值:
${i} Evaluate ${i}+1
我不知道这是否可以做得更好,因为我注意到我必须在处理向Excel写入值的行中执行I-1:
Put String To Cell Listvalues 0 ${INDEX+1} @{valueslist}[${i-1}]
当执行i-1时,从@{valueslist}变量中的索引0开始递增,这将导致正确的结果。如果我们从索引1开始递增,那么[${i}]将直接起作用。
不管怎样,我现在得到了预期的结果,所以这对我来说是最重要的。
我希望Excel第5-7行的输出为:
列表值0(Excel第5行应为(
列表值1(Excel第6行应为(
列表值2(Excel第7行需要(
这次的实际值为:
列表值0(写入Excel第5行(
列表值1(写入Excel第6行(
列表值2(写入Excel第7行(
Excel Values Main Loop
: FOR ${INDEX} IN RANGE 3 6
Set Suite Variable ${INDEX}
${i} Evaluate ${i}+1
Log INDEX value logged in (Excel Values Main Loop) is currently: ${INDEX}
Put String To Cell Listvalues 0 ${INDEX+1} @{valueslist}[${i-1}]