Robot Framework位置和关键字名称

Lor*_*ist 1 python robotframework

我想创建一个带有0参数函数的python库,我的自定义Robot Framework关键字可以调用它.它需要知道定义关键字的文件的绝对路径以及关键字的名称.我知道如何使用robot.libraries.BuiltIn库和${SUITE_SOURCE}${TEST NAME}变量做一些与测试用例类似的东西,但我找不到任何类似的自定义关键字.我不在乎答案有多复杂,也许我必须深入挖掘Robot Framework内部类的内涵并以某种方式访问​​这些数据.有没有办法做到这一点?

Lor*_*ist 6

感谢janne,我找到了解决方案.

from robot.running.context import EXECUTION_CONTEXTS

def resource_locator():
    name      = EXECUTION_CONTEXTS.current.keywords[-1].name
    libname   = EXECUTION_CONTEXTS.current.get_handler(name).libname
    resources = EXECUTION_CONTEXTS.current.namespace._kw_store.resources
    path = ""
    for key in resources._keys:
        if resources[key].name == libname:
            path = key
            break
    return {'name': name, 'path': path}
Run Code Online (Sandbox Code Playgroud)

EXECUTION_CONTEXTS.current.keywords是被称为关键字的堆栈,最早的是第一个,也是最近的一个,因此EXECUTION_CONTEXTS.current.keywords[-1]获取最后一个关键字,即调用此函数的关键字.

EXECUTION_CONTEXTS.current.get_handler(name).libname获取name定义关键字的库的名称.在用户定义的关键字的情况下,它是文件名(不是完整路径)减去扩展名.

EXECUTION_CONTEXTS.current.namespace._kw_store.resources是包含所有资源的字典,其中键是绝对路径.因为文件路径是密钥,所以我必须搜索密钥,使得值的名称是定义关键字的资源的名称(libname)