【发布时间】:2021-07-16 17:09:55
【问题描述】:
我对 XML 比较陌生,我正在尝试创建自动化测试用例来检查接收到的 XML 消息是否包含正确结构的正确数据。 XML 消息由多个模式实例组成,并且某些标记在这些实例中是通用的。在某些情况下,我不知道在运行之前应该检查哪个命名空间,这使我无法简单地使用索引来查找元素。我需要获取我正在读取的当前实例的命名空间,以便能够确定这是否是我需要的元素。
XML 内容是作为 Telnet 消息提供的,我只是在读取输出,如果接收到某些内容,则尝试使用 XML 库对其进行解析。输出应该与 XML Schema 匹配(在其他地方验证),所以我不必担心格式。
XML 看起来像这样
<?xml version="1.0" encoding="iso-8859-1"?>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceLocation="MessageA1.xsd">
<version>1.0</version>
<items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MessageInfo">
<itemID>111111</itemID>
<stuff>content</stuff>
</items>
<items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MessageContent">
<itemID>121212</itemID>
<stuff>different content</stuff>
</items>
</Message>
我曾尝试将 Robot Framework XML 库与默认的 ElementTree 以及 lxml 一起使用,但(毫不奇怪)两者都提供了相似的结果。测试脚本是这样的
*** Settings ***
Library XML use_lxml=True
Library String
Library Collections
Library Telnet
*** Test Cases ***
Get Element Namespace
${MESSAGE}= Read
${XML}= Parse XML ${MESSAGE}
${ELEMENTS}= Get Elements ${XML} //items
FOR ${ELEMENT} IN @{ELEMENTS}
@{ATTRIBUTES}= Get Element Attributes ${ELEMENT}
END
然后属性列表只返回以下
@{ATTRIBUTES} = [ {http://www.w3.org/2001/XMLSchema-instance}type ]
我知道这些属性通常仅适用于声明它们的元素,但我无法完全理解为什么我根本没有获得 type 的值。
阅读XML Library Documentation返回的值应该是一个Python字典,但这里不是这样——XML格式有问题还是我误解了什么?
使用 Python 3.8.7 和 Robot Framework 4.0.1 时遇到此问题。
【问题讨论】:
-
留下这个作为评论,因为我无法测试这是否真的解决了这个问题,但是在安装 Python 3.9.2 时我不再遇到这个问题 - 不是使用 ElementTree 或 lxml 实现。两者都按预期以字典格式返回了
type值。
标签: xml robotframework