【发布时间】:2019-08-10 01:40:29
【问题描述】:
我正在使用python学习机器人框架中的动态库实现。在这个过程中,我使用this链接中解释的动态库创建了一个新关键字。
源码如下
import logging
class libdynamicsampl1:
def get_keyword_names(self):
return ["methOne", "methTwo"]
def methOne(self):
logging.info("called the methone")
def methTwo(self, name):
logging.info("called the methtwo with the arg as" + name)
def run_keyword(self, name, args):
print "Running keyword '%s' with arguments %s." % (name, args)
methArgs = (self,) + (args)
return getattr(self, name, methArgs)()
当我从机器人文件中运行这个关键字时,就像下面给出的代码,
*** Test Cases ***
Log Dynamic Test Library
Invoke dyn tests no arg
Invoke dyn tests with arg
*** Keywords ***
Invoke dyn tests no arg
meth one
Invoke dyn tests with arg
meth two "welcome to awesome robot framework"
有如下错误,推断是methTwo取“self”和“name”,但使用getattr(...)只传递了我猜的名字。
TypeError: methTwo() 只需要 2 个参数(给定 1 个)
请帮助解决此问题或就如何根据输入参数调用方法提出最佳实践/实施建议。没有来自机器人框架站点的示例,因此任何修复都会非常有帮助。
run_keyword 方法中的以下实现工作正常,但我觉得它不是在生产就绪代码库中实现的最佳实践。
def run_keyword(self, name, args):
print "Running keyword '%s' with arguments %s." % (name, args)
if name == "methOne":
return self.methOne()
if name == "methTwo":
return self.methTwo(args[0])
【问题讨论】:
-
你想完成什么?你想要“meth one”(有一个空格)调用
methOne方法吗?您发布的代码没有给出您所说的错误。它会给出错误No keyword with name 'meth one' found.。 -
在您的链接中,您可以参考 Robot Framework 2.8.7 的文档。这是故意的,还是偶然的?在当前版本的 Robot Framework 中,Dynamic Library 上的文档包含更多示例。
-
@BryanOakley,我在上面提到的机器人文件中调用并测试了
libdynamicsampl1.py。我不确定如何使用run_keyword实现。虽然文档给出了打印出正在调用的方法名称的示例,但没有提及如何实时调用该方法,这意味着我们应该调用该方法,因为机器人框架无法识别哪个我们实际调用的方法。应该如何实现以便调用方法。文档缺少机器人文件消耗和实时示例 -
@A.Kootstra,文档非常好,但是当我们无法组合并制作完整示例时,有一些 sn-ps 的代码没有真正的用处。如果文档涵盖了单个代码库中的各种主题,并最终制作了可用作参考的完整功能流程或测试,那将非常有帮助。
-
是的,这就是文档声称我们可以通过大小写字符或“_”调用方法的内容,所以我想尝试一下。
标签: python robotframework