2016-05-27 8 views
0

Как простой случай, в потоке API-теста Я использую другой модуль API-Test, которому я должен передать XML-строку (сообщение). Но как только субмодуль получает XML-строку, он выдает следующий шаг об ошибке выполнения пробела перед тегом xml! Я даже обрезаю строку ввода в пользовательском коде прямо перед входом в подмодуль, но получаю ту же ошибку!Как передать XML-строку суб-API-тесту в UFT/QTP?

Сообщение об ошибке: «Неожиданное объявление XML. Объявление XML должно быть первым узлом в документе, и перед ним не могут появляться пробелы».

Любой намек ценится заранее :)

ответ

0

Вот вещь, UFT API обрабатывает параметры, как XML-структур. Поскольку значение параметра также является структурой XML, оно должно передаваться как текст (экранированный), а не как XML. Таким образом, вместо этого:

<?xml version="1.0" encoding="UTF-8"?><shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shiporder.xsd"><orderperson>John Smith</orderperson><shipto><name>Ola Nordmann</name><address>Langgt 23</address><city>4000 Stavanger</city><country>Norway</country></shipto><item><title>Empire Burlesque</title><note>Special Edition</note><quantity>1</quantity><price>10.90</price></item><item><title>Hide your heart</title><quantity>1</quantity><price>9.90</price></item></shiporder> 

Вы должны пройти это:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;shiporder orderid=&quot;889923&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;shiporder.xsd&quot;&gt;&lt;orderperson&gt;John Smith&lt;/orderperson&gt;&lt;shipto&gt;&lt;name&gt;Ola Nordmann&lt;/name&gt;&lt;address&gt;Langgt 23&lt;/address&gt;&lt;city&gt;4000 Stavanger&lt;/city&gt;&lt;country&gt;Norway&lt;/country&gt;&lt;/shipto&gt;&lt;item&gt;&lt;title&gt;Empire Burlesque&lt;/title&gt;&lt;note&gt;Special Edition&lt;/note&gt;&lt;quantity&gt;1&lt;/quantity&gt;&lt;price&gt;10.90&lt;/price&gt;&lt;/item&gt;&lt;item&gt;&lt;title&gt;Hide your heart&lt;/title&gt;&lt;quantity&gt;1&lt;/quantity&gt;&lt;price&gt;9.90&lt;/price&gt;&lt;/item&gt;&lt;/shiporder&gt; 

Здесь вы можете найти онлайн инструмент, который может помочь вам избежать ваш XML: http://www.freeformatter.com/xml-escape.html

EDIT:

Динамичным способом обойти это будет включение кода, который автоматически ускользает от значения XML в параметре перед выполнением этапа, на котором вы вызываете свой тест API. Пример:

public void CallSTTest4_OnBeforeExecuteStepEvent(object sender, STActivityBaseEventArgs args) 
    {      
     CallSTTest4.InputProperties.GetElementsByTagName("XMLString").Item(0).InnerXml = System.Security.SecurityElement.Escape(CallSTTest4.InputProperties.GetElementsByTagName("XMLString").Item(0).InnerXml);  
    } 

Примечание: В моем случае входной параметр, содержащий структуру XML является "XMLString"

 Смежные вопросы

  • Нет связанных вопросов^_^