在qtp测试中,如果出现页面对象获取不到的情况,我们可以适用描述性编程等方法强制获取页面元素,那么如果碰到使用以上方法仍然无法完成页面元素的操作的情况又该怎么办呢。我最近就碰到了这个问题。
场景为在一个自动化测试下有十余个脚本,每个脚本均通过描述性编程操作页面对象,几乎不使用对象库,并且在每个脚本均有for语句循环50次作用。当测试执行到第10个脚本时,就出现了object对象无法获取的情况。vbs代码如下
Set MyDescriptionOuterText=Description.Create()
MyDescriptionOuterText("micclass").value ="WebElement"
MyDescriptionOuterText("outertext").value ="how to handle"
Set MyDescriptionImage=Description.Create()
MyDescriptionImage("micclass").value ="Image"
Browser("Browser").Navigate http://192.168.12.250:81/s?howtohandle
Set MyChildObjectOuterText =Browser("Browser").Page("Page").ChildObjects(MyDescriptionOuterText)
msgbox MyChildObjectOuterText2.count
此时获取的count数为0,实际情况该页面上有不止一个该ojbect。
更令人费解的时,将该脚本放置整个测试的起始部分,让它第一个执行,该count数又恢复了正常,显示为2。
研究后猜测是循环迭代次数过多,可能是资源方面的问题,就在每个脚本下释放create()出的对象,未果。
又在第10个脚本执行前清除了cookies并重建session,该count奇迹般地变为了2.代码如下
webutil.DeleteCookies
Browser("Browser").CloseAllTabs
SystemUtil.Run "C:/Program Files/Internet Explorer/iexplore.exe","","","",3
Browser("Browser").Sync
之后又做了实验,将脚本顺序打乱,往往执行到10个脚本之后,出现这样那样的对象无法获取的问题。
猜测可能是和qtp资源方面有关系。真实原因还望各位大侠指点迷津。