<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Automation Beyond &#187; 4. Programming</title>
	<atom:link href="http://automation-beyond.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://automation-beyond.com</link>
	<description>An engineering approach to Software Testing and Test Automation</description>
	<lastBuildDate>Thu, 02 Feb 2012 14:56:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/</creativeCommons:license>		<item>
		<title>CopyChildElements (QTP, TestComplete, VBScript)</title>
		<link>http://automation-beyond.com/2011/12/08/copychildelements/</link>
		<comments>http://automation-beyond.com/2011/12/08/copychildelements/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 10:41:39 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[Child]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[depth]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[elements]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[hierarchy]]></category>
		<category><![CDATA[How]]></category>
		<category><![CDATA[Move]]></category>
		<category><![CDATA[MSXMLDOM]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Nodes]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[to]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=4794</guid>
		<description><![CDATA[Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript) Description Copy all child elements (and attributes, comments, text nodes) from one XML node to another. Implementation Public Function CopyChildElements(ByRef objXMLSrc, ByRef objXMLDest)    Dim objCloneNode      If objXMLSrc is Nothing Then     Set MoveChildElements = objXMLDest     Exit Function    End If    If [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F12%252F08%252Fcopychildelements%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fshperf%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22CopyChildElements%20%28QTP%2C%20TestComplete%2C%20VBScript%29%22%20%7D);"></div>
<p>Parent page: <a title="Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)" href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" target="_blank">Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)</a></p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Description</h4>
<p>Copy all child elements (and attributes, comments, text nodes) from one XML node to another.</p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">
Public Function CopyChildElements(ByRef objXMLSrc, ByRef objXMLDest)
   Dim objCloneNode
 
   If objXMLSrc is Nothing Then
    Set MoveChildElements = objXMLDest
    Exit Function
   End If

   If objXMLDest is Nothing Then
    Set objXMLDest = objXMLSrc.CloneNode(True)
    Set CopyChildElements = objXMLDest
    Exit Function
   End If

   Set objCloneNode = objXMLSrc.CloneNode(True)

   While Not (objCloneNode.FirstChild is Nothing)
    Call objXMLDest.AppendChild(objCloneNode.FirstChild)
   Wend

   Set objCloneNode = Nothing

   Set CopyChildElements = objXMLDest

End Function
</pre>
<h4>Test Code</h4>
<pre class="brush: vb; title: ;">
  Set objXMLDoc = CreateXMLDOM(&quot;test&quot;)
  Set objXMLParent = CreateChildElementByName(objXMLDoc.DocumentElement, &quot;Modules&quot;, &quot;modules parent node&quot;)
  If objXMLParent is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 1&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 2&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 3&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If

  sText = &quot;&lt;root&gt;text&lt;/root&gt;&quot;
  Set objXMLDoc2 = CreateXMLDOMFromString(sText)
  If objXMLDoc2 is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateXMLDOMFromString&quot;, &quot;&quot;)
  End If

  Set objXMLParent2 = Nothing
  Set objXMLParent2 = CopyChildElements(objXMLParent, objXMLParent2)

  Set objXMLNode = ChildElementByName(objXMLParent2, &quot;Macro&quot;) 
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;Macro&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.Text &lt;&gt; &quot;macro node 1&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = ChildElementByName(objXMLParent, &quot;Macro&quot;) 
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;Macro&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.Text &lt;&gt; &quot;macro node 1&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If

  Set objXMLParent2 = CreateChildElementByName(objXMLDoc2.DocumentElement, &quot;Modules&quot;, &quot;modules parent node dest&quot;)
  If objXMLParent2 is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLParent2 = CopyChildElements(objXMLParent, objXMLParent2)
  Set objXMLNode = ChildElementByName(objXMLParent2, &quot;Macro&quot;) 
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;Macro&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.Text &lt;&gt; &quot;macro node 1&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = ChildElementByName(objXMLParent, &quot;Macro&quot;) 
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;Macro&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.Text &lt;&gt; &quot;macro node 1&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/05/p_getxmlelementattrtext/" rel="bookmark" class="crp_title">p_GetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/01/09/service-functions-dictionary/" rel="bookmark" class="crp_title">Service Functions – Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/06/p_setxmlelementattrtext/" rel="bookmark" class="crp_title">p_SetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/19/childelementbyname/" rel="bookmark" class="crp_title">ChildElementByName (QTP, TestComplete, VBScript)</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/12/08/copychildelements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MoveChildElements (QTP, TestComplete, VBScript)</title>
		<link>http://automation-beyond.com/2011/12/06/movechildelements/</link>
		<comments>http://automation-beyond.com/2011/12/06/movechildelements/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 10:21:22 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[Child]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[depth]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[elements]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[hierarchy]]></category>
		<category><![CDATA[How]]></category>
		<category><![CDATA[Move]]></category>
		<category><![CDATA[MSXMLDOM]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Nodes]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[to]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=4790</guid>
		<description><![CDATA[Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)   Description Move all child elements (and attributes, comments, text nodes) from one XML node to another.  Implementation Public Function MoveChildElements(ByRef objXMLSrc, ByRef objXMLDest)    If objXMLSrc is Nothing Then     Set MoveChildElements = objXMLDest     Exit Function    End If    If objXMLDest is Nothing Then     [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F12%252F06%252Fmovechildelements%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fs5t46r%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22MoveChildElements%20%28QTP%2C%20TestComplete%2C%20VBScript%29%22%20%7D);"></div>
<p>Parent page: <a title="Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)" href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" target="_blank">Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)</a><br />
<div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div> </p>
<h4>Description</h4>
<p>Move all child elements (and attributes, comments, text nodes) from one XML node to another. </p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Public Function MoveChildElements(ByRef objXMLSrc, ByRef objXMLDest)

   If objXMLSrc is Nothing Then
    Set MoveChildElements = objXMLDest
    Exit Function
   End If

   If objXMLDest is Nothing Then
    Set objXMLDest = objXMLSrc.CloneNode(False)
   End If

   While Not (objXMLSrc.FirstChild is Nothing)
    Call objXMLDest.AppendChild(objXMLSrc.FirstChild)
   Wend

   Set MoveChildElements = objXMLDest

End Function
</pre>
<h4>Test Code</h4>
<pre class="brush: vb; title: ;">

  Set objXMLDoc = CreateXMLDOM(&quot;test&quot;)
  Set objXMLParent = CreateChildElementByName(objXMLDoc.DocumentElement, &quot;Modules&quot;, &quot;modules parent node&quot;)
  If objXMLParent is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 1&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 2&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 3&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If

  sText = &quot;&lt;root&gt;text&lt;/root&gt;&quot;
  Set objXMLDoc2 = CreateXMLDOMFromString(sText)
  If objXMLDoc2 is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateXMLDOMFromString&quot;, &quot;&quot;)
  End If
  Set objXMLParent2 = CreateChildElementByName(objXMLDoc2.DocumentElement, &quot;Modules&quot;, &quot;modules parent node dest&quot;)
  If objXMLParent2 is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If

  Set objXMLParent2 = MoveChildElements(objXMLParent, objXMLParent2)

  Set objXMLNode = ChildElementByName(objXMLParent2, &quot;Macro&quot;) 
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;Macro&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.Text &lt;&gt; &quot;macro node 1&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If

  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 1&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 2&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If
  Set objXMLNode = CreateChildElementByName(objXMLParent, &quot;Macro&quot;, &quot;macro node 3&quot;)
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;CreateChildElementByName&quot;, &quot;&quot;)
  End If

  Set objXMLParent2 = Nothing
  Set objXMLParent2 = MoveChildElements(objXMLParent, objXMLParent2)

  Set objXMLNode = ChildElementByName(objXMLParent2, &quot;Macro&quot;) 
  If objXMLNode is Nothing Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;Macro&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
  If objXMLNode.Text &lt;&gt; &quot;macro node 1&quot; Then
    Call Reporter.ReportEvent(micFail, &quot;ChildElementByName&quot;, &quot;&quot;)
  End If
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2011/12/08/copychildelements/" rel="bookmark" class="crp_title">CopyChildElements (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/05/p_getxmlelementattrtext/" rel="bookmark" class="crp_title">p_GetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/01/09/service-functions-dictionary/" rel="bookmark" class="crp_title">Service Functions – Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/06/p_setxmlelementattrtext/" rel="bookmark" class="crp_title">p_SetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/12/06/movechildelements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to select random list item (QTP, VBScript)</title>
		<link>http://automation-beyond.com/2011/11/24/how-to-select-random-list-item/</link>
		<comments>http://automation-beyond.com/2011/11/24/how-to-select-random-list-item/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 10:36:55 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[How]]></category>
		<category><![CDATA[item]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[pick]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[rnd]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[to]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[WebList]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=4723</guid>
		<description><![CDATA[Description  Get object reference. Get total number of items in the list. Generate an index within the given range. Select item by index. Implementation Dim objPage, objList Dim boolRC Dim intItemsCount, intRndItem 'Assumptions: ' &#34;Google Advanced Search&#34; page is up ' &#34;Results per page&#34; WebList exists and enabled 'Get page object Set objPage = Browser(&#34;CreationTime:=0&#34;).Page(&#34;title:=Google Advanced Search&#34;) [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F11%252F24%252Fhow-to-select-random-list-item%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fu8ZG6A%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22How%20to%20select%20random%20list%20item%20%28QTP%2C%20VBScript%29%22%20%7D);"></div>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Description </h4>
<p>Get object reference. Get total number of items in the list. Generate an index within the given range. Select item by index.</p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Dim objPage, objList
Dim boolRC
Dim intItemsCount, intRndItem

'Assumptions:
' &quot;Google Advanced Search&quot; page is up
' &quot;Results per page&quot; WebList exists and enabled

'Get page object
Set objPage = Browser(&quot;CreationTime:=0&quot;).Page(&quot;title:=Google Advanced Search&quot;)
boolRC = objPage.Exist(0)
If Not boolRC Then
 ExitTest
End If

'Get list object
Set objList = objPage.WebList(&quot;name:=num&quot;)
boolRC = objList.Exist(0)
If Not boolRC Then
 ExitTest
End If

'Get number of list items
intItemsCount = objList.GetROProperty(&quot;items count&quot;)
'Create random index
Randomize
intRndItem = CInt(Rnd*intItemsCount)
'Select the item
'Note: selection by index is zero-based
objList.Select &quot;#&quot; &amp; intRndItem
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2007/12/23/custom-lists-winrunner/" rel="bookmark" class="crp_title">Custom lists: Select Multi / Select All with WinRunner</a></li><li><a href="http://automation-beyond.com/2007/11/15/test-log-messages/" rel="bookmark" class="crp_title">Test Log Messages</a></li><li><a href="http://automation-beyond.com/2011/07/19/xmlnode2dictionary/" rel="bookmark" class="crp_title">XMLNode2Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/09/23/gp-automation-vbscript-limitation/" rel="bookmark" class="crp_title">GP/QTP Automation: Overcoming VBScript limitation with Excel macros</a></li><li><a href="http://automation-beyond.com/2010/03/04/manually-get-dexterity-gui-field-names/" rel="bookmark" class="crp_title">How to manually get Dexterity GUI field names</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/11/24/how-to-select-random-list-item/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMLElementDepth (QTP, TestComplete, VBScript)</title>
		<link>http://automation-beyond.com/2011/10/20/xmlelementdepth/</link>
		<comments>http://automation-beyond.com/2011/10/20/xmlelementdepth/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 10:47:42 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[Child]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[depth]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[hierarchy]]></category>
		<category><![CDATA[MSXMLDOM]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=4149</guid>
		<description><![CDATA[Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript) Description Locate XML node depth within the hierarchy. Valid argument: an XML element node (NODE_ELEMENT type).  Implementation Public Function XMLElementDepth(ByRef objXMLElement)    Dim intDepth    Dim objXMLNode   If objXMLElement is Nothing Then   XMLElementDepth = -1   Exit Function  End If  'NODE_DOCUMENT(9)  If objXMLElement.NodeType = 9 Then   XMLElementDepth [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F10%252F20%252Fxmlelementdepth%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FrixjsD%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22XMLElementDepth%20%28QTP%2C%20TestComplete%2C%20VBScript%29%22%20%7D);"></div>
<p>Parent page: <a title="Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)" href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" target="_blank">Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)</a></p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Description</h4>
<p>Locate XML node depth within the hierarchy. Valid argument: an XML element node (NODE_ELEMENT type). </p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Public Function XMLElementDepth(ByRef objXMLElement)
   Dim intDepth
   Dim objXMLNode

  If objXMLElement is Nothing Then
  XMLElementDepth = -1
  Exit Function
 End If

 'NODE_DOCUMENT(9)
 If objXMLElement.NodeType = 9 Then
  XMLElementDepth = 0
  Exit Function
 End If

 'NODE_ELEMENT(1)
 If objXMLElement.NodeType &lt;&gt; 1 Then
  XMLElementDepth = -1
  Exit Function
 End If

 intDepth = 0
 Set objXMLNode = objXMLElement
 Do While True
  Set objXMLNode = objXMLNode.parentNode
  intDepth = intDepth + 1
  If objXMLNode.NodeType = 9 Then
   Exit Do
  End If
 Loop

 XMLElementDepth = intDepth

End Function
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/05/p_getxmlelementattrtext/" rel="bookmark" class="crp_title">p_GetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/01/09/service-functions-dictionary/" rel="bookmark" class="crp_title">Service Functions – Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/06/p_setxmlelementattrtext/" rel="bookmark" class="crp_title">p_SetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/19/childelementbyname/" rel="bookmark" class="crp_title">ChildElementByName (QTP, TestComplete, VBScript)</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/10/20/xmlelementdepth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CreateXMLDOMFromString (QTP, TestComplete, VBScript)</title>
		<link>http://automation-beyond.com/2011/10/08/createxmldomfromstring/</link>
		<comments>http://automation-beyond.com/2011/10/08/createxmldomfromstring/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 10:17:39 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[3. Automation]]></category>
		<category><![CDATA[add]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[CreateObject]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[from]]></category>
		<category><![CDATA[MSXMLDOM]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=3673</guid>
		<description><![CDATA[Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript) Description Create XML DOM object by loading source XML from string. If the string is empty or source XML is invalid returns Nothing. Implementation Public Function CreateXMLDOMFromString(ByVal sXMLSource)   Dim boolRC, intRC   Dim objXMLDoc, objXMLRoot     If Trim(sXMLSource) = &#34;&#34; Then     Set CreateXMLDOMFromString = Nothing     Exit [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F10%252F08%252Fcreatexmldomfromstring%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FowjSZF%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22CreateXMLDOMFromString%20%28QTP%2C%20TestComplete%2C%20VBScript%29%22%20%7D);"></div>
<p>Parent page: <a title="Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)" href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" target="_blank">Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)</a></p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Description</h4>
<p>Create XML DOM object by loading source XML from string. If the string is empty or source XML is invalid returns Nothing.</p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Public Function CreateXMLDOMFromString(ByVal sXMLSource)
  Dim boolRC, intRC
  Dim objXMLDoc, objXMLRoot
 
  If Trim(sXMLSource) = &quot;&quot; Then
    Set CreateXMLDOMFromString = Nothing
    Exit Function
  End If
 
  Set objXMLDoc = CreateObject(&quot;Microsoft.XMLDOM&quot;)
  objXMLDoc.async = False
 
  On Error Resume Next
  objXMLDoc.loadXML(sXMLSource)
  intRC = Err.Number
  On Error GoTo 0
 
  If boolRC Then
    Set objXMLDoc = Nothing
    Set CreateXMLDOMFromString = Nothing
    Exit Function
  End If    

  Set objXMLRoot = objXMLDoc.documentElement
  boolRC = isNull(objXMLRoot) or (objXMLRoot is Nothing) 
  If boolRC Then
    Set objXMLDoc = Nothing
    Set CreateXMLDOMFromString = Nothing
    Exit Function
  End If    
 
  Set CreateXMLDOMFromString = objXMLDoc
End Function
</pre>
<h4>Test Code</h4>
<pre class="brush: vb; title: ;">

  Set objXMLDoc = CreateXMLDOMFromString(&quot;&quot;)
  If Not (objXMLDoc is Nothing) Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If

  sText = &quot;&lt;root&gt;text&lt;root&gt;&quot;
  Set objXMLDoc = CreateXMLDOMFromString(sText)
  If Not (objXMLDoc is Nothing) Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If

  sText = &quot;&lt;root&gt;text&lt;/root&gt;&quot;
  Set objXMLDoc = CreateXMLDOMFromString(sText)
  If objXMLDoc is Nothing Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If

  sText = &quot;&lt;root&gt;text &lt;case&gt;test case&lt;/case&gt;&lt;/root&gt;&quot;
  Set objXMLDoc = CreateXMLDOMFromString(sText)
  If objXMLDoc is Nothing Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If
  Set objXMLNode = ChildElementByName(objXMLDoc.DocumentElement, &quot;case&quot;) 
  If objXMLNode is Nothing Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If
  If objXMLNode.BaseName &lt;&gt; &quot;case&quot; Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If
  If objXMLNode.Text &lt;&gt; &quot;test case&quot; Then
    Log.Error &quot;CreateXMLDOMFromString failed&quot;
  End If
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2011/12/06/movechildelements/" rel="bookmark" class="crp_title">MoveChildElements (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2011/12/08/copychildelements/" rel="bookmark" class="crp_title">CopyChildElements (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/05/p_getxmlelementattrtext/" rel="bookmark" class="crp_title">p_GetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/01/09/service-functions-dictionary/" rel="bookmark" class="crp_title">Service Functions – Dictionary (QTP, TestComplete, VBScript)</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/10/08/createxmldomfromstring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to find last modified file (TestComplete, QTP, VBScript)</title>
		<link>http://automation-beyond.com/2011/07/26/how-to-find-last-modified-file/</link>
		<comments>http://automation-beyond.com/2011/07/26/how-to-find-last-modified-file/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 10:20:02 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[File System Operations]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[3. Automation]]></category>
		<category><![CDATA[answer]]></category>
		<category><![CDATA[Attribute]]></category>
		<category><![CDATA[check]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[DateCreated]]></category>
		<category><![CDATA[DateLastAccessed]]></category>
		<category><![CDATA[DateLastModified]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[filename unknown]]></category>
		<category><![CDATA[FileSystemObject]]></category>
		<category><![CDATA[FSO]]></category>
		<category><![CDATA[last]]></category>
		<category><![CDATA[modified]]></category>
		<category><![CDATA[most]]></category>
		<category><![CDATA[number]]></category>
		<category><![CDATA[property]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[question]]></category>
		<category><![CDATA[recent]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=3759</guid>
		<description><![CDATA[Reference page: Service Functions – System (QTP, VBScript) Description  Check folder exists &#8211; check folder has files. Iterate through collection of files and keep reference of the most recently modified file (its DateLastModified property is always the highest number). The remaining reference is the one that you need. In case of errors the function returns [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F07%252F26%252Fhow-to-find-last-modified-file%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FnDgvOC%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22How%20to%20find%20last%20modified%20file%20%28TestComplete%2C%20QTP%2C%20VBScript%29%22%20%7D);"></div>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<p>Reference page: <a title="Service Functions – System (QTP, VBScript)" href="http://automation-beyond.com/2009/12/05/service-functions-system/" target="_blank">Service Functions – System (QTP, VBScript)</a></p>
<h4>Description </h4>
<p>Check folder exists &#8211; check folder has files. Iterate through collection of files and keep reference of the most recently modified file (its <em>DateLastModified</em> property is always the highest number). The remaining reference is the one that you need. In case of errors the function returns <em>Nothing</em>. </p>
<p>Note. In some cases, you may want to use <em>DateCreated</em> or <em>DateLastAccessed</em> properties.</p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Public Function GetLastModifiedFile(ByVal sFolderPath)
  Dim FSO, objFolder, objFile
  Dim objFileResult, longDateTime
  Dim boolRC
 
  Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
  boolRC = FSO.FolderExists(sFolderPath)
  If Not boolRC Then
    Set FSO = Nothing
    Set GetLastModifiedFile = Nothing
    Exit Function
  End If

  Set objFolder = FSO.GetFolder(sFolderPath)
  If objFolder.Files.Count = 0 Then
    Set FSO = Nothing
    Set objFolder = Nothing
    Set GetLastModifiedFile = Nothing
    Exit Function
  End If
 
  Set objFileResult = Nothing
  longDateTime = CDate(0)
 
  For Each objFile in objFolder.Files
 
    If objFile.DateLastModified &gt; longDateTime Then
      Set objFileResult = objFile
      longDateTime = objFile.DateLastModified
    End If
   
  Next
 
  Set FSO = Nothing
  Set objFolder = Nothing
  Set GetLastModifiedFile = objFileResult

End Function
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/13/createxmldomfromfile/" rel="bookmark" class="crp_title">CreateXMLDOMFromFile (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2010/01/12/service-functions-excel/" rel="bookmark" class="crp_title">Service Functions – Excel (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/11/10/minor-major-defect/" rel="bookmark" class="crp_title">Minor defect as a symptom of a major defect</a></li><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2010/11/10/testcomplete-find-child/" rel="bookmark" class="crp_title">TestComplete &#8211; Find Child or Find Yourself?</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/07/26/how-to-find-last-modified-file/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XMLNodeSet2Dictionary (QTP, TestComplete, VBScript)</title>
		<link>http://automation-beyond.com/2011/07/20/xmlnodeset2dictionary/</link>
		<comments>http://automation-beyond.com/2011/07/20/xmlnodeset2dictionary/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 10:37:09 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[add]]></category>
		<category><![CDATA[associate]]></category>
		<category><![CDATA[Attribute]]></category>
		<category><![CDATA[Child]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[collection]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[CreateObject]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[from]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[in]]></category>
		<category><![CDATA[MSXMLDOM]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[SelectNodes]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=3772</guid>
		<description><![CDATA[Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript) Description For each occurrence of XML node perform conversion to Dictionary, and store all records in indexed Dictionary object. Implementation Public Function XMLNodeSet2Dictionary(ByRef objXMLNodeSet)   Dim objDictionary   Dim Iter   Set objDictionary = CreateObject(&#34;Scripting.Dictionary&#34;)  If objXMLNodeSet is Nothing Then   Set XMLNodeSet2Dictionary = objDictionary   Exit Function [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F07%252F20%252Fxmlnodeset2dictionary%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FoTAVBx%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22XMLNodeSet2Dictionary%20%28QTP%2C%20TestComplete%2C%20VBScript%29%22%20%7D);"></div>
<p>Parent page: <a title="Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)" href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" target="_blank">Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)</a></p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Description</h4>
<p>For each occurrence of XML node perform conversion to Dictionary, and store all records in indexed Dictionary object.</p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Public Function XMLNodeSet2Dictionary(ByRef objXMLNodeSet)
  Dim objDictionary
  Dim Iter

  Set objDictionary = CreateObject(&quot;Scripting.Dictionary&quot;)
 If objXMLNodeSet is Nothing Then
  Set XMLNodeSet2Dictionary = objDictionary
  Exit Function
 End If
 
  For Iter=0 To objXMLNodeSet.length-1
    Set objDictionary.Item(Iter+1) = XMLNode2Dictionary(objXMLNodeSet.Item(Iter))
  Next
 
  Set XMLNodeSet2Dictionary = objDictionary
 
End Function
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/05/p_getxmlelementattrtext/" rel="bookmark" class="crp_title">p_GetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/01/09/service-functions-dictionary/" rel="bookmark" class="crp_title">Service Functions – Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/06/p_setxmlelementattrtext/" rel="bookmark" class="crp_title">p_SetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/19/childelementbyname/" rel="bookmark" class="crp_title">ChildElementByName (QTP, TestComplete, VBScript)</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/07/20/xmlnodeset2dictionary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMLNode2Dictionary (QTP, TestComplete, VBScript)</title>
		<link>http://automation-beyond.com/2011/07/19/xmlnode2dictionary/</link>
		<comments>http://automation-beyond.com/2011/07/19/xmlnode2dictionary/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 10:06:32 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[add]]></category>
		<category><![CDATA[associate]]></category>
		<category><![CDATA[Attribute]]></category>
		<category><![CDATA[Child]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[CreateObject]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[from]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[in]]></category>
		<category><![CDATA[MSXMLDOM]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=3766</guid>
		<description><![CDATA[Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript) Description Create Dictionary object and populate with data (only direct content &#8211; text, comments, CData, and attributes) taken from XML node. Naming convention: @attr_name for attributes; #text_index for text nodes; #comment_index for comment nodes; #cdata_index for CData Section nodes.   Implementation Public Function XMLNode2Dictionary(ByRef objXMLElement)   [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F07%252F19%252Fxmlnode2dictionary%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FpZAhtd%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22XMLNode2Dictionary%20%28QTP%2C%20TestComplete%2C%20VBScript%29%22%20%7D);"></div>
<p>Parent page: <a title="Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)" href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" target="_blank">Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)</a></p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Description</h4>
<p>Create Dictionary object and populate with data (only direct content &#8211; text, comments, CData, and attributes) taken from XML node.</p>
<p>Naming convention:</p>
<ul>
<li>@<em>attr_name</em> for attributes;</li>
<li>#text_<em>index </em>for text nodes;</li>
<li>#comment_<em>index</em> for comment nodes;</li>
<li>#cdata_<em>index</em> for CData Section nodes.</li>
</ul>
<p> </p>
<h4>Implementation</h4>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: vb; title: ;">

Public Function XMLNode2Dictionary(ByRef objXMLElement)
  Dim objDictionary
  Dim objColl, objAttr, Iter
  Dim intCommentCount, intTextCount, intCDataCount
 
  Set objDictionary = CreateObject(&quot;Scripting.Dictionary&quot;)
 If objXMLElement is Nothing Then
    objDictionary.Item(&quot;#innertext&quot;) = &quot;&quot;
  Set XMLNode2Dictionary = objDictionary
  Exit Function
 End If
 
  objDictionary.Item(&quot;#innertext&quot;) = objXMLElement.Text
 
  intCommentCount = 0
  intTextCount = 0
  intCDataCount = 0

  Set objColl = objXMLElement.ChildNodes
  For Iter=0 To objColl.length-1
    Select Case objColl.Item(Iter).NodeName
      Case &quot;#comment&quot;
        intCommentCount = intCommentCount + 1
        objDictionary.Item(&quot;#comment_&quot;&amp;intCommentCount) = objColl.Item(Iter).NodeValue
      Case &quot;#text&quot;
        intTextCount = intTextCount + 1
        objDictionary.Item(&quot;#text_&quot;&amp;intTextCount) = objColl.Item(Iter).NodeValue
      Case &quot;#cdata-section&quot;
        intCDataCount = intCDataCount + 1
        objDictionary.Item(&quot;#cdata_&quot;&amp;intCDataCount) = objColl.Item(Iter).NodeValue
      Case Else
        'ignore
    End Select
  Next
 
  For Each objAttr in objXMLElement.Attributes
    objDictionary.Item(&quot;@&quot;&amp;objAttr.Name) = objAttr.Value
  Next
    
 Set XMLNode2Dictionary = objDictionary
 
End Function
</pre>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2008/06/30/service-functions-msxmldom/" rel="bookmark" class="crp_title">Service Functions &#8211; MSXMLDOM (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2011/07/20/xmlnodeset2dictionary/" rel="bookmark" class="crp_title">XMLNodeSet2Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/05/p_getxmlelementattrtext/" rel="bookmark" class="crp_title">p_GetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2009/01/09/service-functions-dictionary/" rel="bookmark" class="crp_title">Service Functions – Dictionary (QTP, TestComplete, VBScript)</a></li><li><a href="http://automation-beyond.com/2008/08/06/p_setxmlelementattrtext/" rel="bookmark" class="crp_title">p_SetXMLElementAttrText (QTP, TestComplete, VBScript)</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/07/19/xmlnode2dictionary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generating Test Reports: Final Example</title>
		<link>http://automation-beyond.com/2011/06/23/generating-test-reports-final-example/</link>
		<comments>http://automation-beyond.com/2011/06/23/generating-test-reports-final-example/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 10:39:09 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[XML Data]]></category>
		<category><![CDATA[2. Testing]]></category>
		<category><![CDATA[3. Automation]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML ID]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[RapidReporter]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[reproducible]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[stylesheet]]></category>
		<category><![CDATA[Sub]]></category>
		<category><![CDATA[Sub-Template]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[transformation]]></category>
		<category><![CDATA[tree]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>
		<category><![CDATA[XPath]]></category>
		<category><![CDATA[XSL]]></category>
		<category><![CDATA[xsl-choose]]></category>
		<category><![CDATA[xsl-if]]></category>
		<category><![CDATA[xsl:otherwise]]></category>
		<category><![CDATA[xsl:template]]></category>
		<category><![CDATA[xsl:when]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=4403</guid>
		<description><![CDATA[Parent page: Generating Test Reports Today I put all examples together.  Here’s our XML record simulating log data of a test session. XML Source &#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62; &#60;?xml-stylesheet type=&#34;text/xsl&#34; href=&#34;.\LogView4.xsl&#34;?&#62; &#60;log&#62; &#60;area id=&#34;A001&#34;&#62; &#60;description&#62;Testing login page, invalid password&#60;/description&#62; &#60;step type=&#34;#note&#34; id=&#34;A001-S001&#34;&#62; &#60;time&#62;21/04/2011 11:45:31 AM&#60;/time&#62; &#60;description&#62;Typed data [User1234] in edit box [Username] &#60;/description&#62; &#60;/step&#62; &#60;step type=&#34;#note&#34; [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F06%252F23%252Fgenerating-test-reports-final-example%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FktlYzg%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Generating%20Test%20Reports%3A%20Final%20Example%22%20%7D);"></div>
<p>Parent page: <a href="http://automation-beyond.com/chapters/tutorials/test-reports/" target="_blank">Generating Test Reports</a></p>
<p>Today I put all examples together. <br />
Here’s our XML record simulating log data of a test session.</p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>XML Source</h4>
<pre class="brush: xml; title: ;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;.\LogView4.xsl&quot;?&gt;
&lt;log&gt;
 &lt;area id=&quot;A001&quot;&gt;
  &lt;description&gt;Testing login page, invalid password&lt;/description&gt;

  &lt;step type=&quot;#note&quot; id=&quot;A001-S001&quot;&gt;
    &lt;time&gt;21/04/2011 11:45:31 AM&lt;/time&gt;
    &lt;description&gt;Typed data [User1234] in edit box [Username] &lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#note&quot; id=&quot;A001-S002&quot;&gt;
    &lt;time&gt;21/04/2011 11:46:03 AM&lt;/time&gt;
    &lt;description&gt;Typed data [WrongPassword] in edit box [Password]&lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#idea&quot; id=&quot;A001-S003&quot;&gt;
    &lt;time&gt;21/04/2011 11:46:37 AM&lt;/time&gt;
    &lt;description&gt;Explore &quot;Remember Me&quot; functionality&lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#note&quot; id=&quot;A001-S004&quot;&gt;
    &lt;time&gt;21/04/2011 11:47:01 AM&lt;/time&gt;
    &lt;description&gt;Clicked on button [Login]&lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#bug&quot; id=&quot;A001-S005&quot;&gt;
    &lt;time&gt;21/04/2011 11:47:22 AM&lt;/time&gt;
    &lt;flags screenshot=&quot;YES&quot; /&gt;
    &lt;screenshot&gt;20111145_012852.jpg&lt;/screenshot&gt;
    &lt;description&gt;Unfriendly error dialog&lt;/description&gt;
  &lt;/step&gt;
 &lt;/area&gt;
 &lt;area id=&quot;A002&quot;&gt;
  &lt;description&gt;Testing login page, using non-text chars&lt;/description&gt;

  &lt;step type=&quot;#note&quot; id=&quot;A002-S001&quot;&gt;
    &lt;time&gt;21/04/2011 11:48:07 AM&lt;/time&gt;
    &lt;description&gt;Typed data [User1234] in edit box [Username] &lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#note&quot; id=&quot;A002-S002&quot;&gt;
    &lt;time&gt;21/04/2011 11:48:33 AM&lt;/time&gt;
    &lt;description&gt;Typed data [Password1234!] in edit box [Password]&lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#bug&quot; id=&quot;A002-S003&quot;&gt;
    &lt;time&gt;21/04/2011 11:51:02 AM&lt;/time&gt;
    &lt;description&gt;Edit box [Password] didn't accept [!@#$] chars&lt;/description&gt;
  &lt;/step&gt;
  &lt;step type=&quot;#idea&quot; id=&quot;A002-S004&quot;&gt;
    &lt;time&gt;21/04/2011 11:52:18 AM&lt;/time&gt;
    &lt;description&gt;See if can assign non-text chars for psw at the back-end&lt;/description&gt;
  &lt;/step&gt;
 &lt;/area&gt;
&lt;/log&gt;
</pre>
<p>The following line</p>
<blockquote><p>&lt;?xml-stylesheet type=”text/xsl” href=”.\LogView4.xsl”?&gt;</p></blockquote>
<p>instructs the web browser to use XSL script for visualization of XML data.</p>
<h4>Web-page Report</h4>
<p><a href="http://automation-beyond.com/wp/wp-content/uploads/2011/03/FinalExample.jpg" target="_blank"><img class="alignnone size-medium wp-image-4406" title="FinalExample" src="http://automation-beyond.com/wp/wp-content/uploads/2011/03/FinalExample-300x115.jpg" alt="" width="300" height="115" /></a></p>
<p>And here’s the source code of the script</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h4>XSL Source</h4>
<pre class="brush: xml; title: ;">
&lt;xsl:stylesheet version=&quot;1.0&quot;  xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
                  xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;

&lt;!-- variables --&gt;
&lt;xsl:variable name=&quot;CHAR_SPC&quot;&gt;&amp;#160;&lt;/xsl:variable&gt;

&lt;xsl:template match=&quot;/&quot;&gt;

&lt;html&gt;

&lt;head&gt;
&lt;LINK REL=&quot;STYLESHEET&quot; HREF=&quot;.\logstyle.css&quot; TYPE=&quot;text/css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;.\LogView4.js&quot;&gt;&lt;/script&gt;

&lt;title&gt;automation-beyond.com | TestLog XML/XSL Transformation Example by Albert Gareev&lt;/title&gt;
&lt;/head&gt;

&lt;body bgcolor=&quot;#c0c0c0&quot;&gt;

&lt;H1 align=&quot;center&quot;&gt;Test Log&lt;/H1&gt;
&lt;H4 align=&quot;center&quot;&gt;XML/XSL Transformation Example by &lt;A HREF=&quot;http://automation-beyond.com/about/&quot;&gt;Albert Gareev&lt;/A&gt;&lt;/H4&gt;
&lt;BR /&gt;
&lt;P /&gt;
&lt;h3 align=&quot;center&quot;&gt;Test Steps&lt;/h3&gt;
&lt;BR /&gt;
&lt;TABLE id=&quot;automation-beyond-2010&quot; BORDER=&quot;1&quot; width=&quot;650&quot; align=&quot;center&quot;&gt;
&lt;TR&gt;
  &lt;TH width=&quot;150&quot;&gt;Step Name&lt;/TH&gt;
  &lt;TH width=&quot;500&quot;&gt;Step Description&lt;/TH&gt;
&lt;/TR&gt;

&lt;xsl:for-each select=&quot;log/area&quot;&gt;
  &lt;xsl:call-template name=&quot;Display_Area&quot;&gt;
    &lt;xsl:with-param name=&quot;AttrDisplay&quot;&gt;display:block&lt;/xsl:with-param&gt;
  &lt;/xsl:call-template&gt;
&lt;/xsl:for-each&gt;
&lt;/TABLE&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;

&lt;div class=&quot;PageBottomLine&quot; align=&quot;center&quot;&gt;
&lt;A HREF=&quot;http://automation-beyond.com/chapters/tutorials/test-reports/&quot;&gt;Home&lt;/A&gt;
&lt;/div&gt;
&lt;BR /&gt;

&lt;/body&gt;

&lt;/html&gt;
&lt;/xsl:template&gt;

&lt;!-- **************Sub-Templates****************************************** --&gt;

&lt;!-- **************Area****************************************** --&gt;
&lt;xsl:template name=&quot;Display_Area&quot;&gt;
   &lt;xsl:param name=&quot;AttrDisplay&quot;/&gt;

&lt;TR style=&quot;display:none&quot;&gt;
   &lt;xsl:attribute name=&quot;id&quot;&gt;&lt;xsl:value-of select = &quot;@id&quot; /&gt;-W010&lt;/xsl:attribute&gt;
   &lt;TD valign=&quot;bottom&quot; colspan=&quot;2&quot;&gt;
   &lt;HR /&gt;
   &lt;/TD&gt;

&lt;/TR&gt;

&lt;TR&gt;
   &lt;xsl:attribute name=&quot;style&quot;&gt;&lt;xsl:value-of select = &quot;$AttrDisplay&quot; /&gt;&lt;/xsl:attribute&gt;
   &lt;xsl:attribute name=&quot;id&quot;&gt; &lt;xsl:value-of select = &quot;@id&quot; /&gt; &lt;/xsl:attribute&gt;

   &lt;TD valign=&quot;bottom&quot;&gt;
     &lt;IMG src=&quot;.\right1.png&quot; onmouseover=&quot;this.style.cursor='hand'&quot; &gt;
       &lt;xsl:attribute name=&quot;id&quot;&gt;&lt;xsl:value-of select = &quot;@id&quot; /&gt;-I010&lt;/xsl:attribute&gt;
       &lt;xsl:attribute name=&quot;onClick&quot;&gt;ShowHide('&lt;xsl:value-of select = &quot;@id&quot; /&gt;')&lt;/xsl:attribute&gt;
     &lt;/IMG&gt;

   Area
   &lt;/TD&gt;

  &lt;TD&gt;&lt;xsl:value-of select = &quot;description&quot; /&gt;&lt;/TD&gt;

&lt;/TR&gt;

 &lt;xsl:for-each select=&quot;step&quot;&gt;
  &lt;xsl:choose&gt;

    &lt;xsl:when test = &quot; @type = '#note' &quot;&gt;
      &lt;xsl:call-template name=&quot;Display_Note&quot;&gt;
        &lt;xsl:with-param name=&quot;AttrDisplay&quot;&gt;display:none&lt;/xsl:with-param&gt;
	&lt;/xsl:call-template&gt;
    &lt;/xsl:when&gt;

    &lt;xsl:when test = &quot; @type = '#idea' &quot;&gt;
      &lt;xsl:call-template name=&quot;Display_Idea&quot;&gt;
        &lt;xsl:with-param name=&quot;AttrDisplay&quot;&gt;display:none&lt;/xsl:with-param&gt;
	&lt;/xsl:call-template&gt;
    &lt;/xsl:when&gt;

    &lt;xsl:when test = &quot; @type = '#bug' &quot;&gt;
      &lt;xsl:call-template name=&quot;Display_Bug&quot;&gt;
        &lt;xsl:with-param name=&quot;AttrDisplay&quot;&gt;display:none&lt;/xsl:with-param&gt;
	&lt;/xsl:call-template&gt;
    &lt;/xsl:when&gt;

    &lt;xsl:otherwise&gt;
      &lt;TR&gt;
        &lt;TD&gt;Error&lt;/TD&gt;
        &lt;TD&gt;XML data error&lt;/TD&gt;
     &lt;/TR&gt;
    &lt;/xsl:otherwise&gt;

  &lt;/xsl:choose&gt;
 &lt;/xsl:for-each&gt;

&lt;TR style=&quot;display:none&quot;&gt;
   &lt;xsl:attribute name=&quot;id&quot;&gt;&lt;xsl:value-of select = &quot;@id&quot; /&gt;-W020&lt;/xsl:attribute&gt;
   &lt;TD valign=&quot;bottom&quot; colspan=&quot;2&quot;&gt;
   &lt;HR /&gt;
   &lt;/TD&gt;

&lt;/TR&gt;

&lt;/xsl:template&gt;

&lt;!-- **************Test Note****************************************** --&gt;
&lt;xsl:template name=&quot;Display_Note&quot;&gt;
 &lt;xsl:param name=&quot;AttrDisplay&quot;/&gt;

  &lt;TR&gt;
   &lt;xsl:attribute name=&quot;style&quot;&gt;&lt;xsl:value-of select = &quot;$AttrDisplay&quot; /&gt;&lt;/xsl:attribute&gt;
   &lt;xsl:attribute name=&quot;id&quot;&gt; &lt;xsl:value-of select = &quot;@id&quot; /&gt; &lt;/xsl:attribute&gt;
      &lt;TD&gt;
        &lt;xsl:attribute name=&quot;title&quot;&gt;&lt;xsl:value-of select = &quot;time&quot; /&gt;&lt;/xsl:attribute&gt;
        Test Note
      &lt;/TD&gt;
      &lt;TD&gt;&lt;xsl:value-of select = &quot;description&quot; /&gt;&lt;xsl:value-of select = &quot;$CHAR_SPC&quot; /&gt;&lt;/TD&gt;
  &lt;/TR&gt;
&lt;/xsl:template&gt;

&lt;!-- **************Test Idea****************************************** --&gt;
&lt;xsl:template name=&quot;Display_Idea&quot;&gt;
 &lt;xsl:param name=&quot;AttrDisplay&quot;/&gt;

  &lt;TR&gt;
   &lt;xsl:attribute name=&quot;style&quot;&gt;&lt;xsl:value-of select = &quot;$AttrDisplay&quot; /&gt;&lt;/xsl:attribute&gt;
   &lt;xsl:attribute name=&quot;id&quot;&gt; &lt;xsl:value-of select = &quot;@id&quot; /&gt; &lt;/xsl:attribute&gt;
      &lt;TD&gt;
        &lt;xsl:attribute name=&quot;title&quot;&gt;&lt;xsl:value-of select = &quot;time&quot; /&gt;&lt;/xsl:attribute&gt;
        &lt;IMG src=&quot;.\test_idea.png&quot; /&gt;
        Test Idea
      &lt;/TD&gt;
      &lt;TD&gt;&lt;xsl:value-of select = &quot;description&quot; /&gt;&lt;xsl:value-of select = &quot;$CHAR_SPC&quot; /&gt;&lt;/TD&gt;
  &lt;/TR&gt;
&lt;/xsl:template&gt;

&lt;!-- **************Logged Bug****************************************** --&gt;
&lt;xsl:template name=&quot;Display_Bug&quot;&gt;
 &lt;xsl:param name=&quot;AttrDisplay&quot;/&gt;

  &lt;TR&gt;
   &lt;xsl:attribute name=&quot;style&quot;&gt;&lt;xsl:value-of select = &quot;$AttrDisplay&quot; /&gt;&lt;/xsl:attribute&gt;
   &lt;xsl:attribute name=&quot;id&quot;&gt; &lt;xsl:value-of select = &quot;@id&quot; /&gt; &lt;/xsl:attribute&gt;
      &lt;TD&gt;
        &lt;xsl:attribute name=&quot;title&quot;&gt;&lt;xsl:value-of select = &quot;time&quot; /&gt;&lt;/xsl:attribute&gt;
        &lt;IMG src=&quot;.\bug.png&quot; /&gt;
        Bug
      &lt;/TD&gt;

      &lt;xsl:choose&gt;
        &lt;xsl:when test=&quot; flags/@screenshot = 'YES' &quot;&gt;
          &lt;TD&gt;
 	      &lt;xsl:attribute name=&quot;title&quot;&gt;Click on the link to view the image attached&lt;/xsl:attribute&gt;
	      &lt;A style=&quot;text-decoration: none&quot; TARGET=&quot;_blank&quot;&gt;
		  &lt;xsl:attribute name=&quot;href&quot;&gt;
		    &lt;xsl:value-of select=&quot;screenshot&quot; /&gt;
		  &lt;/xsl:attribute&gt;
              &lt;IMG border=&quot;0&quot; src=&quot;.\picture_save.png&quot; onmouseover=&quot;this.style.cursor='hand'&quot; /&gt;
            &lt;/A&gt;
            &lt;xsl:value-of select = &quot;$CHAR_SPC&quot; /&gt;
            &lt;span class=&quot;stFAIL_m1&quot;&gt;&lt;xsl:value-of select = &quot;description&quot; /&gt;&lt;/span&gt;
          &lt;/TD&gt;
        &lt;/xsl:when&gt;

        &lt;xsl:otherwise&gt;
          &lt;TD&gt;
            &lt;span class=&quot;stFAIL_m1&quot;&gt;&lt;xsl:value-of select = &quot;description&quot; /&gt;&lt;xsl:value-of select = &quot;$CHAR_SPC&quot; /&gt;&lt;/span&gt;
          &lt;/TD&gt;
        &lt;/xsl:otherwise&gt;
      &lt;/xsl:choose&gt;

  &lt;/TR&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</pre>
<p>Last but not least, the <a href="http://automation-beyond.com/wp/wp-content/uploads/2011/03/FinalExample.zip" target="_blank">package</a> containing the original XML, XSL, CSS, and image files.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2011/03/01/generating-test-reports-the-approach/" rel="bookmark" class="crp_title">Generating Test Reports (the approach)</a></li><li><a href="http://automation-beyond.com/2011/06/14/expand-collapse-html-javascript/" rel="bookmark" class="crp_title">Exploring options for Expand/Collapse (HTML, JavaScript)</a></li><li><a href="http://automation-beyond.com/2011/02/14/generating-test-reports-mindmap/" rel="bookmark" class="crp_title">Generating Test Reports (MindMap)</a></li><li><a href="http://automation-beyond.com/2011/03/04/xsl-tree-2-table/" rel="bookmark" class="crp_title">XML/XSL Transformation: Tree to Table</a></li><li><a href="http://automation-beyond.com/2011/03/02/xsl-stats-table/" rel="bookmark" class="crp_title">XML/XSL Transformation: Stats Table</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/06/23/generating-test-reports-final-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring options for Expand/Collapse (HTML, JavaScript)</title>
		<link>http://automation-beyond.com/2011/06/14/expand-collapse-html-javascript/</link>
		<comments>http://automation-beyond.com/2011/06/14/expand-collapse-html-javascript/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 10:01:25 +0000</pubDate>
		<dc:creator>Albert Gareev</dc:creator>
				<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[2. Testing]]></category>
		<category><![CDATA[3. Automation]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[expand. collapse]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[RapidReporter]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[reproducible]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[stylesheet]]></category>
		<category><![CDATA[Sub]]></category>
		<category><![CDATA[Sub-Template]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[testcomplete]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[transformation]]></category>
		<category><![CDATA[tree]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://automation-beyond.com/?p=4394</guid>
		<description><![CDATA[Parent page: Generating Test Reports Today&#8217;s post is a little bit of a side mini-project within the test reports theme. What I wanted is to add more structure in test logs, but made it summarized. So I went to explore about simple approaches in that. Very often, on static pages (without AJAX) the approach used is [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fautomation-beyond.com%252F2011%252F06%252F14%252Fexpand-collapse-html-javascript%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fkupx3y%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Exploring%20options%20for%20Expand%2FCollapse%20%28HTML%2C%20JavaScript%29%22%20%7D);"></div>
<p>Parent page: <a href="http://automation-beyond.com/chapters/tutorials/test-reports/" target="_blank">Generating Test Reports</a></p>
<p>Today&#8217;s post is a little bit of a side mini-project within the test reports theme. What I wanted is to add more structure in test logs, but made it summarized. So I went to explore about simple approaches in that.</p>
<p>Very often, on static pages (without AJAX) the approach used is switching HTML blocks between visible and invisible state. I provide a couple of working examples below.</p>
<p><div style="position: relative; z-index:1;"><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* Banner 468x60 */
google_ad_slot = "8933038987";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
<h4>Example 1 &#8211; Table In a Table</h4>
<pre class="brush: xml; title: ;">

&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--mce:0--&gt;&lt;/script&gt;

&lt;!--
th{
text-align: left;
cursor: pointer;
}
table tbody tr td{
padding-left: 15px;
}
--&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th onclick=&quot;ShowHide(this)&quot;&gt;Log&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sub 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th onclick=&quot;ShowHide(this)&quot;&gt;Sub 1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th onclick=&quot;ShowHide(this)&quot;&gt;sub 1 1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sub 1 1 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sub 1 1 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sub 2 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;a href=&quot;http://automation-beyond.com/chapters/tutorials/test-reports/&quot;&gt;Home&lt;/a&gt;&lt;/div&gt;
</pre>
<p>And here is the demo file to download: <a href="http://automation-beyond.com/wp/wp-content/uploads/2011/03/Collapse1.html" target="_blank">Collapse1</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4470793787913935";
/* 4 links text line */
google_ad_slot = "5367351963";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h4>Example 2 &#8211; Unique Blocks Inside the Table</h4>
<pre class="brush: xml; title: ;">

&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--mce:1--&gt;&lt;/script&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th onclick=&quot;ShowHide('1')&quot;&gt;Area 1&lt;/th&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody id=&quot;1&quot;&gt;
&lt;tr&gt;
&lt;td&gt;Test Note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Note&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th onclick=&quot;ShowHide('2')&quot;&gt;Area 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody id=&quot;2&quot; style=&quot;display: block;&quot;&gt;
&lt;tr&gt;
&lt;td&gt;Test Note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Note&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;a href=&quot;http://automation-beyond.com/chapters/tutorials/test-reports/&quot;&gt;Home&lt;/a&gt;&lt;/div&gt;
</pre>
<p>And here is the demo file to download: <a href="http://automation-beyond.com/wp/wp-content/uploads/2011/03/Collapse2.html" target="_blank">Collapse2</a></p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://automation-beyond.com/2011/11/07/groundspeed/" rel="bookmark" class="crp_title">Exploratory Security Testing Tool &#8211; GroundSpeed</a></li><li><a href="http://automation-beyond.com/2010/06/01/testing-challenge-real-time-input/" rel="bookmark" class="crp_title">Testing Challenge: real-time input game</a></li><li><a href="http://automation-beyond.com/2009/07/20/comparison-wiki-link/" rel="bookmark" class="crp_title">Participate in &#8220;Test Automation Comparison Wiki&#8221;</a></li><li><a href="http://automation-beyond.com/2011/03/01/generating-test-reports-the-approach/" rel="bookmark" class="crp_title">Generating Test Reports (the approach)</a></li><li><a href="http://automation-beyond.com/2007/08/10/links-xml/" rel="bookmark" class="crp_title">Link-a-log: XML/XSL/XPath</a></li></ul></div>
]]></content:encoded>
			<wfw:commentRss>http://automation-beyond.com/2011/06/14/expand-collapse-html-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

