在Python中,我使用xml.dom import minidom 模块中的。 此外,我有一个xml,尝试使用上述模块进行解析。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="4" failures="2">
<testsuite name="iOSUITests" tests="4" failures="2" time="9325.715">
<testcase classname="DR" name="test_1()" time="26.1042">
</testcase>
<testcase classname="DR" name="test_2()" time="31.5843">
</testcase>
<testcase classname="DR" name="test_3()" time="32.8958">
<failure message="failed - reason1">
</failure>
</testcase>
<testcase classname="GD" name="test_4()" time="48.18003">
<failure message="failed - reason2">
</failure>
</testcase>
</testsuite>
</testsuites>
我试图获取每个测试用例的失败子标记,但无法为相应的测试用例获取它。因为我需要将测试用例的状态更新为“通过”或“失败”及其消息。我试图执行下面的代码。
testcase = doc.getElementsByTagName("testcase")
for index, tc in enumerate(testcase):
xml_testcase_list.append({})
xml_testcase_list[index][classname] = tc.getAttribute(classname)
#print "tc.firstChild.items()", tc.childNodes.item
#print "tc.firstChild.items()", tc.firstChild.nodeValue
if 'failure' in tc.firstChild.nodeValue:
xml_testcase_list[index][failure] = []
failure = doc.getElementsByTagName("failure")[0]
#print "getNodeText(failure)", failure.childNodes
for each_index, each_failure in enumerate(failure):
xml_testcase_list[index][failure].append({})
xml_testcase_list[index][failure][each_index][message] = each_failure.getAttribute(message)
如何在if条件下获取失败标签?
答案 0 :(得分:1)
要获得failure
元素的所有testcase
子标记,可以调用tc.getElementsByTagName("failure")
。如果在元素上使用该方法,它将仅检查子级。然后,您可以检查返回的数组是否为空,如果不是,则得到第一个结果。
from xml.dom import minidom
with open('xml.xml') as f: # your file stored in xml.xml
doc = minidom.parse(f)
testcase = doc.getElementsByTagName("testcase")
xml_testcase_list = []
for index, tc in enumerate(testcase):
xml_testcase_list.append({})
xml_testcase_list[index]['classname'] = tc.getAttribute('classname')
failures = tc.getElementsByTagName('failure')
if failures:
xml_testcase_list[index][failure] = []
failure = failures[0]
for each_index, each_failure in enumerate(failure):
xml_testcase_list[index][failure].append({})
xml_testcase_list[index][failure][each_index][message] = each_failure.getAttribute(message)
else:
print 'no failures for', tc
我不得不说您的示例不包含failure
的任何子元素,因此for each_index, each_failure
将无法按预期工作。
答案 1 :(得分:0)
挑战不是if条件,而是您引用标签的方式:
xml_testcase_list[index][classname] = tc.getAttribute(classname)
应该是
xml_testcase_list[index]['classname'] = tc.getAttribute('classname')
也请发送您的错误消息。