我试图从robotframework关键字调用python函数。 python函数已被修饰为使用Builtin库中的run_keyword进行调用。这是因为机器人日志显示结构良好,如果库函数是通过内置库中的run_keyword函数调用的。而不是直接调用。但是这会导致无限循环。有没有一个解决方案来优雅地完成目标?从robotframework脚本调用装饰的python函数导致无限递归
robotkeyword :
do something
#creates a user by calling a function from python based library
create user
python function
@wrap_with_run_keyword
def create_user():
pass
def wrap_with_run_keyword(func):
def func_wrapper(*args, **kwargs):
return run_keyword(func, *args, **kwargs)
return func_wrapper
我无法使用部分应用程序解决问题。
但是,我通过设置和取消设置下面给出的属性来代理递归循环。
def wrap_with_run_keyword(func):
def func_wrapper(*args, **kwargs):
if not hasattr(func, 'second'):
setattr(func, "second", True)
return run_keyword(func, *args, **kwargs)
else:
delattr(func, "second")
return func(*args, **kwargs)
return func_wrapper
但是我遇到了另一个问题。我定义create_user如下
def create_user(properties):
#some code
pass
在调用下面
create_user("name=abc")
的方式这个功能,我发现了以下错误:得到了一个意想不到的关键字参数“名”
为什么在调用关键字“创建用户”时调用关键字“创建用户”?你已经创建了一个自己调用的关键字。您是否打算创建一个_new_关键字,从其他库中调用_an existing_关键字? “结构良好”是什么意思?如果您通过“run keyword”直接调用关键字,那么在日志中应该没有区别,除非在后一种情况下您有一个额外的嵌套级别。 –
@BryanOakley日志的形成方式有所不同。如果你从机器人调用库关键字,它看起来很好嵌套。但是,如果您的图书馆进一步调用另一个函数/关键字,它会在同一级别平坦。但是,如果您通过运行关键字从另一个库调用另一个库函数,则嵌套也会出现在树中的某种树中,使其更具可读性。 – decoder