2016-12-03 66 views
1

我在机器人框架中有一个关键字;它需要一个参数,就可以进行一些处理并返回它毕竟:如何通过引用传递参数给机器人框架关键字?

My Keyword Name 
    [Arguments] ${arg} 
    # Some process on ${arg} 
    [Return]  ${arg} 

因此,这将是用法:

${x} = My Keyword Name ${x} 

这意味着我放弃的${x}旧价值的关键字它给我带来了新的价值。

我想通过参考My Keyword Name拨打电话,所以我不需要使用赋值为${x}设置新值。我已阅读BuiltInUserGuide, ,但没有关于此主题的信息。谁可以帮我这个事?

回答

3

如果${x}是一个可变类型,如列表或字典,则可以传递该对象本身。如果它表示一个标量值,比如一个字符串或者int,那么你不能做你想要的。您唯一的选择是返回新值并将其重新分配给原始变量。

+0

我认为你是对的。我探索了很多,没有发现任何东西。 –

+0

@ZeinabAbbasimazar Python的可变类型实际上可以通过关键字改变 - 请在下面检查我的答案。 – Todor

0

如果初始化变量

My Keyword Name 
    [Arguments] ${arg} 
    ${arg} = Set Variable 56 
    [Return]  ${arg} 

Test 
    Log To Console \n\nin Test 
    ${x} = Set Variable 0 
    ${x} = My Keyword Name ${x} 
    Log To Console ${x} 

或者

您可以探索是否可以利用设置全局变量设置测试变量它是否行得通呢?

+0

您提供的代码与我的代码完全相同。顺便说一句,我不想​​让它成为全球,我只是想消除变量的多余使用。 –

-1

Welp我刚碰到同样的问题,因为我在For循环中使用Run Keyword If语句。知道如果我使用一个返回值的关键字,机器人框架就会吓倒。

所以我只是认为这是一个潜在的解决方案。它会使用我的例子。它确实有冗余,但那是因为你只需要在这种情况下。

***Keywords*** 
| Increment | [Arguments] | ${var} | 
| | ${var} | Evaluate | ${var} + 1 | 
| | Set Test Variable | ${var} | ${var} | 

用法:

| Increment | ${idx} | 
| Set Test Variable | ${idx} | ${var} 

现在,我并不是说这是最好的解决方案,但如果你遇到,你必须返回一个值的变量与关键字的情况下,和你在“运行关键字如果”里面,这应该允许你绕过这个问题。我并不是那么喜欢它,但它完成了这项工作。

0

我花了一段时间才得到解决方案!

* Variables 
${someVar} initial value 

* Test Cases 
[Check reference] 
    Set this   \${someVar} new value 
    Should Be Equal ${someVar} new value 

* Keywords 
Set this 
[Arguments]   ${varName} ${value} 
Set Test Variable ${varName} ${value} 

点是在神奇的“\”字符:)

1

它实际上归结为可变/不可变的变量蟒蛇,以及它们是如何传递给函数。

这里的详细信息in this answer,但在RF上下文中归结为 - 您可以更改列表和字典,而不是字符串和数字(​​int,float)。例如:

A testcase 
    Log To Console  \n 
    ${var}=  Create List member1 
    Log To Console  ${var} 

    Mutate The List  ${var} 
    Log To Console  ${var} 

*** Keywords *** 
Mutate The List 
    [Arguments]  ${lst} 
    Append To List  ${lst} new one 

输出时运行将是:

============================================================================== 
A testcase                

['member1'] 
['member1', 'new one'] 
| PASS | 

,例如在案例中定义的变量被关键字改变了。字典也可以做到这一点。

如果你重新分配函数中的变量,它不会改变;例如有了这样的关键字:

Mutate The Dict 
    [Arguments]  ${lst} 
    ${lst}=  Create List fsf 
    Append To List  ${lst} bogus 

,原始变量${var}不会改变。
为什么这样?总之,在python变量只是内存地址的标识符(“名称”);当您将${lst}分配给新列表时,变量现在指向内存中的新地址,并且进一步的交互不会更改原来的地址。

相关问题