问题描述 项目脚本一开始就是通过QTP内置关键字去关闭所有IE,接着再通过关键字systemutil.Run “C:\Program Files\Internet Explorer\iexplore.exe” 来启动IE。接下来是开始一个Browser().sync的Code,整个脚本就正好到Sync这个方法这里开始出错。
问题分析
首先,我们到这一步出错的地方用Debug,再用spy下会发现,Browser已经被识别成糟糕的Window。所以我们可以判断这个情况是因为BHO控件没有加载进IE而导致的。一般导致这个情况的,是先启动IE再启动QTP导致的。但这个问题为什么会在这里出现?
其次,我们使用了其它3种常用方法去启动IE8,
1,
Set IE=createobject(“internetExplorer.application”)
IE.visible=true
2,
systemutil.Run “C:\Program Files\Internet Explorer\iexplore.exe”
3,
set wshshell = createobject(“wscript.shell”)
wshshell.exec “C:\Program Files\Internet Explorer\iexplore.exe”
4,通过Automation-Recored and run setting中的设置URL路径
其中前3种方法在QTP中启动IE都无加载控件。但是,第4种方法却能够成功的把这个IE的对象识别成Browser.
问题解决
1,在脚本中,我们直接使用systemutil.Run “iexplore.exe” 便可成功识别出IE8。
2,在IE7中,无论我们用那一种方式,是否是绝对路径或者是iexplore.exe,都能够成功识别。
3,导致这个问题的发生,有可能是IE8的启动机制会有所特别。所以QTP11会为IE8设置一个专门的启动方案,而这个方案的关键字就是iexplore.exe而不是它的整个路径,因为加入一个完整路径会变成启动某一个程序,QTP便不会做特殊处理,直接启动,而第4个方法应该是更能说明这个点。
总结:
1) QTP开启之后,才能开启IE。
2) QTP启动IE之后, BHO控件会加载进IE。
a) BHO控件 (Browser Helper Object), 它是IE和第三方程序的相互接口,程序员可以通过代码来控制浏览器的行为。当打开QTP后,然后开启IE 浏览器 时, QTP会默认把 BHO一个 dll类注入到 浏览器 来采取识别浏览器里的对象元素。
3)BHO加载成功的状态是 Enabled