【发布时间】:2017-10-05 03:06:20
【问题描述】:
使用Variable Files 上的机器人框架文档作为指导,我使用get_variables 实现了一个变量文件类。基本示例按描述工作。
当我实现一个三重嵌套字典 (${A.B.C}) 时,我可以使用 ${A} 和 ${A.B} 表示法访问前两个字典。但是,当我想访问第三个节点${A.B.C} 时,结果是我得到一个错误
Resolving variable '${A.B.C}' failed: AttributeError: 'OrderedDict' object
has no attribute 'C'
在下面的三个示例中,我有一个 RF 生成的嵌套字典,我可以通过点符号访问所有节点。第二个示例是由变量类返回的普通 Python 字典。在最后一个示例中,返回的变量类的类型为 OrderedDict。
虽然${A['B']['C']['key']} 有效,但在代码中更难阅读。当我加载一个类似的 yaml 结构时,它完全支持点表示法,但这不是一个选项,因为 yaml 文件是静态的,并且我需要 Python 的一些关键值的灵活性。
因此,我正在寻找有关如何返回允许 Robot Framework 使用点符号解释完整嵌套结构的数据结构的支持。
变量类文件
from collections import OrderedDict
class OrderDict(object):
def get_variables(self):
C = OrderedDict([(u'key', u'value')])
B = OrderedDict([(u'C', C)])
A = OrderedDict([(u'B', B)])
D = {
u'E':
{
u'F':
{
u'key': u'value'
}
}
}
return OrderedDict([(u'DICT__A', A), (u'DICT__D', D)])
机器人框架脚本
*** Test Cases ***
Dictionary RF
${Z} Create Dictionary key=value
${Y} Create Dictionary Z=${Z}
${X} Create Dictionary Y=${Y}
Log To Console ${EMPTY}
Log To Console ${X}
Log To Console ${X['Y']['Z']['key']}
Log To Console ${X.Y}
Log To Console ${X.Y.Z}
Log To Console ${X.Y.Z.key}
Plain Dictionary Variable Class
Log To Console ${EMPTY}
Log To Console ${D}
Log To Console ${D['E']['F']['key']}
Log To Console ${D.E}
Log To Console ${D.E.F}
Log To Console ${D.E.F.key}
Ordered Dictionary Variable Class
Log To Console ${EMPTY}
Log To Console ${A}
Log To Console ${A['B']['C']['key']}
Log To Console ${A.B}
Log To Console ${A.B.C}
Log To Console ${A.B.C.key}
Robot Framework 控制台日志
Suite Executor:Robot Framework 3.0.2(win32 上的 Python 2.7.9)
Dictionary RF
{u'Y': {u'Z': {u'key': u'value'}}}
value
{u'Z': {u'key': u'value'}}
{u'key': u'value'}
value
| PASS |
------------------------------------------------------------------------------
Plain Dictionary Variable Class
{u'E': {u'F': {u'key': u'value'}}}
value
{u'F': {u'key': u'value'}}
| FAIL |
Resolving variable '${D.E.F}' failed: AttributeError: 'dict' object has no attribute 'F'
------------------------------------------------------------------------------
Ordered Dictionary Variable Class
{u'B': OrderedDict([(u'C', OrderedDict([(u'key', u'value')]))])}
value
OrderedDict([(u'C', OrderedDict([(u'key', u'value')]))])
| FAIL |
Resolving variable '${A.B.C}' failed: AttributeError: 'OrderedDict' object has no
attribute 'C'
【问题讨论】:
标签: robotframework