本帖最后由 泰然 于 2012-11-23 16:30 编辑
下面有一个真实的例子来演示一下,删除param note="wmode"后的QTP识别情况:
下面是一个flash.htm的代码(另外还需要一个放在同路径下的face.swf的FLASH文件):
- <html>
- <head><title>test flash1</title></head>
- <body>
- <div id="face3" style="">
- <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="500" height="405" id="FlashVars" align="middle">
- <param name="movie" value="face.swf" />
- <param name="FlashVars" value="" />
- <param name="allowScriptAccess" value="always" />
- <param name="wmode" value="transparent" />
- <embed width="500" height="405" src="face.swf" flashvars="" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" />
- </object>
- </div>
- </body>
- </html>
复制代码 说明:下面每次重新录制,需要关闭原来的QTP和web页面重新打开一个新qtp test和一个新的ie。
第一次录制
说明:没做任何处理,也没有画虚拟对象。
第一次录制时的SPY
录制脚本如下:
- SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE","","C:\Documents and Settings\Administrator","open"
- Browser("Browser").Page("Page").Sync
- Browser("Browser").Navigate "http://localhost:8081/webtest/flash.htm"
复制代码 对象被识别为WebElement(”FlashVars“),鼠标在flash上点击打开“打开文件”对话框这个事件未能被录制。
第二次录制
说明:在flash上“打开文件”按钮被画了一个虚拟对象
录制脚本发现没有任何变化,事件没有被录制,虚拟对象也没有被录制到
第三次录制
说明:将flash.htm源代码中“<param name=“wmode” value=“transparent” />”这行删除,第二次画的虚拟对象保留
录制前先把flash.htm页面打开,用spy点在flash上将对象识别并加到对象库中,发现这个对象是名为MacromediaFlashPlayerActiveX的WinObject对象。
第三次录制时的SPY
录制脚本如下:
- SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE","","C:\Documents and Settings\Administrator","open"
- Browser("Browser").Page("Page").Sync
- Browser("Browser").Navigate "http://localhost:8081/webtest/flash.htm"
- Browser("Browser").Page("flash test frame").WinObject("MacromediaFlashPlayerActiveX").VirtualButton("SelectFace").Click
复制代码 发现录制到了点击flash按钮的操作,也录制到了虚拟对象。
第四次录制
说明:这是最神奇的操作,因为第三次录制前需要开发人员修改源代码,而这次——不需要!
恢复最初的flash.htm的代码,就这么录制,那就录制出来第一次录制的相同代码,识别到了第一次录制中的相同对象,接着下面手写一行代码:
- SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE","","C:\Documents and Settings\Administrator","open"
- Browser("Browser").Page("Page").Sync
- Browser("Browser").Navigate "http://localhost:8081/webtest/flash.htm"
- Browser("Browser").Page("flash test frame").WebElement("FlashVars").Object.outerHTML="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0' width='500' height='405' id='FlashVars' align='middle'><param name='movie' value='js/face.swf' /><param name='FlashVars' value='' /><param name='allowScriptAccess' value='always' /><embed width='500' height='405' src='js/face.swf' flashvars='' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' /></object>"
复制代码 最后一行代码是手写的,内容是在WebElement(”FlashVars“)这个对象的原生属性.Object.outerHTML改掉,改掉的内容其实就是去掉“<param name=“wmode” value=“transparent” />”后的整个从<Object>开始到</Object>结束的全部内容。也就是说QTP这里动态改代码,不再需要开发人员改静态代码了。
这行代码加上后,执行脚本。
然后用SPY在flash上识别一下,发现原来的WebElement(”FlashVars“)现在变成了WinObject(“MacromediaFlashPlayerActiveX”),加入对象库,再次单独录制点击flash上按钮以“打开文件”对话框的操作
结果最终录制到如下内容:
- SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE","","C:\Documents and Settings\Administrator","open"
- Browser("Browser").Page("Page").Sync
- Browser("Browser").Navigate "http://localhost:8081/webtest/flash.htm"
- Browser("Browser").Page("flash test frame").WebElement("FlashVars").Object.outerHTML="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0' width='500' height='405' id='FlashVars' align='middle'><param name='movie' value='js/face.swf' /><param name='FlashVars' value='' /><param name='allowScriptAccess' value='always' /><embed width='500' height='405' src='js/face.swf' flashvars='' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' /></object>"
- Browser("Browser").Page("flash test frame").WinObject("MacromediaFlashPlayerActiveX").VirtualButton("SelectFace").Click
复制代码 和第三次录制一样,既录制到了点击flash按钮的操作,也录制到了虚拟对象。 |