2016-12-03 11 views
1

ロボットフレームワークにキーワードがあります。それは、引数を取り、その上にいくつかの処理を行い、結局、それを返します。ロボットフレームワークのキーワードを参照して引数を渡す方法は?

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

だから、用法、次のようになります。

私はキーワードに ${x}の古い値を与えたことを意味し
${x} = My Keyword Name ${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 Loopで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} 

ポイントは、char :)

1

それが実際にダウンPythonで可変/不変変数に来て、それらがどのように関数に渡される「\」魔法です。

ここでは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}を割り当てると、変数はメモリ内の新しいアドレスを指し、それ以降のやりとりは元のアドレスを変更しません。

関連する問題