[fixed]if/else后,如何使脚本运行跳转到脚本前面的某一行语句重新执行
1.如题,测试登陆的简单功能。有时因为系统繁忙,导致无法成功登陆,系统会弹出一相应的登陆失败的提示。2.我要做的就是按下登陆的按钮之后,用if/else语句判断是否有出错提示:如果有的话,将此提示关闭,从头开始执行登陆的操作,或从前面的某一行开始重新执行登陆的操作;如果无出错提示,继续进行后续的操作。
3.问题就是当出现出错提示后,我该如果将脚本的执行跳转到前面的某一个语句呢?用什么函数可以实现?
[ 本帖最后由 小小柠檬 于 2006-6-16 10:46 编辑 ] 我写过这样一段代码,希望对你有用:
public function Login_Errorshow(in ErrorForm,in MainForm,in LoginForm)
{
auto msg,ErrorState;
if (win_exists(ErrorForm,1)==E_OK)
{
set_window(ErrorForm);
static_get_text("ErrorStatic",msg);
switch(msg)
{
case Er_NoUserID:#Er_NoUserID定义成常量,值为错误提示窗体的static
{
set_window(ErrorForm);
button_press("TBtn_Confirm");
ErrorState=E_NO_USERID;
printf(" 异常状态—"& E_NO_USERID &"未输入用户代码");
break;
}
case Er_InvalidUserPsw:
{
set_window(ErrorForm);
button_press("TBtn_Confirm");
ErrorState=E_USERPSW_INVALID;
printf(" 异常状态—"& E_USERPSW_INVALID &"用户密码错误");
break;
}
case Er_NoExistUserID:
{
set_window(ErrorForm);
button_press("TBtn_Confirm");
ErrorState=E_USERID_NOEXIST;
printf(" 异常状态—"& E_USERID_NOEXIST &"用户代码不存在");
break;
}
case Er_UnsafeUser:
{
set_window(ErrorForm);
button_press("TBtn_Confirm");
ErrorState=E_USERID_UNSAFED;
printf(" 异常状态—"& E_USERID_UNSAFED &"三次密码错误");
break;
}
default :
{
set_window(ErrorForm);
button_press("TBtn_Confirm");
ErrorState=E_ANY_ERROR;
printf(" 异常状态—"& E_ANY_ERROR &msg);
}
}
return(ErrorState);
}
# else if (win_exists(MainForm)==E_OK)
# {
# set_window(MainForm);
# printf("登录成功");
# win_close(MainForm);
# set_window ("Quest_Form");
# button_press ("TBtn_Yes");
# return(E_LOGIN_OK);
# }
# else
# {
# set_window(LoginForm);
# obj_mouse_click ("TBtn_Exit", 46, 12, LEFT);
# }
}
public function StartSystem(in GuiFileName,in AppName)
{
auto canrun=0,guistatus,isStart;
GUI_close(GuiFileName);
guistatus=Guifile_in_map(GuiFileName);
if (guistatus==1)
{
isStart=invoke_application(AppName,"","",SW_SHOWMAXIMIZED);
if (isStart==E_OK)
canrun=1;
else
printf(AppName & "运行失败");
}
else
printf(GuiFileName &"载入异常");
return(canrun);
}
#*******************************************************************************
#* 功能描述:
#* 登录模块
#* 输入参数:
# LoginGui:登录时的Gui Map文件;
# * ErrorForm: 错误窗体的逻辑名;
# MainFrom:登录成功后的主窗体;
# LoginForm:登录窗体;
#* 输出参数:
#* 无
#* 返回值:
#* Res:错误状态{-1,0...17},用于其他过程调用;
#* 历史纪录:
#* 修改人 日期 版本号 描述
# * winterson 2005/11/23 第一次创建
#*******************************************************************************/
public function LoginSystem(in LoginGui,in ErrorForm,in MainForm,in LoginForm,in UserID,in UserMiMa)
{
auto found=0,Rgui,rc,msg,Res,currwin;
GUI_close(LoginGui);
Rgui=Guifile_in_map(LoginGui);
if (Rgui!=1)
{
printf(LoginGui &"载入失败");
texit;
}
set_window (LoginForm,1);
edit_set("TEdt_UserID",UserID);
edit_set("TEdt_UserPsw",UserMiMa);
obj_mouse_click("TBtn_Confirm",54, 10, LEFT);
if (rc==0)
{
rc=1;
set_window("Er_Form_NoConnect");
static_get_text("Static_ConnectError",msg);
printf(msg);
button_press("TBtn_Yes");
}
else
{
if (win_exists("Er_Form_NoConnect",1)==E_OK)
rc=0;
}
Res=Login_Errorshow(ErrorForm,MainForm,LoginForm);
while (Res!=E_LOGIN_OK)
{
Res=Login_Errorshow(ErrorForm,MainForm,LoginForm);
}
return(Res);
} 哇,好长,呵呵,谢谢,我研究下先。。。。 貌似从里面没得到灵感,不过真是谢谢呵。继续实践... 关键在于用了一个while循环:
while (Res!=E_LOGIN_OK)
{
Res=Login_Errorshow(ErrorForm,MainForm,LoginForm);
}
return(Res);
一出现错误,记录它的返回,并点击确定关闭错误提示框,直到返回成功; 嗯,好滴,3Q。 感觉测试一个很简单的问题。WinRunner(other)搞的也很复杂
一个小小的登录窗口.........就这个样子了。涉及到复杂的业务流程。头都大了. 呵呵,是呀,如果能有一个函数,能直接跳到某行语句执行就好了。
[ 本帖最后由 小小柠檬 于 2006-6-14 16:53 编辑 ] 解决,用了一个while语句来决解,比较土的方法呵:while当异常窗口存在,就关闭提示窗口,按实际情况,此时会返回到原先的登陆窗口,原先输入的用户和密码也都还在,就再执行一条按登陆按钮的语句就好了。
==============
.....前面登陆script省略,当按完登陆按钮后:
while(win_exists("提示",5)==E_OK)
{
set_window ("提示", 2);
button_press("确定");
set_window ("loginfram", 3);
button_press("virtual_push_button");
}
页:
[1]