【问题标题】:How to pass arguments to a robot library如何将参数传递给机器人库
【发布时间】:2021-07-20 08:51:33
【问题描述】:

似乎在“Robotframework”中,一个类在定义为库时被实例化。 我这样做:

Library       /home/johann/xmlSockets.py   "./config.xml" "test"

在python中,类可以被实例化:

> class xmlSockets():
>     def __init__(self, configfile, Suchliste):

没有问题。使用 python 可以完美运行。

当它在机器人框架中尝试这个时:

[ 错误 ] 文件中的错误 第 6 行的“/home/johann/robotest/Tests/fuenf.robot”: 使用参数初始化库“xmlSockets”[“config.xml”|测试 ] 失败:FileNotFoundError:[Errno 2] 没有这样的文件或目录: '"config.xml"'

我试过 config.xml、“config.xml”、“config.xml”、“./config.xml”、“./config.xml、@{config.xml 设备}...

没有成功。

【问题讨论】:

  • 你认为“./config.xml”应该指向哪里?您是否假设它与测试相同的文件夹?与 xmlSockets.py 相同的文件夹?还是您希望它是当前工作目录?
  • 你好 Bryan,我已经描述了解决方案:robotframework 在“Test”子目录下搜索,我必须提供正确的绝对目录或“Test”目录中的相对目录,然后它才能工作。

标签: robotframework


【解决方案1】:

部分问题是您在文件名中添加了引号。错误消息不是告诉您config.xml 不存在,而是告诉您"config.xml" 不存在。因此,第一步是删除引号:

Library       /home/johann/xmlSockets.py   ./config.xml  test

第二个可能是因为您假设库正在与库相同的文件夹中查找,而不是在当前工作目录中。在这种情况下,“。”表示当前工作目录,可能与robot文件所在的目录不同,也可能与python文件所在的目录不同。

您在评论中说配置文件与机器人文件位于同一文件夹中。如果是这种情况,我建议您使用 built-in robot variable ${CURDIR} 将完整路径传递给您的库:

Library  /home/johann/xmlSockets.py   ${CURDIR}/config.xml  test

【讨论】:

    【解决方案2】:

    解决方案是,当前目录不是库(或 python 类)所在的目录,它在测试目录下。因此,我们必须导航回导入(或其他)python 类的位置,使用“../config.xml”或获取文件的绝对路径。

    【讨论】:

    • 你的术语有点弱。 Robot 有一个名为${CURDIR}(“当前目录”的缩写)的变量,但它与当前工作目录不同。后者可能在也可能不在 test 目录下。
    • ${CURDIR} 是测试子目录。
    • 是的,我知道。我的意思是您对“当前目录”的使用含糊不清。有些人可能会将其解释为当前工作目录而不是${CURDIR}
    • Bryan,“当前工作目录”有时缩写为“CWD”,而机器人框架中的 ${CURDIR} 指向我写的“测试”子目录。问候
    • 你完全没有理解我的意思。您的答案使用“当前目录”一词。这是模棱两可的。目前尚不清楚您的意思是 cwd、${CURDIR}、当前工作目录还是测试所在的当前目录。
    【解决方案3】:

    如果库与 config.xml 在同一个项目中,您可以使用来自built-in-variables 的 ${CURDIR} 变量。 当前目录将是您创建库的文件的目录。我也会用它来指定库路径。像这样的:

    Library       ${CURDIR}${/}path to lib${/}xmlSockets.py   ${CURDIR}${/}path to config${/}config.xml   "test"
    

    【讨论】:

    • "...当前目录将是您创建库的文件的目录":没有 Jiri,那是行不通的。 ${CURDIR} 指向 Test 目录。
    • 也许我的描述很差,但我很确定它可以工作,因为我使用这种方式,它是“测试数据文件所在目录的绝对路径”而不是测试目录,但测试数据文件,意思是你导入库的文件。所以它不依赖于你在哪里执行测试,也不是绝对路径,以防你在不同的机器上克隆存储库等。
    • 您不需要使用${/} - 一个简单的/ 将适用于所有平台并且更易于阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多