2016-05-27 4 views
0

簡単な例として、APIテストフローでは、XML文字列(メッセージ)を渡す必要がある別のAPIテストモジュールを使用しています。 しかし、サブモジュールがXML文字列を取得すると、xmlタグの前の空白に関する実行エラーステップをスローします。 サブモジュールに入る前にカスタムコードで入力文字列をトリミングしても、同じエラーが発生します。UFT/QTPでXML文字列をサブAPIテストに渡す方法はありますか?

エラーメッセージ: "予期しない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> 

あなたはこれを渡す必要があります。http://www.freeformatter.com/xml-escape.html

EDIT:

ここ
&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を脱出を助けることができるオンラインツールを見つけることができます

これを回避する動的な方法は、自動的に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"

関連する問題