51Testing软件测试论坛

标题: 使用FireEvent实现多样化对象操作 [打印本页]

作者: qaarchitech    时间: 2008-3-13 12:56
标题: 使用FireEvent实现多样化对象操作
最近有人问我,有这样一个自动化的需求,该怎么实现:
    把鼠标移到某个链接上,但不点击。该链接上利用css或js实现了某些效果或事件,但触发方式并不是点击,而是将鼠标移动过去(并非焦点移动过去)。
    以中国雅虎首页的效果为例,以下代码实现了模拟鼠标从“站长天下”“今日焦点”“邮箱”“建站”“空间”“群组”“相册”顺次移动的过程:
Option Explicit
'定义变量
Dim oWin32    'win32对象
Dim sTitle    '页面标题
Dim arrLinkText    '链接文字数组
Dim sLinkText    '链接文字
Dim sEventName    '操作事件名称
Dim iWaitTime    '两次操作时间间隔
Dim iIdentifyTimeOut    '识别对象超时时间
Dim n    '循环变量
Main
Sub Main
Set oWin32 = CreateObject("wscrīpt.shell")
sTitle = "中国雅虎.*"
arrLinkText = split("站长天下;今日焦点;邮箱;建站;彩票;空间;群组;相册",";",-1,1)    '定义链接文字数组
sEventName = "onmouseover"    '鼠标移到对象上的事件
iWaitTime = 1    '操作等待1秒
iIdentifyTimeOut = 3    '识别对象存在性超时时间设置为3秒
oWin32.Run("http://cn.yahoo.com/")    '打开浏览器,进入中国雅虎首页
For n=0 to ubound(arrLinkText)
  Wait iWaitTime    '操作等待
  sLinkText = arrLinkText(n)    '从链接文字数组中取出链接文字
  moveMouseOnIt    '调用操作时间函数
Next
Browser("title:="&sTitle).Close    '执行完毕关闭浏览器
End Sub

Function moveMouseOnIt()
'检查链接是否存在,存在则触发事件
If Browser("title:="&sTitle).page("title:="&sTitle).link("innertext:="&sLinkText,"index:=0").Exist(iIdentifyTimeOut) Then
  Browser("title:="&sTitle).page("title:="&sTitle).link("innertext:="&sLinkText,"index:=0").FireEvent sEventName   
  moveMouseOnIt = True
  Reporter.ReportEvent micPass,sEventName,"Trigger the event """&sEventName&""" successfully."
Else
  moveMouseOnIt = False
  Reporter.ReportEvent micFail,sEventName,"Fail to trigger the event """&sEventName&""" because of the absence of the link."
End If
End Function
    运行后会发现有一步执行抛出了Fail,检查是一个名为“彩票”的链接不存在导致;原来中国雅虎不提供彩票服务啊~^_^
    所实现代码中最关键部分是FireEvent方法,针对Link对象,该方法除了onmouseover时间, 还有onchange, onclick, ondblclick, onblur, onfocus, onmousedown, onmouseup, onmouseout, onsubmit, onreset, onpropertychange事件可以使用,涵盖了目前我们所能做的全部操作。
    至于其它对象的FireEvent方法,请参照QTP帮助文档中的FireEvent Method定义。
    灵活运行FireEvent方法,可以很容易操纵页面对象触发各种事件,对自动化功能实现的程度也很有帮助。
作者: 假装不在    时间: 2008-7-30 22:56
很好,谢谢楼主的代码。
关于fireevent这个的,我其实也不大清楚怎么操作,谢谢你这帖子。
作者: ltp401128401128    时间: 2008-12-18 14:06
一时半会儿还没理解这个fireevent到底是个什么意思,保存下来好好的理解一下
作者: asoqa    时间: 2008-12-18 16:10
边实践边思考边总结,楼主做的不错!
作者: 没有蛀牙    时间: 2008-12-18 17:18
这么好的贴子怎么没人顶啊
作者: pipishi    时间: 2008-12-18 18:17
确实不错,感谢楼主的贡献!
作者: heqingbluesky    时间: 2012-1-25 13:44
这个功能主要是用于Web方面的测试,提供另外一种workaround。

本次在澳洲电信项目,就用了一把,好使。




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