首页 > 解决方案 > XML 库能够读取 XML 但不能写入/更改 XML

问题描述

我正在使用 RobotFramework 和 XML 库编写一个测试用例,我想在其中更改元素的文本。

我也在使用 DataDriver 来填写我的论点。

我有一些基本代码,我想在其中更改文本元素,然后我试图确认更改是否正确完成:

Test to Change one value in XML
[Arguments]     ${DEBMEMRID}        ${DEBBANKID}        ${DEBCODEBRAND}     ${DEBCOMPID}        ${DEBCOMMAWLID}     ${CREMEMID}     ${CREMEMTYPE}       ${CREBANKID}        ${CRECODEBRAND}     ${CRECOMPID}        ${CRECOMID}
${root}=        Parse XML       ${XMLFile}
Set Element Text      ${XMLFile}        ${DEBMEMRID}       xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID
Element Text Should Be      ${XMLFile}      ${DEBMEMRID}         xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID
${text}     Get Element Text        ${XMLFile}      xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID

因此,“元素文本应该是”成功地读取 XML,因为文本案例进入失败。

------------------------------------------------------------------------------
TestID 2                                                              | FAIL |
400003 != 400001
------------------------------------------------------------------------------

所以在 XML 中,原始值为 400003,而我要添加的值为 400001。

这是这部分代码的日志记录/输出:

    <kw library="XML" name="Parse Xml">
<doc>Parses the given XML file or string into an element structure.</doc>
<arguments>
<arg>${XMLFile}</arg>
</arguments>
<assign>
<var>${root}</var>
</assign>
<msg level="INFO" timestamp="20190827 12:54:54.202">${root} = &lt;Element 'Document' at 0x03850240&gt;</msg>
<status starttime="20190827 12:54:54.201" status="PASS" endtime="20190827 12:54:54.203"></status>
</kw>
<kw library="XML" name="Set Element Text">
<doc>Sets text and/or tail text of the specified element.</doc>
<arguments>
<arg>${XMLFile}</arg>
<arg>${DEBMEMRID}</arg>
<arg>xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID</arg>
</arguments>
<status starttime="20190827 12:54:54.203" status="PASS" endtime="20190827 12:54:54.204"></status>
</kw>
<kw library="XML" name="Element Text Should Be">
<doc>Verifies that the text of the specified element is ``expected``.</doc>
<arguments>
<arg>${XMLFile}</arg>
<arg>${DEBMEMRID}</arg>
<arg>xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID</arg>
</arguments>
<msg level="FAIL" timestamp="20190827 12:54:54.205">400003 != 400001</msg>
<status starttime="20190827 12:54:54.204" status="FAIL" endtime="20190827 12:54:54.206"></status>
</kw>

为了使 XML 库能够适应文件,是否需要设置权限之类的东西?我该如何设置呢?

标签: robotframework

解决方案


${root}=        Parse XML       ${XMLFile}
Set Element Text      ${root}        ${DEBMEMRID}       xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID
Element Text Should Be      ${root}      ${DEBMEMRID}         xpath=./Payment/Payment_Instruction/Debited_Party/Member/Member_ID

在将 XML 解析给您之后,${root}您应该设置元素文本并进行比较${root}。在您的示例中,您解析了${XML_FILE}into${root}但将所有后续关键字指向${XML_FILE}.

如果你想用新信息覆盖旧的 XML 文件,你可以使用关键字Save Xml

Save XML  ${root}  ${XML_FILE}

完整的机器人框架 XML 库文档可以在这里找到: https ://robotframework.org/robotframework/latest/libraries/XML.html


推荐阅读