You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Robot Framework中调用内部对象的方法?

问题

我有一个Inner类,包含get_value、set_value两个方法以及具有默认含义的value属性。另有一个Outer类,会创建Inner等类的实例并将其作为自身属性:

class Outer:
    def __init__(self, configuration: int):
        if configuration == 1:
            self.inner = Inner("Some data")
            self.other = Other("Some data")
        elif ...
        else:
            self.inner = Inner("Some data")
            self.other = Other("Some data")

(Outer类始终会有inner、other属性)我想在Robot Framework测试中使用Outer.inner.Get Value和Outer.inner.Set Value ${3}这样的调用方式,该如何实现?

我尝试了“扩展变量语法”方案:

  • 给Outer类添加get_inner方法,返回self.inner;
  • 在RF中将inner对象赋值给变量${MyVar};
  • 使用${MyVar.get_value()}调用方法。

但该方式无法直接调用无返回值的方法(如setter):

*** Settings ***
Library  Path.To.Outer  ${1}  WITH NAME  Out

*** Test Cases ***
Check setting current
    ${MyVar}  Out.Get Inner
    ${Initial Value}  Set Variable  ${MyVar.get_value()}
    ${New Value}  Evaluate  ${Initial Value}+${1}
    ${PS.set_current(3)}  # 此处无法运行

get_value可以正常工作,但第四行报错“Keyword name cannot be empty.”。我的目标是用${New Value}替代硬编码值,比如${PS.set_current(${New Value})},请问该如何修正代码?

解决方案

方法一:用Evaluate关键字执行无返回值方法

RF中单独写${变量.方法()}会被识别为空关键字,必须用Evaluate来执行Python表达式,不管方法是否有返回值都能正常运行:

*** Test Cases ***
Check setting current
    ${MyVar}  Out.Get Inner
    ${Initial Value}  Set Variable  ${MyVar.get_value()}
    ${New Value}  Evaluate  ${Initial Value}+${1}
    # 正确调用set_value方法
    Evaluate  ${MyVar}.set_value(${New Value})

方法二:给Outer类添加代理方法

如果想要更贴合RF的关键字调用风格,可以在Outer类中新增代理方法,直接转发对Inner对象的调用:

class Outer:
    # 保留原有__init__逻辑
    def get_inner_value(self):
        return self.inner.get_value()
    
    def set_inner_value(self, value):
        self.inner.set_value(value)

之后在RF中直接调用这些代理关键字:

*** Test Cases ***
Check setting current
    ${Initial Value}  Out.Get Inner Value
    ${New Value}  Evaluate  ${Initial Value}+${1}
    Out.Set Inner Value  ${New Value}

这种方式可读性更强,符合RF的使用习惯。

方法三:通过Run Keyword配合扩展变量语法

如果一定要用扩展变量语法调用无返回值方法,也可以结合Run Keyword:

Run Keyword  Evaluate  ${MyVar}.set_value(${New Value})

但这种写法比直接用Evaluate更繁琐,一般不推荐。

内容的提问来源于stack exchange,提问作者Piotr Wasilewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:52:16