3.遍历所有IE浏览器窗口
可以使用Windows的SHELL.Application遍历所有打开的IE浏览器窗口,并在所有打开的窗口中判断其窗口是否为IE浏览器窗口后存入字典对象集合中。在这里写一个遍历所有IE浏览器窗口并且返回一个字典对象集合的Function函数。
'遍历所有IE对象 Function EnumerateIE() On Error Resume Next '创建一个字典对象并返回所有当前打开的IE集合 Set EnumerateIE = CreateObject("Scripting.Dictionary") '获取所有Windows窗口 Set oWinShell = CreateObject("Shell.Application") Set allWindows = oWinShell.Windows '遍历每个Windows窗口 For Each oWindow In allWindows '检查如果是IE就添加字典对象中 If InStr(1, oWindow.FullName, "iexplore.exe",vbTextCompare) Then EnumerateIE.Add oWindow.hwnd, oWindow End if Next End Function |
接着就可以对此函数进行应用了,例如,关闭所有IE窗口:
'获取所有IE窗口对象的列表 Set allIE = EnumerateIE() '关闭所有打开的IE窗口 For Each oIE In allIE.Items oIE.quit Next |
结果:通过调用刚才写的函数,成功关闭所有打开的IE窗口。同样的效果,如果在QTP中只需要一行代码就可以完成,代码如下:
SystemUtil.CloseProcessByName ("iexplore.exe") |
4.利用DOM操作测试对象
现在已经会使用IE COM组件来对IE浏览器进行自动化的操作,但是对于浏览器页面中的测试对象IE COM是无法对其进行操作的,这个时候就需要使用HTML DOM来对其进行操作。HTML DOM是HTML Document Object Model(文档对象模型)的缩写,它将网页中的各个元素都看作一个个对象,从而使网页中的元素也可以被计算机语言获取或者编辑。 接下来看几个简单的例子。
3种方法对比:getElementByID、getElementsByName、getElementsByTagName。
(1)通过getElementByID方法获取定位对象,并对其进行操作:
'使用IE COM启动IE Set oIE = CreateObject("InternetExplorer.Application") oIE.Visible = True '设置可见 oIE.Navigate "http://www.baidu.com" '跳转URL '等待IE页面加载完毕 While oIE.Busy: Wend '获取Document对象 Set oDoc = oIE.Document '使用DOM对测试对象进行操作 With oDoc '搜索框输入 .getElementByID("kw").value = "zzxxbb112" '点击百度搜索 .getElementByID("sb").Click End With Set oDoc = Nothing Set oIE = Nothing |
结果:运行后首先是打开浏览器跳转百度首页,等待加载完成之后,创建DOM对象,并使用getElementByID获取百度搜索框对象,并对其进行输入“zzxxbb112”后,再次通过getElementByID方法获取百度搜索按钮并进行点击,最终成功跳转搜索结果。
(2)通过getElementsByName方法获取定位对象,并对其进行操作:
'使用IE COM启动IE Set oIE = CreateObject("InternetExplorer.Application") oIE.Visible = True '设置可见 oIE.Navigate "http://www.baidu.com" '跳转URL '等待IE页面加载完毕 While oIE.Busy: Wend '获取Document对象 Set oDoc = oIE.Document '获取元素名为WD的集合 Set oEdits = oDoc.getElementsByName("wd") '遍历对象并对其进行操作 For Each oEdit In oEdits oEdit.value = "zzxxbb112" Next '点击百度搜索 oDoc.getElementByID("sb").Click Set oDoc = Nothing Set oIE = Nothing |
结果:使用getElementsByName和getElementByID不同,getElementByID是返回的单个对象,而getElementsByName返回的是一个元素的集合,需要通过遍历对象才能对其进行操作。