遇到一个IE升级到IE8之后脚本无法跑的问题。那么对于这样的问题,我们需要如何去处理?

问题描述 项目脚本一开始就是通过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

你可能感兴趣的:(浏览器,object,IE,脚本,internet,browser)