QTP解决内嵌IE窗体方法2

简介:
 之前说过旺旺内嵌IE取得聊天记录的方法一,但是在实际试验中这种方法不稳定,因为有些机器上无法 辨识到该控件是PAGE(原因未明,可能和IE版本或其他环境因素有关系)。
       但是在客户端性能测试中需要了解加载聊天记录的时间,之前用过粗略的方法QTP自带的方法GetVisibleText,结果在测试过程中发现有时候肉眼都已经看见聊天记录了,但是脚本还是停留在GetVisibleText的语句行。所以必然是在获取内容上花了很多时间。而且该方法取值只能取得界面上看得见的聊天记录。那怎么才能取得完整的聊天记录而花费较少的时间呢。之前看过曾一讯演示的产品中可以抓取聊天记录,于是就像或者可以借取它的代码封装成一个dll来使用。顺着这个思路我开始了具体的工作。
         首先,了解一讯的代码发现是用IHTMLDocument2 这个东东,将测试对象的句柄传入转化成IHTMLDocument2接口,就可以对这个接口做一些事情了,因为这个接口提供了较丰富的方法。借取代码C#如下:
public String findWWIE(int iihwdl)
{
IntPtr wbHandle = new IntPtr(iihwdl);
StringBuilder sb1 = new StringBuilder();
try
{
System.Object domObject = new System.Object();
int tempInt = 0;
System.Guid guidIEDocument2 = new Guid(); //应该是IHTMLDocument2的接口id
int WM_Html_GETOBJECT = WinApiT.RegisterWindowMessage("WM_Html_GETOBJECT");
int W = WinApiT.SendMessage(wbHandle, WM_Html_GETOBJECT, 0, ref tempInt);
int lreturn = WinApiT.ObjectFromLresult(W, ref guidIEDocument2, 0, ref domObject);
mshtml.IHTMLDocument2 myDoc = (mshtml.IHTMLDocument2)domObject;
int heightsize = (int)(myDoc as HTMLDocumentClass).documentElement.getAttribute("scrollHeight", 0);
int widthsize = (int)(myDoc as HTMLDocumentClass).documentElement.getAttribute("scrollWidth", 0);
IEnumerable ieab =
myDoc.all.OfType();//loginId
myDoc.forms.OfType();
sb1.Append(myDoc.body.outerText);
//LogTextSet(myDoc.body.outerText, true);
for (int i = 0; i < ieab.Count(); i++)
{
sb1.Append(ieab.ElementAt(i).name + "\r\n");
//LogTextSet(ieab.ElementAt(i).name + "\r\n", false);
}
}
catch (Exception ex)
{
//sb1.Append("Fatal Error:\r\n" + ex.Message);
}
return sb1.ToString();
}
        很简单吧,这里做了点小小的处理如让传入的为int对象;这样和QTP就无缝结合了,在这过程中还用Sky++验证了一下,结果犯了个小错误sky++用的是16进制,而c#用的是十进制,当然QTP中就没有这样的问题了。
        当然在编写上述代码的时候需要引入Microsoft.mshtml.dll。那么就有后面的问题了。当我在测试环境(10.1.151.32)中调试通过的时候,我就把他换到实际的开发环境中测试。结果报Microsoft.mshtml.dll没有找到,怎么办呢。当然Microsoft.mshtml.dll了,那么如何注册.net dll呢。网上说用regasm.exe,命令 regasm Microsoft.mshtml.dll
于是我用了,结果没有效果。还报错,怎么办呢打开assembly,直接把dll拖进去。搞定了,至于原因没有时间考究。反正不是解决问题的重点。
        接下来,我要验证一下这种方法和原来GetVisibleText哪个耗费的时间短点。具体看代码吧:
Set obj1 = DotNetFactory.CreateInstance("TaijiData.commonfunc","C:\TaijiData.dll")
Set obj3 = DotNetFactory.CreateInstance("QTPHELP.IEHelp","C:\QTPHELP.dll")
For i = 0 to 5
theDate1 = obj1.GetNow
obj3.findWWIE(Window("cctv19790318").WinObject("Internet Explorer_Server").GetROProperty("hwnd"))
'Window("cctv19790318").WinObject("Internet Explorer_Server").GetVisibleText
theDate2 = obj1.GetNow
print cstr(theDate2 - theDate1)
Next
结果证明我的猜想,用GetVisibleText用时大概1100毫秒
用新的方法用时100毫秒
顺便记录一下,在测试过程中还知道了GetROProperty和GetTOProperty的区别(大家自己看帮助吧,没有那么便宜的事情)。
 


本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/282594,如需转载请自行联系原作者
相关文章
在masm32中获取IE版本的方法2
在masm32中获取IE版本的方法2
在masm32中获取并显示IE版本的方法1
在masm32中获取并显示IE版本的方法1
|
Web App开发
clearTimeout 方法在IE上的兼容问题
clearTimeout 方法在IE上的兼容问题
70 0
|
JavaScript 前端开发
关于 getBoundingClientRect 方法在360极速浏览器的 IE 兼容模式下获取 documentElement 宽度比在 IE 浏览器下面多 4px 的问题
关于 getBoundingClientRect 方法在360极速浏览器的 IE 兼容模式下获取 documentElement 宽度比在 IE 浏览器下面多 4px 的问题
88 0
关于 getBoundingClientRect 方法在360极速浏览器的 IE 兼容模式下获取 documentElement 宽度比在 IE 浏览器下面多 4px 的问题
|
Windows
Windows 技术篇-安装指定版本Internet Explorer浏览器方法,IE浏览器的升级和降级
Windows 技术篇-安装指定版本Internet Explorer浏览器方法,IE浏览器的升级和降级
413 0
Windows 技术篇-安装指定版本Internet Explorer浏览器方法,IE浏览器的升级和降级
|
Windows
Windows 技术篇-Internet Explorer浏览器启用方法,windows找不到ie浏览器解决办法
Windows 技术篇-Internet Explorer浏览器启用方法,windows找不到ie浏览器解决办法
161 0
Windows 技术篇-Internet Explorer浏览器启用方法,windows找不到ie浏览器解决办法