QTP里的DOM应用

发表于:2014-10-24 10:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:kaqiinono    来源:51Testing软件测试网采编

  结果QTP报错了
  这是因为在同一个窗口下的四个子窗口使用的是同一个句柄,所以无法加入到Dictionary对象里去。只要对代码稍加修改就可以了:
  Function EnumIE()
  Set EnumIE = CreateObject("Scripting.Dictionary")
  Set winShell = CreateObject("Shell.Application")
  Set allWins = winShell.Windows
  For each win in allWins
  If instr(1,win.FullName,"iexplore.exe",vbTextCompare) Then
  If Not EnumIE.Exists(win.hwnd) Then
  EnumIE.Add win.hwnd,win
  End If
  End If
  Next
  End Function
  调用的时候,我采用了递归调用,只要有子窗口没有关完,就会继续关。这里用do while的话会多执行一次EnumIE这个函数,大家可以考虑换一种循环方式,我就不多说了。
  Set allIE = EnumIE()
  Do while allIE.Count>0
  For each oIE in allIE.Items
  oIE.quit
  Next
  Set allIE = EnumIE()
  Loop
  当然了QTP有自己的方法会很快关闭所有的IE窗口:
  SystemUtil.CloseProcessByName(“iexplore.exe”)
  下面介绍下利用DOM操作测试对象的几种常用方法,还是用百度主页做例子,首先将百度主页加进对象库。
  IE8里会自带F12开发工具,可以方便你看你需要的DOM属性
  Set oDOM = Browser("百度一下,你就知道").Page("百度一下,你就知道").Object
  需要注意的是,此处的Object属性目前只支持IE,而对其他的浏览器目前还没有加入支持。
  1. 通过getElementById方法获取定位对象,对其进行操作:
  oDOM.getElementById("kw").value = "态度决定测试"
  oDOM.getElementById("su").click
  2. 通过getElementsByName方法获取定位对象,对其进行操作:
  方法一:
  Set oEdits = oDOM.getElementsByName("wd")
  For each oEdit in oEdits
  oEdit.value = "态度决定测试"
  Next
  oDOM.getElementById("su").click
  方法二:
  Set oEdits = oDOM.getElementsByName("wd")
  oEdits(0).value = "态度决定测试"
  oDOM.getElementById("su").click
  通过方法名里Element后面的复数形式也大概可以知道这个方法返回的是一个集合,所以需要遍历集合里的对象获取这个对象。
  3. 通过getElementsByTagName方法获取定位对象,对其进行操作:
  Set oEdits = oDOM.getElementsByTagName("INPUT")
  For each oEdit in oEdits
  If oEdit.type = "text" Then
  oEdit.value = "态度决定测试"
  End If
  Next
  oDOM.getElementById("su").click
  用这个方法遍历之后通常要加判断,因为一个页面里可能有很多INPUT标签。
32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号