使用“ run keyword if”调用带有字符串参数的函数,但不更改字符串

时间:2018-11-01 17:17:40

标签: robotframework

我遇到了一个奇怪的问题,所以我写了这个示例,在其中我两次调用“ print $ {dir}”:

*** Variables ***
${dir} =  "c:\\temp"

*** Test Cases ***   
Test
    print ${dir}
    run keyword if    1 == 1    print ${dir}

*** Keywords ***  
print ${input1}
    log to console    \r${input1}

输出:

"c:\temp"
"c:     emp"

我该怎么做才能使“ print $ {dir}”每次都打印相同的内容?

2 个答案:

答案 0 :(得分:1)

在我看来,Run Keyword If关键字对反斜杠进行了一些附加的转义。通过再添加1个反斜杠,您也会在第一个示例中看到它。

要克服此问题,请从反斜杠()切换为正斜杠(/)。在* nix和基于Windows的系统上均可使用。

 *** Variables ***
 ${dir} =  "c:\\temp"

 *** Variables ***
 ${dir} =  "c:/temp"

这在Windows上仍然是有效路径。因此,在功能上,路径引用也将起作用。

答案 1 :(得分:1)

问题源于您使用嵌入式参数语法的事实。为了使机器人知道要调用哪个关键字,必须先对变量进行扩展,然后再调用该关键字。这样可以去除一层反斜杠。然后,当您的关键字传递class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { final _usernameController = TextEditingController(); final _passwordController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: Column( children: <Widget>[ InputFieldArea( controller: _usernameController, obscureText: false, ), InputFieldArea( controller: _passwordController, obscureText: true, ), RaisedButton( onPressed: () { // example how to read the current text field values print('username: ${_usernameController.text}, password: ${_passwordController.text}'); }, ) ], ) ); } } 关键字剩下的内容时,它会将log to console视为制表符,这就是为什么您看到制表符而不是反斜杠和字母“ t”的原因。

一种解决方案是使用传统参数而不是嵌入式参数。以下示例在两次调用关键字时都给出相同的输出:

\t