AutoIT是一款非常强大的免费功能自动化测试工具,使用它可以轻松实现web和winform的自动化测试。其脚本语言AU3语法类似于VB语言和vbs脚本语言,对于经常使用QTP的童鞋来说,非常容易上手。以下是一个使用autoit测试web登录的一个实例。
首先先介绍一下待测网站。待测网站是一个彩铃制作网站,用户可通过首页进行登录,点击首页登录链接之后页面会弹出登录框。用户输入登录信息并点击登录按钮之后,登录框消失,网站首页右上角显示用户已登录。
下面贴出脚本:
#Include <IE.au3>
#Include<ScreenCapture.au3>
#Include<BaseOp.au3>
Global $hBmp
Global $test
Global $result
Global $isobj=False
Global $timer=1
Global $OIE = _IECreate("http://192.168.85.36/web",0,1,1,0)
Global $Tester="13200000001"
Global $TesterPWD="123456"
_IELoadWait($OIE)
Sleep(2000)
Local $Login=_IELinkClickByText($OIE,"登录")
_IELoadWait($OIE)
While Not $isobj
If $timer>=3 Then
SetError("2")
ExitLoop
EndIf
$timer+=1
Local $Inputname = _IEGetObjByName($OIE,"txtPhoneNum")
Local $Inputpassword = _IEGetObjByName($OIE,"txtPassword")
If Not IsObj($Inputname)Or Not IsObj($Inputpassword) Then
Sleep(2000)
Else
$isobj=True
$Inputname.value=$Tester
$Inputpassword.value=$TesterPWD
EndIf
WEnd
Local $Inputcheck= _IEGetObjByName($OIE,"txtRadomPicCode")
If Not IsObj($Inputcheck) Then
$test= CaptureScreen("C:Documents and Settingsaslandhu桌面autoit3","CheckCodeError")
$spans=_IETagNameGetCollection($OIE,"span")
if $spans(0).innertext==("用户"&$Tester) Then ;务必要注意这里span属性innertext的访问方式
SetError("5")
Else
SetError("4")
EndIf
Else
$checkCode=InputBox("提示","请输入验证码:")
$Inputcheck.value=$checkCode
Local $btn= _IEGetObjByName($OIE,"btnSubmitLogin")
_IEAction($btn,"Click")
_IELoadWait($OIE)
Local $Loginwrap = _IEGetObjById($OIE,"Loginwrap")
_IELoadWait($OIE)
If Not IsObj($Loginwrap) Then
SetError("3")
Else
SetError("1")
EndIf
EndIf
Switch @error
Case 1
$result="成功"
Case 2
$result="登录框上的按钮不见啦"
Case 3
$result="抱歉,登录失败"
Case 4
$result="登录时,验证码输入框不存在"
Case 5
$result="用户已经登录了"
Case Else
$result="未定义的错误"
EndSwitch
MsgBox(1,"测试结果",$result)
#Include<ScreenCapture.au3>
#Include<BaseOp.au3>
Global $hBmp
Global $test
Global $result
Global $isobj=False
Global $timer=1
Global $OIE = _IECreate("http://192.168.85.36/web",0,1,1,0)
Global $Tester="13200000001"
Global $TesterPWD="123456"
_IELoadWait($OIE)
Sleep(2000)
Local $Login=_IELinkClickByText($OIE,"登录")
_IELoadWait($OIE)
While Not $isobj
If $timer>=3 Then
SetError("2")
ExitLoop
EndIf
$timer+=1
Local $Inputname = _IEGetObjByName($OIE,"txtPhoneNum")
Local $Inputpassword = _IEGetObjByName($OIE,"txtPassword")
If Not IsObj($Inputname)Or Not IsObj($Inputpassword) Then
Sleep(2000)
Else
$isobj=True
$Inputname.value=$Tester
$Inputpassword.value=$TesterPWD
EndIf
WEnd
Local $Inputcheck= _IEGetObjByName($OIE,"txtRadomPicCode")
If Not IsObj($Inputcheck) Then
$test= CaptureScreen("C:Documents and Settingsaslandhu桌面autoit3","CheckCodeError")
$spans=_IETagNameGetCollection($OIE,"span")
if $spans(0).innertext==("用户"&$Tester) Then ;务必要注意这里span属性innertext的访问方式
SetError("5")
Else
SetError("4")
EndIf
Else
$checkCode=InputBox("提示","请输入验证码:")
$Inputcheck.value=$checkCode
Local $btn= _IEGetObjByName($OIE,"btnSubmitLogin")
_IEAction($btn,"Click")
_IELoadWait($OIE)
Local $Loginwrap = _IEGetObjById($OIE,"Loginwrap")
_IELoadWait($OIE)
If Not IsObj($Loginwrap) Then
SetError("3")
Else
SetError("1")
EndIf
EndIf
Switch @error
Case 1
$result="成功"
Case 2
$result="登录框上的按钮不见啦"
Case 3
$result="抱歉,登录失败"
Case 4
$result="登录时,验证码输入框不存在"
Case 5
$result="用户已经登录了"
Case Else
$result="未定义的错误"
EndSwitch
MsgBox(1,"测试结果",$result)
现在对脚本中几个关键的地方做一些解释。
(1)在自动化测试中,因为某些原因,一些控件不能马上展现,所以在测试脚本中我们往往会加入一些等待功能,确保这些控件可以被操作,不会出现对象不存在至错的情况。这段脚本中在识别登录框中用户账号密码输入框时,增加了检查功能,当输入框不存在的时候就等待两秒,两秒后再尝试。同时设置了尝试次数3次。
If $timer>=3 Then
SetError("2")
ExitLoop
EndIf
SetError("2")
ExitLoop
EndIf
(2)在QTP中截屏功能比较实用,在AutoIt中同样提供了截屏的API。
$test= CaptureScreen("C:Documents and Settingsaslandhu桌面autoit3","CheckCodeError")
(3)在AutoIT的web自动化中,以下函数非常常见:
_IELoadWait:等待页面加载完成
_IEGetObjByName:通过名称获取对象,与此对应的还有_IEGetObjByID:通过ID获取对象
_IETagNameGetCollection:获取所有的Tagname为传入值的对象