Robotframework 使用「;运行关键字if";使用字符串参数调用函数,但不更改字符串

Robotframework 使用「;运行关键字if";使用字符串参数调用函数,但不更改字符串,robotframework,Robotframework,我遇到了一个奇怪的问题,所以我编写了这个示例,其中我两次调用“print${dir}”: 输出: "c:\temp" "c: emp" 我需要做什么才能使“print${dir}”每次打印相同的内容?在我看来,如果关键字对反斜杠进行了一些额外的转义,则运行关键字。通过增加1个反斜杠,您将在第一个示例中看到这种情况 要克服这个问题,需要从反斜杠()切换到正斜杠(/)。这适用于*nix和基于Windows的系统 *** Variables *** ${dir} = "c:\\temp

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

输出:

"c:\temp"
"c:     emp"

我需要做什么才能使“print${dir}”每次打印相同的内容?

在我看来,如果
关键字对反斜杠进行了一些额外的转义,则
运行关键字。通过增加1个反斜杠,您将在第一个示例中看到这种情况

要克服这个问题,需要从反斜杠()切换到正斜杠(/)。这适用于*nix和基于Windows的系统

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


这仍然是Windows上的有效路径。因此,从功能上讲,路径引用也会起作用

问题源于您使用的是嵌入式参数语法。为了让robot知道要调用什么关键字,它必须在调用关键字之前首先对变量进行展开。这将删除一层反斜杠。然后,当关键字将剩下的内容传递到控制台
日志
关键字时,它会将
\t
视为制表符,这就是为什么您会看到制表符而不是反斜杠和字母“t”

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

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

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

*** Keywords ***  
print
    [Arguments]  ${input1}
    log to console    \r${input1}
 *** Variables ***
 ${dir} =  "c:/temp"
*** Variables ***
${dir} =  "c:\\temp"

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

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