<p>之前说过旺旺内嵌IE取得聊天记录的方法一,但是在实际试验中这种方法不稳定,因为有些机器上无法 辨识到该控件是PAGE(原因未明,可能和IE版本或其他环境因素有关系)。<br>
但是在客户端性能测试中需要了解加载聊天记录的时间,之前用过粗略的方法QTP自带的方法GetVisibleText,结果在测试过程中发现有时候肉眼都已经看见聊天记录了,但是<br>
脚本还是停留在GetVisibleText的语句行。所以必然是在获取内容上花了很多时间。而且该方法取值只能取得界面上看得见的聊天记录。那怎么才能取得完整的聊天记录而花费<br>
较少的时间呢。之前看过曾一讯演示的产品中可以抓取聊天记录,于是就像或者可以借取它的代码封装成一个dll来使用。顺着这个思路我开始了具体的工作。<br>
首先,了解一讯的代码发现是用IHTMLDocument2 这个东东,将测试对象的句柄传入转化成IHTMLDocument2接口,就可以对这个接口做一些事情了,因为这个接口提供了较丰<br>
富的方法。借取代码C#如下:<br>
public String findWWIE(int iihwdl)<br>
{<br>
IntPtr wbHandle = new IntPtr(iihwdl);</p>
<p>StringBuilder sb1 = new StringBuilder();</p>
<p>try<br>
{<br>
System.Object domObject = new System.Object();<br>
int tempInt = 0;<br>
System.Guid guidIEDocument2 = new Guid(); //应该是IHTMLDocument2的接口id<br>
int WM_Html_GETOBJECT = WinApiT.RegisterWindowMessage("WM_Html_GETOBJECT");</p>
<p>int W = WinApiT.SendMessage(wbHandle, WM_Html_GETOBJECT, 0, ref tempInt);<br>
int lreturn = WinApiT.ObjectFromLresult(W, ref guidIEDocument2, 0, ref domObject);<br>
mshtml.IHTMLDocument2 myDoc = (mshtml.IHTMLDocument2)domObject;</p>
<p>int heightsize = (int)(myDoc as HTMLDocumentClass).documentElement.getAttribute("scrollHeight", 0);<br>
int widthsize = (int)(myDoc as HTMLDocumentClass).documentElement.getAttribute("scrollWidth", 0);<br>
IEnumerable ieab =<br>
myDoc.all.OfType();//loginId</p>
<p>myDoc.forms.OfType();</p>
<p>sb1.Append(myDoc.body.outerText);<br>
//LogTextSet(myDoc.body.outerText, true);</p>
<p>for (int i = 0; i < ieab.Count(); i++)<br>
{<br>
sb1.Append(ieab.ElementAt(i).name + "/r/n");<br>
//LogTextSet(ieab.ElementAt(i).name + "/r/n", false);<br>
}</p>
<p>}<br>
catch (Exception ex)<br>
{<br>
//sb1.Append("Fatal Error:/r/n" + ex.Message);</p>
<p>}<br>
return sb1.ToString();<br>
}<br>
很简单吧,这里做了点小小的处理如让传入的为int对象;这样和QTP就无缝结合了,在这过程中还用Sky++验证了一下,结果犯了个小错误sky++用的是16进制,而c#用的<br>
是十进制,当然QTP中就没有这样的问题了。<br>
当然在编写上述代码的时候需要引入Microsoft.mshtml.dll。那么就有后面的问题了。当我在测试环境(10.1.151.32)中调试通过的时候,我就把他换到实际的开发环境中<br>
测试。结果报Microsoft.mshtml.dll没有找到,怎么办呢。当然是注册Microsoft.mshtml.dll了,那么如何注册.net dll呢。网上说用regasm.exe,<br>
命令 regasm Microsoft.mshtml.dll<br>
于是我用了,结果没有效果。还报错,怎么办呢<br>
打开assembly,直接把dll拖进去。搞定了,至于原因没有时间考究。反正不是解决问题的重点。<br>
接下来,我要验证一下这种方法和原来GetVisibleText哪个耗费的时间短点。具体看代码吧:<br>
Set obj1 = DotNetFactory.CreateInstance("TaijiData.commonfunc","C:/TaijiData.dll")<br>
Set obj3 = DotNetFactory.CreateInstance("QTPHELP.IEHelp","C:/QTPHELP.dll")<br>
For i = 0 to 5<br>
theDate1 = obj1.GetNow<br>
obj3.findWWIE(Window("cctv19790318").WinObject("Internet Explorer_Server").GetROProperty("hwnd"))<br>
'Window("cctv19790318").WinObject("Internet Explorer_Server").GetVisibleText<br>
theDate2 = obj1.GetNow<br>
print cstr(theDate2 - theDate1)<br>
Next<br>
结果证明我的猜想,用GetVisibleText用时大概1100毫秒<br>
用新的方法用时100毫秒<br>
顺便记录一下,在测试过程中还知道了GetROProperty和GetTOProperty的区别(大家自己看帮助吧,没有那么便宜的事情)。</p>
分享到:
相关推荐
第2篇-认识QTP操作窗体 第2篇-认识QTP操作窗体
qtp10破解和ie8补丁(包含QTP_00626.exe、QTPWEB_00037.EXE)
QTP10_IE8_补丁,主要用于QTP无法识别对象的问题。
QTP11 IE9 补丁包 支持IE9浏览器识别
安装好qtp9.2后打开qtp会报一个过期的错误,此文件介绍解决方法
QTP11补丁下载 - 支持IE保护模式 QTPWEB_00073.EXE
QTP_00850_HOTFIX_IE9
QTP 9.0 破解 方法QTP 9.0 破解 方法QTP 9.0 破解 方法QTP 9.0 破解 方法QTP 9.0 破解 方法QTP 9.0 破解 方法
QTP10安装包、破解方法、安装指导、安装插件问题解决方案
QTP破解工具及破解方法介绍
QTP集合问题,将一些常用问题解决内容共享
QTP10 win7 破解 方法,绝对可以破解!
win7+ie8 下使用qtp10,回放时会蓝屏,打上这个补丁就好了
QTP10+各个补丁的网址,因为速度太慢,我就放了一个网址,需要HP的账户名登录才可下载,建议没有HP账户的先注册一个
QTP11补丁发布 - 支持IE保护模式 This patch provides official support for testing applications in Internet Explorer when Internet Explorer is in protected mode. It includes support for working with ...
qtp IE64位支持补丁
对qtp10无法识别IE8组件的补丁.都是object
QTP环境变量使用方法,文档详细介绍了QTP环境变量的概念及其使用方法。
qtp与td的连接方法及常见问题解决方法.(详细步骤)
这个压缩文件中包含了QTP10.0以前的破解工具mgn-mqt82.exe以及破解方法