51Testing软件测试论坛

标题: 纯VBS写的自动化脚本(不错!) [打印本页]

作者: lantianwei    时间: 2007-12-31 19:59
标题: 纯VBS写的自动化脚本(不错!)
转自3atesting
'这段代码有两个很大的问题
'第一:在获取到iframe对象后,无法获取到frame对象中的所有链接,从而导致无法点击对象中链接
'此时我无奈之下,重新打开了一个链接,在另外一个页面去拿相应的链接了,原因查出来了,因为
'frame中链接涉及到另外一个域了,实际此DOM操作出现了跨域操作,从而导致了无权操作的过程
'但是现在尚未想到好的策略解决,只好出此下策
'第二:这个程序里面获取对象仍使用了部分的硬代码,这个部分完全可以写成像watir一样,有时间
'会再次完善,或者同行可以一起完善它
Set ie = CreateObject("internetexplorer.application")
ie.Visible = true
'打开网页::3aTesting的BBS
ie.Navigate "www.3atesting.com/bbs"
'等待网页打开结束
delay(ie)
'获取QTP板块的链接,然后点击
Set linkAll=ie.document.getElementsByTagName("a")
Set searchLink=GetLink(linkAll,"QTP")
searchLink.click
delay(ie)

'随机取板块的某一个链接,并且点击
Set webTable=ie.Document.getElementsByTagName("Table")
Set webtableRows=webtable.item(1).getElementsByTagName("TR")
i=genRand(webtableRows.length)
Set tablelink=webtableRows.item(i).getElementsByTagName("a")
tablelink.item(1).click
delay(ie)

'获取帖子中iframe中的某一个对象,重新打开一个链接,并获取link对象,然后点击
Set iframes=ie.Document.getElementsByTagName("iframe")
i=genRand(iframes.length)
ie.Navigate iframes.item(i).src
delay(ie)
Set googlelink=ie.Document.getElementsByTagName("a")
googlelink.item(0).click
'MsgBox tablelink.length
'ie.Document.parentwindow.close
ie.Quit
Set googlelink=Nothing
Set iframes=Nothing
Set webtableRows=Nothing
Set webTable=Nothing
Set searchLink=Nothing
Set linkAll=Nothing
Set ie=Nothing

Function GetLink(objects,name)
For Each obj In objects
   tmp=obj.innertext
   'MsgBox tmp
   If Len(tmp)>0 Then
     If RegExpTest(obj.innertext,name) Then
        Set GetLink=obj
        Exit For
     End If
   End If
Next
End Function

Function RegExpTest(patrn, strng)
  Dim regEx, retVal            ' Create variable.
  Set regEx = New RegExp         ' Create regular expression.
  regEx.Pattern = patrn         ' Set pattern.
  regEx.IgnoreCase = False      ' Set case sensitivity.
  retVal = regEx.Test(strng)      ' Execute the search test.
  RegExpTest=retVal
End Function

Sub delay(obj)
  Do
    WScript.Sleep 5
  Loop Until CInt(obj.readyState)=4
' MsgBox CInt(obj.readyState)
End Sub

Function genRand(count)
genRand=Int(Rnd() * count)
End Function

[ 本帖最后由 lantianwei 于 2007-12-31 20:01 编辑 ]
作者: mythxhg    时间: 2008-1-2 10:55
不错,GOOD
作者: hsjzfling    时间: 2008-1-2 16:05
多谢LZ共享~~

不过有问题就表用DOM来获取对象嘛。。。可以优先考虑其它的方法~~~
作者: lantianwei    时间: 2008-1-2 18:39
转载这篇文章不是因为他的功能有多强,而是希望让大家知道其实什么工具也不用也可以进行自动化测试.
作者: hsjzfling    时间: 2008-1-2 19:19
嗯~不错,可以借鉴~
学习一下
作者: walker1020    时间: 2008-1-16 21:03
QTP  只是一个工具。千万不要以为工具是万能的。工具是人类智慧的延伸和体现。它凝聚了人类的某些智慧,却永远不会凝聚人类的所有智慧。这有点像机器人永远需要人类来控制一样。
作者: qalead    时间: 2008-1-17 11:30
原帖由 walker1020 于 2008-1-16 21:03 发表
QTP  只是一个工具。千万不要以为工具是万能的。工具是人类智慧的延伸和体现。它凝聚了人类的某些智慧,却永远不会凝聚人类的所有智慧。这有点像机器人永远需要人类来控制一样。


这话好深奥啊

自动控制用javascript或许比这种vbs创建对象的方式要好一些吧
作者: heqingbluesky    时间: 2008-1-17 14:49
当然了,工具不是万能的.有测试的思想是最重要的.
作者: pirate    时间: 2008-1-17 19:40
Set linkAll=ie.document.getElementsByTagName("a")
这句看不懂,能解释一下吗?
作者: lantianwei    时间: 2008-1-18 14:32
原帖由 pirate 于 2008-1-17 19:40 发表
Set linkAll=ie.document.getElementsByTagName("a")
这句看不懂,能解释一下吗?

得到所有页面上的链接




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2