首页 > 解决方案 > 在 RobotFramework 中注册自定义变量查找器的合法方式?

问题描述

RobotFramework 是否有合法的方式来注册我自己的变量查找器?例如,我想注册 finder 来解析名称以 . 开头的变量#。有了robotframework==3.1这样的代码,我就可以做到这一点:

import robot
from robot.variables.finders import VariableFinder


class MyVariableResolver:
    identifiers = '$'

    def find(self, name):
        if name[2] == '#':
            return f'My resolution for {name}'
        else:
            raise KeyError(name)
            

VariableFinder._finders = property(
    lambda self: (MyVariableResolver(),) + self.__dict__['_finders'],
    lambda self, value: self.__dict__.setdefault('_finders', value)
)


class MyLibrary:
    pass

robotframework==4.0的解决方案被打破了,我不得不改为MyVariableResolver

from robot.variables.finders import NOT_FOUND
# other imports

class MyVariableResolver:
    identifiers = '$'

    def find(self, name):
        if name[2] == '#':
            return f'My resolution for {name}'
        else:
            return NOT_FOUND

但是这段代码看起来仍然非常难看(尤其是VariableFinder._finders = property(...)。有没有“正确”的方式来做我想做的事?

标签: pythonpython-3.xvariablesrobotframework

解决方案


推荐阅读