如何调用 python 对象的方法的问题的字面答案是您可以使用扩展变量语法(例如:${cmp.mymethod()}
或者你可以使用call method
关键字(例如:call method ${cmp} mymethod
).
例如,robot 中的普通标量变量是 python 字符串对象。因此,我们可以调用它们的方法,例如lower()
and upper()
。以下测试用例展示了如何使用我之前提到的两种机制在字符串上调用这些方法:
*** Variables ***
${message} Hello, world # a python string object
*** Test cases ***
Example
# Example using "Call method" keyword
${lower}= call method ${message} lower
should be equal ${lower} hello, world
# Example using extended variable syntax
${upper}= set variable ${message.upper()}
should be equal ${upper} HELLO, WORLD
您的代码的问题是您对什么的误解my_component
and ${cmp}
代表。他们是not蟒蛇对象。相反,它是name一个机器人框架库。即使在底层,它可能作为对库中定义的类实例的引用而存在,从测试中my_component
简单来说就是name图书馆的。
这就是为什么my_component.my_method
作品-my_component
是图书馆的名称,并且my_method
是该库中关键字的名称。这是标准的机器人框架语法。看明确指定关键字 http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#specifying-a-keyword-explicitly在机器人框架用户指南中。
如果你想能够通过my_component
就好像它是一个对象一样,您可以使用run keyword
运行该库中实现的关键字。
例如,首先创建MyClass.py
使用以下代码:
class MyClass(object):
def mymethod(self):
return "Hello, world"
如果您替换,您的代码可以工作call method
with run keyword
:
*** Keywords ***
testing component
[Arguments] ${cmp}
log to console ************* ${cmp}
${result} = run keyword ${cmp}.mymethod
最后,如果你真的想通过实际的库objectaround,您可以使用内置关键字获取库实例 http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Get%20Library%20Instance获取实际的库对象,然后您可以使用它调用方式 http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Call%20Method
*** Keywords ***
testing component
[Arguments] ${cmp_name}
${cmp}= Get library instance ${cmp_name}
log to console ************* ${cmp}
${result} = call method ${cmp} mymethod
[return] ${result}
奇怪的是,扩展变量语法在这种情况下不起作用。我不知道为什么。