[英]Robot Framework running a Keyword within a keyword
我试图让一个关键字来运行其他关键字,而不必这么称呼它。
keyword_rp {variable} keyword_2 ${arg1} ${arg2} ${arg3}
keyword_rp {variable} ${return_data}= keyword_3
keyword_rp {variable} keyword_4 {arg11}
etc.....
您可以看到这如何使您的机器人测试变得混乱,而不是我想要另一个您称之为 arguments 在整个测试中的关键字。 然后通过 python 为每一行调用关键字rp。
keyword_rp_once {variable}
... keyword_2 ${arg1} ${arg2} ${arg3}
... ${return_data}= keyword_3
... keyword_4 {arg11}
python 看起来像这样
def keyword_rp_once(self, variable, *argv):
#parse arguments and use robot built in to run each keyword
或者也许有更好的方法来做到这一点?
问题是,机器人没有看到三行,它在实际必须运行关键字时看到一长串 arguments。 调用keyword_rp_once
时,关键字看到的内容与您输入以下内容完全相同:
keyword_rp_once {variable} keyword2 ${arg1} ${arg2} ${arg3} ${return_data}= keyword_3 keyword_4 {arg11}
简而言之,您不可能直接在关键字中执行您想要的操作,因为机器人会丢弃关键信息 - 换行符 - 因此您的自定义关键字不可能知道一组 arguments 的结束位置和第二组的开始位置。
请注意,使用 3.2 中的新解析器,可以在内部使用换行符,但是您必须做很多工作才能通过侦听器和/或预运行修饰符从解析器中获取信息并进入关键字。
更简单的选择是完全按照机器人自己的Run Keywords
所做的事情:它强制您添加一个标记来告诉它一个关键字在哪里结束,下一个关键字在哪里开始(特别是在那个关键字中,特殊参数AND
)。 然后,您的关键字可以通过查找该标记将 arguments 的单个长列表拆分为 arguments 的多个列表。
例如,我曾经通过使用:
将一组 arguments 与另一组分开来完成您尝试做的事情。 它看起来像这样:
keyword_rp_once {variable}
... : keyword2 ${arg1} ${arg2} ${arg3}
... : ${return_data}= keyword_3
... : keyword_4 {arg11}
它稍微容易阅读,但代价是必须编写复杂的关键字,并且了解机器人但对您的关键字了解不多的人会发现语法令人困惑。
这个解决方案需要大量的工作,特别是因为中间有一个变量赋值。 您的关键字必须有一堆代码来遍历 arguments,然后为任何看起来像:
或匹配像${.*?|=?
这样的正则表达式的参数添加特殊处理。 或类似的东西。
可以通过将关键字变量放在引号之间来做到这一点。 例如:
*** Test Cases ***
Example
I execute "ls"
Sleep for "2" seconds
I print "ls" with "lah" with file "File"
*** Keywords ***
I execute "${cmd}"
log to console ${cmd}
I print "${cmd}" with "${opts}" with file "${input}"
LOG TO CONSOLE ${cmd}
Sleep for "1" seconds
LOG TO CONSOLE ${opts}
Sleep for "10" seconds
LOG TO CONSOLE ${input}
Sleep for "${input1}" seconds
sleep ${input1}
在您的情况下,如下所示:
keyword_rp "{variable}" keyword_2 "${arg1}" "${arg2}" "${arg3}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.