<?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/"
	>

<channel>
	<title>Jaunty@软件测试，音乐，还有不一样的生活 &#187; QTP</title>
	<atom:link href="http://jaunty.me/blog/tag/qtp/feed/" rel="self" type="application/rss+xml" />
	<link>http://jaunty.me/blog</link>
	<description>软件测试，自动化测试，QTP，Loadrunner，Java，软件开发，性能测试，开源</description>
	<lastBuildDate>Tue, 24 Aug 2010 03:40:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>这两天QTP出错记录</title>
		<link>http://jaunty.me/blog/2009/02/qtp_error_recor/</link>
		<comments>http://jaunty.me/blog/2009/02/qtp_error_recor/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 16:27:19 +0000</pubDate>
		<dc:creator>jaunty</dc:creator>
				<category><![CDATA[自动化测试]]></category>
		<category><![CDATA[Automation Test Framework]]></category>
		<category><![CDATA[QTP]]></category>

		<guid isPermaLink="false">http://jaunty.me/blog/?p=100</guid>
		<description><![CDATA[1. 作关键字驱动脚本的一个小试验
Browser(&#8220;Find a Flight: Mercury&#8221;).Sync
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebRadioGroup(&#8220;tripType&#8221;).Select &#8220;oneway&#8221;
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;passCount&#8221;).Select &#8220;1&#8243;
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;fromPort&#8221;).Select &#8220;London&#8221;
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;fromMonth&#8221;).Select &#8220;March&#8221;
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;fromDay&#8221;).Select &#8220;27&#8243;
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;toPort&#8221;).Select &#8220;New York&#8221;
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;toMonth&#8221;).Select &#8220;April&#8221;
Browser(&#8220;Find [...]]]></description>
			<content:encoded><![CDATA[<p>1. 作关键字驱动脚本的一个小试验</p>
<p>Browser(&#8220;Find a Flight: Mercury&#8221;).Sync<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebRadioGroup(&#8220;tripType&#8221;).Select &#8220;oneway&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;passCount&#8221;).Select &#8220;1&#8243;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;fromPort&#8221;).Select &#8220;London&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;fromMonth&#8221;).Select &#8220;March&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;fromDay&#8221;).Select &#8220;27&#8243;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;toPort&#8221;).Select &#8220;New York&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;toMonth&#8221;).Select &#8220;April&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;toDay&#8221;).Select &#8220;21&#8243;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebRadioGroup(&#8220;servClass&#8221;).Select &#8220;First&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).WebList(&#8220;airline&#8221;).Select &#8220;No Preference&#8221;<br />
Browser(&#8220;Find a Flight: Mercury&#8221;).Page(&#8220;Find a Flight: Mercury&#8221;).Image(&#8220;findFlights&#8221;).Click</p>
<p> </p>
<p><span id="more-100"></span></p>
<p>第2行后面“oneway” 第一次写成“Oneway”了<br />
注意大小写敏感<br />
出错信息是 没有包含在Object‘s  item collection。</p>
<p>2. 作基本的脚本录制回放<br />
Browser(&#8220;Welcome: Mercury Tours&#8221;).Page(&#8220;Welcome: Mercury Tours&#8221;).Sync<br />
Browser(&#8220;Welcome: Mercury Tours&#8221;).Page(&#8220;Welcome: Mercury Tours&#8221;).WebEdit(&#8220;userName&#8221;).Set &#8220;jaunty&#8221;<br />
Browser(&#8220;Welcome: Mercury Tours&#8221;).Page(&#8220;Welcome: Mercury Tours&#8221;).WebEdit(&#8220;password&#8221;).SetSecure &#8220;47cd03a82c95a6103581c815c580052e1720fdfd&#8221;<br />
Browser(&#8220;Welcome: Mercury Tours&#8221;).Page(&#8220;Welcome: Mercury Tours&#8221;).Image(&#8220;Sign-In&#8221;).Click 10,2</p>
<p>第一行Browser的语句，第一次没有给加载页面的过程加同步点 因为想着第一次 页面load 不需要做前提条件。<br />
后来回放的时候 WebEdit对象“userName” 一直对象disabled.<br />
个人猜测是由于机器太慢load太久 但测试步骤已经开始导致<br />
加入同步点解决。</p>
<p>（页面加载过程也需要同步点。。。汗。。。）<br />
后来在windowsForm程序 开始Launcher的时候 也需要加入同步点，第一次回访出现对象disabled问题<br />
加入同步点后解决。</p>
<p> </p>
<p> </p>
<p>3. 描述性编程小实验<br />
Dialog(&#8220;Login&#8221;).WinEdit(&#8220;Agent Name:&#8221;).Set &#8220;jaunty&#8221;<br />
Dialog(&#8220;Login&#8221;).WinEdit(&#8220;Password:&#8221;).SetSecure &#8220;47d888b608eeba747a9be67b7464720d04f7e08e&#8221;<br />
Dialog(&#8220;Login&#8221;).WinObject(&#8220;nativeclass:=Button&#8221;, &#8220;text:=OK&#8221;).Click<br />
Window(&#8220;Flight Reservation&#8221;).WinMenu(&#8220;Menu&#8221;).Select &#8220;File;Exit&#8221;</p>
<p>第三行，第一次忘记在两个属性之间加入空格，导致执行第三行的时候 QTP无法识别下来的动作。无错误信息，就是执行不到下一步！</p>
<p>加入空格解决。</p>
<p> </p>
<p>4. 脚本运行前对待测程序的保证</p>
<p>If not Dialog(&#8220;Login&#8221;).Exist Then<br />
 SystemUtil.Run &#8220;C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe&#8221;<br />
End If</p>
<p>当然最一开始要加入一个语句判断一下所要操作的Object打开了没有。没有的话要打开</p>
]]></content:encoded>
			<wfw:commentRss>http://jaunty.me/blog/2009/02/qtp_error_recor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QTP执行过程对抛出窗口录入的密码的加密和录入的数据的获得</title>
		<link>http://jaunty.me/blog/2009/02/qtp_password-windows_mask/</link>
		<comments>http://jaunty.me/blog/2009/02/qtp_password-windows_mask/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 16:20:19 +0000</pubDate>
		<dc:creator>jaunty</dc:creator>
				<category><![CDATA[自动化测试]]></category>
		<category><![CDATA[Automation Test Framework]]></category>
		<category><![CDATA[QTP]]></category>

		<guid isPermaLink="false">http://jaunty.me/blog/?p=94</guid>
		<description><![CDATA[有这样一种需求，就是在QTP回放的过程中需要抛出一个录入框，操作者录入的密码显示是加密的（*****的样子），但是要能在后面的脚本获取操作者输入的数据。
可能很多人要问，自动化的过程为什么要人去输入操作。
 
这里先把这个问题的前提阐述一下：
我们的脚本是全球共享的，每个tester都有自己的用户名密码 去访问那个脚本 所以在access脚本的前面就需要QTP 弹出一个交互的对话框让tester去登陆才能access到 脚本的专署的信息，却又不能看到其他人的信息。
经过核查QTP 目前没有发现可以加密的函数，vbs也没有内置的function来提供这种功能。
所以结决方案的思路就是调用IE来create masked对话框
代码如下： 只需要copy到QTP的专家视图，直接run就可以了（也可单独保存为VBS文件运行）


strPw = GetPassword( &#8220;Please enter your password:&#8221; )51Testing软件测试网:z d P7]J
msgbox strPw


51Testing软件测试网.o/wtxrp2X(f4O7l
Function GetPassword( myPrompt )


Dim objIE51Testing软件测试网4x,j? v8S^
&#8216; Create an IE object51Testing软件测试网,eghGE1x
Set ōbjIE = CreateObject( &#8220;InternetExplorer.Application&#8221; )51Testing软件测试网w!\&#8217;M&#8221;N8\Y VSd
&#8216; specify some of the IE window&#8217;s settings51Testing软件测试网$Hx^Vu_
objIE.Navigate &#8220;about:blank&#8221;51Testing软件测试网8v/d8S ](@^7~
objIE.Document.Title = &#8220;Password&#8221;51Testing软件测试网3@4^#{.}#hT,v*vp
objIE.ToolBar = False
+j3~.X6Y5H21468objIE.Resizable = False51Testing软件测试网E iX _ {4X n/~w&#8221;L
objIE.StatusBar = False
$~Y7w9d,h4~21468objIE.Width = [...]]]></description>
			<content:encoded><![CDATA[<p>有这样一种需求，就是在<a onclick="tagshow(event, 'QTP');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong><span style="color: #000066;">QTP</span></strong></span></a>回放的过程中需要抛出一个录入框，操作者录入的密码显示是<a onclick="tagshow(event, '%BC%D3%C3%DC');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong><span style="color: #000066;">加密</span></strong></span></a>的（*****的样子），但是要能在后面的脚本获取操作者输入的数据。</p>
<p>可能很多人要问，<a onclick="tagshow(event, '%D7%D4%B6%AF%BB%AF');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong><span style="color: #000066;">自动化</span></strong></span></a>的过程为什么要人去输入操作。</p>
<p> </p>
<p>这里先把这个问题的前提阐述一下：</p>
<p>我们的脚本是全球共享的，每个tester都有自己的用户名密码 去访问那个脚本 所以在access脚本的前面就需要QTP 弹出一个交互的对话框让tester去登陆才能access到 脚本的专署的信息，却又不能看到<a onclick="tagshow(event, '%C6%E4%CB%FB');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong><span style="color: #000066;">其他</span></strong></span></a>人的信息。</p>
<p>经过核查QTP 目前没有发现可以加密的函数，vbs也没有内置的function来提供这种功能。</p>
<p>所以结决方案的思路就是调用IE来create masked对话框</p>
<p>代码如下： 只需要copy到QTP的专家视图，直接run就可以了（也可单独保存为VBS文件运行）</p>
<p><span id="more-94"></span></p>
<div>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">strPw = GetPassword( &#8220;Please enter your password:&#8221; )<span style="display: none;">51Testing软件测试网:z d P7]J</span><br />
msgbox strPw</span></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;"><span style="display: none;">51Testing软件测试网.o/wtxrp2X(f4O7l</span><br />
Function GetPassword( myPrompt )</span></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">Dim objIE<span style="display: none;">51Testing软件测试网4x,j? v8S^</span><br />
&#8216; Create an IE object<span style="display: none;">51Testing软件测试网,eghGE1x</span><br />
Set ōbjIE = CreateObject( &#8220;InternetExplorer.Application&#8221; )<span style="display: none;">51Testing软件测试网w!\&#8217;M&#8221;N8\Y VSd</span><br />
&#8216; specify some of the IE window&#8217;s settings<span style="display: none;">51Testing软件测试网$Hx^Vu_</span><br />
objIE.Navigate &#8220;about:blank&#8221;<span style="display: none;">51Testing软件测试网8v/d8S ](@^7~</span><br />
objIE.Document.Title = &#8220;Password&#8221;<span style="display: none;">51Testing软件测试网3@4^#{.}#hT,v*vp</span><br />
objIE.ToolBar = False<br />
<span style="display: none;">+j3~.X6Y5H21468</span>objIE.Resizable = False<span style="display: none;">51Testing软件测试网E iX _ {4X n/~w&#8221;L</span><br />
objIE.StatusBar = False<br />
<span style="display: none;">$~Y7w9d,h4~21468</span>objIE.Width = 320<br />
<span style="display: none;">A7p(~j5PW%h+X21468</span>objIE.Height = 180</span></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">Do While objIE.Busy<span style="display: none;">51Testing软件测试网 OqM%d\%h</span><br />
<span style="display: none;">51Testing软件测试网A*Y,o!H]m%y</span><br />
Loop<span style="display: none;">51Testing软件测试网Ctt/p*Q+U4F_</span><br />
&#8216; Insert the HTML code to prompt for a password<br />
<span style="display: none;">!~*H%yEh21468</span>objIE.Document.Body.InnerHTML = &#8220;&lt;DIV align=&#8221;"center&#8221;"&gt;&lt;P&gt;&#8221; &amp; myPrompt _<span style="display: none;">51Testing软件测试网;hTg3}Z.o2N</span><br />
&amp; &#8220;&lt;/P&gt;&#8221; &amp; vbCrLf _<span style="display: none;">51Testing软件测试网8?d%s E(G+d8K9|j8?</span><br />
&amp; &#8220;&lt;P&gt;&lt;INPUT TYPE=&#8221;"password&#8221;" SIZE=&#8221;"20&#8243;&#8221; &#8221; _<br />
<span style="display: none;">O?W9{9q2o Pm*@B21468</span>&amp; &#8220;ID=&#8221;"Password&#8221;"&gt;&lt;/P&gt;&#8221; &amp; vbCrLf _<span style="display: none;">51Testing软件测试网j{sj+E:c6b</span><br />
&amp; &#8220;&lt;P&gt;&lt;INPUT TYPE=&#8221;"hidden&#8221;" ID=&#8221;"OK&#8221;" &#8221; _<br />
<span style="display: none;">0t,jR ]n&#8221;[:j21468</span>&amp; "NAME=""OK"" VALUE=""0""&gt;" _<br />
<span style="display: none;">r+uOi/H'B5t/Xh@a8X21468</span>&amp; "&lt;INPUT TYPE=""submit"" VALUE="" OK "" " _<br />
<span style="display: none;">\+t0q-~o(R-t21468</span>&amp; "OnClick=""VBscrīpt:OK.Value=1""&gt;&lt;/P&gt;&lt;/DIV&gt;"<span style="display: none;">51Testing软件测试网\%@LH/I"~3^EY&amp;]</span><br />
&#8216; Make the window visible<br />
<span style="display: none;">+R` `s(P L+P5l_21468</span>objIE.Visible = True<br />
<span style="display: none;">eRIS}L-ckn21468</span>&#8216; Wait till the OK button has been clicked<span style="display: none;">51Testing软件测试网8b~S s*I^ qu%v</span><br />
Do While objIE.Document.All.OK.Value = 0</span></span></p>
</div>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">Loop</span></span><span style="display: none;">51Testing软件测试网3D{8C2] wN$v5o</span><br />
<span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">&#8216; Read the password from the dialog window<br />
<span style="display: none;">,Zp&amp;Um@7?e?A21468</span>GetPassword = objIE.Document.All.Password.Value<span style="display: none;">51Testing软件测试网0~N6nc&amp;`&#8221;N%t J(Cs(T</span><br />
&#8216; Close and release the object<span style="display: none;">51Testing软件测试网~5u B3F.Ef</span><br />
objIE.Quit<br />
<span style="display: none;">o-GXZkl#El21468</span>Set ōbjIE = Nothing<br />
<span style="display: none;">Owl.m9| H9e21468</span>End Function</span></span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">参考信息：</span></span></p>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000066; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;"><a href="http://www.microsoft.com/technet/scrīptcenter/resources/qanda/feb05/hey0204.mspx">http://www.microsoft.com/technet/scrīptcenter/resources/qanda/feb05/hey0204.mspx</a></span></span></p>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span></span></p>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">另外</span></span></p>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;">（1）如果在正常的情况下需要加密密码，QTP提供password encoder 可以generate 出加密后的string。</span></span></p>
<p class="MsoNormal"><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"><span style="font-size: 8pt; color: black; font-family: Tahoma;"><span class="035495209-05062008"><span style="color: #000000;">（2） 显示密码信息</span></span></span></span></p>
<p class="MsoNormal">
<div></div>
<p><span style="font-size: xx-small; color: #000000; font-family: Tahoma;"></p>
<p class="MsoNormal"><span style="font-size: 8pt; color: black; font-family: Tahoma;"><span class="035495209-05062008"><span style="color: #000000;"> 抓取密码</span></span></span></p>
<p></span></p>
<p> <span style="color: #0000ff;"> getROProperty(&lt;Object Property the Stores the Password&gt;)</span> &#8230;ie try <span style="color: #0000ff;">getROProperty(&#8220;Password&#8221;)</span></p>
<div><span class="035495209-05062008"><span style="color: #000000;">显示信息</span></span></div>
<div><span class="035495209-05062008">       </span><span style="font-size: 10pt; color: #15326b; font-family: 'Courier New';" lang="EN-GB"><span style="color: #0000ff; font-family: Arial;">MsgBox </span></span></div>
<div><span style="font-size: 10pt; color: #15326b; font-family: 'Courier New';" lang="EN-GB"><span style="color: #000000; font-family: Arial;">（3）对某些列进行掩盖：</span></span></div>
<div><span style="font-size: 10pt; color: #15326b; font-family: 'Courier New';" lang="EN-GB"><span style="color: #000000;">Browser(&#8220;Browser&#8221;).Page(&#8220;Webpage&#8221;).WebEdit(&#8220;txtPassword&#8221;).<strong><em>SetSecure</em></strong> (&#8220;User password&#8221;)</span></span></div>
<div><span style="font-size: 10pt; color: #15326b; font-family: 'Courier New';" lang="EN-GB"></span> </div>
<p class="MsoNormal">
]]></content:encoded>
			<wfw:commentRss>http://jaunty.me/blog/2009/02/qtp_password-windows_mask/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
