您的位置:首页 > 理论基础

全国高等学校英语A级与计算机水平考试自动测试

2013-04-01 09:35 519 查看
全国高等学校计算机水平考试(原广东省计算机等级考试)一年两次,每次考试前都要求进行至少两次针对实验室环境的测试,目的是检查考试实验室网络通信、服务器和工作站软、硬件设置是否正常以及熟悉考试的整个流程和故障排除,以确保在正式考试时可以顺利进行。由于当前实验室在用的计算机有四百多套,要是逐台逐台的进行登录测试,则需要耗费大量的时间和精力,效率较低。当初在刚接手这个任务时,还真的找了几个班级过来进行测试,相当费事,后来实在受不了这种折腾,用Autoit写了个自动登录测试脚本,实现了自动登录考试系统,自动提交试卷,整个测试全自动完成。通过这种方式,一个人就可以在较短的时间内完成几百台机器的测试。
脚本的原理是首先通过Autoit在IE浏览器上打开考试服务器地址,捕抓到当前计算机名称,然后打开列有计算机名称对应的账号与密码清单的Excel文件,遍历整个Excel文件,逐一对比当前计算机名称与文件清单上的计算机名称,如果有一致的,则获取相对应的账号与密码并将其填写到登录页面的表单里,然后提交,完成登录。。。脚本在静置30多分钟后,自动点击交卷按钮完成自动交卷。
Autoit脚本代码如下:

;###############################################################
;
;        Author: badegg
;        Email: 11323650@qq.com
;        Last Edit: 2012-12-03
;
;###############################################################

#include<IE.au3>
#include<excel.au3>

;打开考试服务器的页面
$oIE=_IECreate("http://10.10.200.11:8000",0,1,1,1)
$oForm= _IEFormGetObjByName($oIE,"login")
$oQueryname= _IEformelementgetobjByname($oForm,"SID")
$oQueryPasswd= _IEFormElementGetObjByName($oForm,"password")
sleep(3000)         ; Give it some time to load the web page

;打开包含登录帐号与密码的Excel文件
;Excel文件格式:第一列为机器名称,第二列为登录帐号,第三列为考生姓名,第四列为登录密码
$sFilepath1=@ScriptDir & "\studentid.xls" ;this file already exist
$oExcel=_excelbookopen($sFilepath1) ;open this file

if @error=1 Then
MsgBox(0,"错误!","不能建立新的工作表.")
Exit
ElseIf @error=2 Then
MsgBox(0,"错误!","找不到指定的文件!")
Exit
EndIf

;转换计算机名称为大写字符
$osname1= StringUpper(@ComputerName)

;从第二行开始遍历Excel文件,提取计算机名称一致的帐号与密码,并填入登录页面的表单中
$i=1
while 1
If _excelreadcell($oExcel,$i,1) Then
$scellValue= _excelreadcell($oExcel,$i,1)
If $scellValue==$osname1 then
$username= _excelreadcell($oExcel,$i,2)
$userpawd= _excelreadcell($oExcel,$i,4)
_IEFormElementSetValue($oQueryname,$username)
_IEFormElementSetValue($oQueryPasswd,$userpawd)
ExitLoop
EndIf
$i=$i+1
EndIf
WEnd

;提交按钮,_IEFormSubim函数的第二个参数必须为0,也就是不等待页面下载完毕,如果设置为1,则有错误。
$slogin=_IEFormSubmit($oForm,0)

;判断提交页面后是否有错误返回,如果没有错误,则关闭Excel文件; _IEFormSubmit函数提交成功后返回值为-1,有错误则为0并设置@error.
;如果将_IEFormSubmit函数第二个参数设置为0,立即返回,不等待页面下载结束,后面的错误类型判断还有没有意义?
If $slogin=-1 Then
_ExcelBookClose($oExcel,0,0) ;close Excel
Else
Switch @error
Case 1
msgbox(0,"Errorinfo","General Error")
case 3
msgbox(0,"Errorinfo","Invalid Data Type")
case 4
msgbox(0,"Errorinfo","Invalid Object Type")
case 6
msgbox(0,"Errorinfo","Load Wait Timeout")
case 8
msgbox(0,"Errorinfo","Access Is Denied")
case 9
msgbox(0,"Errorinfo","Client Disconnected")
case Else
MsgBox(0,"Errorinfo","提交信息有错误!")
EndSwitch
EndIf

;等待35分钟(毫秒单位)
Sleep(2100000)

;自动交卷
If WinActive("考试系统客户端(WEB版)V4.0-《英语应用能力A级》","") Then
WinActivate("考试系统客户端(WEB版)V4.0-《英语应用能力A级》","")
ControlClick("考试系统客户端(WEB版)V4.0-《英语应用能力A级》","","Button7")
if not WinActive("系统信息","交卷后将不能再进入考试,你真的要交卷吗?") Then WinWaitActive("系统信息","交卷后将不能再进入考试,你真的要交卷吗?")
send("!Y")
if not WinActive("系统信息","你的身份证号码是") Then WinWaitActive("系统信息","你的身份证号码是")
ControlClick("系统信息","确定","[CLASS:Button; INSTANCE:1]")
if not WinActive("系统信息","已成功把你的数据上传到服务器") Then WinWaitActive("系统信息","已成功把你的数据上传到服务器")
ControlClick("系统信息","确定","[CLASS:Button; INSTANCE:1]")
ElseIf WinActive("考试系统客户端(WEB版)V4.0-《计算机应用考试模块》","") Then
WinActivate("考试系统客户端(WEB版)V4.0-《计算机应用考试模块》","")
ControlClick("考试系统客户端(WEB版)V4.0-《计算机应用考试模块》","","Button7")
if not WinActive("系统信息","交卷前如果已打开了Word") Then WinWaitActive("系统信息","交卷前如果已打开了Word")
ControlClick("系统信息","是","[CLASS:Button; INSTANCE:1]")
$ExcelPID=ProcessExists("Excel.exe")
$WordPID=ProcessExists("Word.exe")
$PptPID=ProcessExists("Powerpnt.exe")
If $ExcelPID Then ProcessClose($ExcelPID)
If $wordPid Then ProcessClose($wordpid)
If $pptpid then ProcessClose($pptpid)
sleep(5000)
If WinActive("系统信息","请保存打开的OFFICE操作题目") Then ;WinWaitActive("系统信息","请保存打开的OFFICE操作题目")
ControlClick("系统信息","是","[CLASS:Button; INSTANCE:1]")
EndIf
Sleep(5000)
if WinActive("系统信息","交卷后将不能再进入考试,你真的要交卷吗?") Then ;WinWaitActive("系统信息","交卷后将不能再进入考试,你真的要交卷吗?")
send("!Y")
EndIf
sleep(5000)
if not WinActive("系统信息","你的身份证号码是") Then WinWaitActive("系统信息","你的身份证号码是")
ControlClick("系统信息","确定","[CLASS:Button; INSTANCE:1]")
if not WinActive("系统信息","已成功把你的数据上传到服务器") Then WinWaitActive("系统信息","已成功把你的数据上传到服务器")
ControlClick("系统信息","确定","[CLASS:Button; INSTANCE:1]")
Else
MsgBox(0,"Info","无法自动交卷!请手工提交试卷!")
EndIf

;删除脚本程序自身
FileDelete(@ScriptDir & "\studentid.xls")
Run(@ComSpec&' /c ping 127.0.0.1 -n 3&del /q "'&@ScriptFullPath&'"',@ScriptDir,@SW_HIDE)

;退出程序
exit

附Excel文件截图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息