修改Robot Framework中的列表列表

时间:2011-06-02 18:24:49

标签: robotframework

我有一个我在Robot Framework中使用的嵌套列表。我想在机器人框架级别更改子列表中的一个项目。

我的列表如下所示:

[bob,mary,[6月,7月,8月]]

我想把“七月”改成别的东西,比如说“九月”

Robot Framework会让我改变'bob'或'mary',但是如果我尝试插入一个列表,它就会被转换成字符串。

(哦,我已经尝试使用“Insert Into List”关键字来插入新的子列表,以及其他List关键字,没有任何好运。)

3 个答案:

答案 0 :(得分:5)

我能够使用像这样的集合库关键字来实现修改

*** settings ***                                                                       
Library   Collections                                                                

*** test cases ***                                                                     
test    ${l1}=  Create List  1  2  3                                        
        ${l2}=  Create List  foo  bar  ${l1}                                              
        ${sub}=  Get From List  ${l2}  2 
        Set List Value   ${sub}   2   400 
        Set List Value   ${l2}  2  ${sub}  
        Log  ${l2} 

我无法找到直接改变子列表的方法,必须先将其提取,然后进行修改,最后放回原位。

答案 1 :(得分:1)

我猜测,由于缺乏回应,没有一个干净整洁的解决方案。这就是我所做的:

我创造了一个实用工具:

class Pybot_Utilities:
    def sublistReplace(self, processList, item, SublistIndex, ItemIndex):
        '''
        Replaces an item in a sublist
        Takes a list, an object, an index to the sublist, and an index to a location in the sublist inserts the object into a sublist of the list at the location specified. 
        So if the list STUFF is (X, Y, (A,B,C)) and you want to change B to FOO give these parameters: [STUFF, FOO, 2, 1]
        '''

        SublistIndex=int(SublistIndex)
        ItemIndex=int(ItemIndex)
        processList[SublistIndex][ItemIndex] = str(item)
        return processList

然后我把这个条目放在我的机器人框架测试套件文件中:

|    | ${ListWithSublist} = | sublistReplace    | ${ListWithSublist]}  | NewItem | 1 | 1 |

(当然,导入我的实用程序库)

运行后,列表索引1的子列表中的第二个项目(索引1)将为“NewItem”

也许不是最优雅或最灵活的,但它现在可以完成这项工作

答案 2 :(得分:0)

集合库中的常规方法“设置列表值”可以在嵌入式列表上运行 - 并且它在原位更改,无需重新创建对象;这是POC:

${listy}=   Create List     a   b
${inner}=   Create List     1   2
Append To List      ${listy}       ${inner}
Log To Console      ${listy}      # prints "[u'a', u'b', [u'1', u'2']]", as expected

Set List Value      ${listy[2]}    0       4
# ^ changes the 1st element of the embedded list to "4" - both the listy's index (2), and the kw argument (0) can be variables

Log To Console      ${listy}      # prints "[u'a', u'b', [u'4', u'2']]" - i.e. updated