Robot Framework:两个循环迭代不同的值,并根据这些值写入预期的Excel行



我试图演示在Robot Framework中运行两个for循环,以处理这些循环中的不同值,并将列表变量中的值写入Excel文件。

这个简单的演示测试目前已经通过,并且确实记录了来自这些不同循环的不同值,但在写入Excel文件时还没有正确运行。

我创建了一个列表变量@{valueslist},其中包含3个值:Listvalue 0Listvalue 1list 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}]

最新更新