dyjyhx 2004-12-28 10:28
登陆界面的测试程序
登陆名和密码 我想用数据驱动,并判断登陆名和密码是否一致。如果不一致,报出错。用tl_setp函数。怎么编写测试函数。请高手指点一下。
dyjyhx 2004-12-28 10:29
在线等。谢谢
dyjyhx 2004-12-28 11:16
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
ddt_set_row(table,table_Row);
# Login
set_window ("Login", 3);
edit_set ("Agent Name:", ddt_val(table,"Agent_Name1"));
password_edit_set("Password:", ddt_val(table,"Password1"));
button_press ("OK");
# # Flight Reservations
# set_window ("Flight Reservations", 1);
# button_press ("确定");
#判断
if(ddt_val(table,"Agent_Name1")== "mercury" ||ddt_val(table,"Password1") == "mercury")
{
tl_step("用户 名和密码 ",0,"正确 !");
}
else
{
tl_step("用户 名和密码 ",1,"不正确 !");
}
if(ddt_val(table,"Agent_Name1")== "" && ddt_val(table,"Password1") == "")
{
tl_step("用户 名和密码 ",1,"不能为 空!");
}
}
ddt_close(table);
大家帮我看看,这个脚本有没有问题呀?
dyjyhx 2004-12-28 11:18
当密码或用户名为空时,也没有提示,怎么回事呀
shyfish 2004-12-28 12:08
你用的是 && ,只有用户名和密码都为空才会进去的
dyjyhx 2004-12-28 14:00
那个我知道了,我把与和或写错了。但我该过来后还是不能运行
QA_BAY 2004-12-28 15:39
问题已经解决!
本人已经在机子上试过了,可以做到!
现在我是这样做的.
先录制,然后做数据驱动!
数据就是这以下几个
name password1
asd asdfasdf
空格 空格
sdfwerw sdfsdf
table = "e1.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
ddt_set_row(table,table_Row);
# Login
set_window ("Login", 9);
obj_type ("Agent Name:","<kCtrl_L>");
edit_set ("Agent Name:", ddt_val(table,"Name"));
password_edit_set("Password:", ddt_val(table,"Password1"));
button_press ("OK");
# 字符输入错误,弹出错误窗口
if (win_exists("Flight Reservations")==E_OK)
{
win_mouse_click ("Flight Reservations", 120, 13);
set_window ("Flight Reservations", 3);
button_press ("确定");
}
# 字符输入错误,弹出错误窗口
if (win_exists("Flight Reservations")==E_OK)
{
set_window ("Flight Reservations", 22);
button_press ("确定");
}
#如果用户名和密码都为用空
if(ddt_val(table,"Name")== ""||ddt_val(table,"Password") == "")
{
tl_step("用户名和密码",0,"用户名和密码都为空!");}
else
{
pause(ddt_val(table,"Name"));#如果不为空就输出
pause(ddt_val(table,"Password"));
}
}
ddt_close(table);
记住,LOGIN 窗口如果PASSWORD三次错误,它会自动退出!每次执行时,记得重新打开!如果不想就在最后加一句
invoke_application()就可以了!
以上是基本的程序,你看完要自己在自己的机子上做才行!
dyjyhx 2004-12-28 16:14
谢谢,我试一下
lousia 2004-12-28 23:43
# 字符输入错误,弹出错误窗口
if (win_exists("Flight Reservations")==E_OK)
{
win_mouse_click ("Flight Reservations", 120, 13);
set_window ("Flight Reservations", 3);
button_press ("确定");
}
# 字符输入错误,弹出错误窗口
if (win_exists("Flight Reservations")==E_OK)
{
set_window ("Flight Reservations", 22);
button_press ("确定");
}
两个if语句的判定条件一样,是怎么来判断的啊,不明白
QA_BAY 2004-12-29 08:23
如果没有什么其它的窗口弹出那两个是一样的!没有什么区别!
但如果你的数据输入不同那就不一样了,
就是你设置的数据有长有短.
你观察一下出错的可能性有几种,
当所有可能出现时,你的程序可不可以做到,
你都要想到,
而不是录制完就完了!
如果觉得多余那就把它拿掉吧!
dyjyhx 2004-12-29 08:32
#如果用户名和密码都为用空
if(ddt_val(table,"Name")== ""||ddt_val(table,"Password") == "")
{
tl_step("用户名和密码",0,"用户名和密码都为空!");}
else
{
pause(ddt_val(table,"Name"));#如果不为空就输出
pause(ddt_val(table,"Password"));
}
}
执行else语句后,出现输出用户名和密码的对话框,要手动点击Contiune才能继续。怎么让它自动继续?我想手动在GUI Map只能感加入这个按钮,但不知道他的Windows名称该填什么?
dyjyhx 2004-12-29 08:39
如果没有什么其它的窗口弹出那两个是一样的!没有什么区别!
但如果你的数据输入不同那就不一样了,
就是你设置的数据有长有短.
你观察一下出错的可能性有几种,
当所有可能出现时,你的程序可不可以做到,
你都要想到,
而不是录制完就完了!
如果觉得多余那就把它拿掉吧!
---------------------------------------------------------------------------------------------------------
我试过了,当输入长度不同时(比如输入2个字符,实际要求要大于4个字符),一个判断也能全报出来。我认为一个判断就可以了,不知道我是不是没考虑全面。请斑竹指教
QA_BAY 2004-12-29 08:51
[quote]Originally posted by [i]dyjyhx[/i] at 2004-12-29 08:32 AM:
#如果用户名和密码都为用空
if(ddt_val(table,"Name")== ""||ddt_val(table,"Password") == "")
{
tl_step ... [/quote]
你可以把pause拿掉,它只是拿来显示给你看的窗口,当然会有CONTINUE出现!
就是测试用的,让你知道如果为否是输入出什么,这样更清了解楚程序!
QA_BAY 2004-12-29 08:55
[quote]Originally posted by [i]dyjyhx[/i] at 2004-12-29 08:39 AM:
如果没有什么其它的窗口弹出那两个是一样的!没有什么区别!
但如果你的数据输入不同那就不一样了,
就是你设置的数据有长有短.
你观察一下出错的可能性有几种,
当所有可能出现时,你的程序可不可以做到,
你都要 ... [/quote]
当时我也不知道怎么试的,如果觉得多余就用#让它不执行!
如果下次碰到再放出来!
现在没有什么时间去想它!
dyjyhx 2004-12-29 09:04
谢谢
dyjyhx 2004-12-29 10:03
在数据驱动时,当有两个以上测试数据时
# Login
set_window ("Login", 9);
obj_type ("Agent Name:","<kCtrl_L>");
edit_set ("Agent Name:", ddt_val(table,"Name"));
password_edit_set("Password:", ddt_val(table,"Password1"));
button_press ("OK");
中的password_edit_set("Password:", ddt_val(table,"Password1"));语句在执行时,报错误
Function "password_edit_set"
Line: 14
Error: Illegal parameter.
不知道什么原因,请高手指点。
QA_BAY 2004-12-29 10:10
你的Password没有改名吧?
你应该把它改成不能跟PASSWORD同名的,
你试一下把它改成其它的
dyjyhx 2004-12-29 10:15
我改过了,改成Password1了,并且当只有一个数据驱动时运行就正常,两个或两个数据以上的驱动就报这个错误
dyjyhx 2004-12-29 10:42
问题解决了,我把Password1改成其它的名字比如Passtest就可以了。可能是脚本在读名字的时候有长度限制,把Password1仍读成了Password,后面的字符给截断了。造成名字冲突的原因。
dyjyhx 2004-12-29 10:50
我晕,运行几遍后,又来了,是不是测试程序本身的问题呀
QA_BAY 2004-12-29 11:55
哈哈哈,
如果PASSWORD错误三次,那个程序会自己的退出的.
所以你先用DEBUG调试吧.
应该是那个名字,你再改一改,或者重新录制一下!
总之做多了也就熟了!
dyjyhx 2004-12-29 14:25
To QA_BAY
不是这个原因,当第二个数据驱动时,Password不能完全输入,只输入了2个字符
lousia 2004-12-29 15:36
obj_type ("Agent Name:","<kCtrl_L>");
<kCtrl_L>"是键盘上的哪个键?
dyjyhx 2004-12-29 15:53
是不是我没有用通配符的原因?多个数据驱动必须用通配符吗?如果要用,这个例子在什么地方用通配符?
dyjyhx 2004-12-29 15:57
我也没找到kCtrl_L是哪个键,这一句用处不大,可以不要
QA_BAY 2004-12-29 16:00
[quote]Originally posted by [i]dyjyhx[/i] at 2004-12-29 03:53 PM:
是不是我没有用通配符的原因?多个数据驱动必须用通配符吗?如果要用,这个例子在什么地方用通配符? [/quote]
应该不用阿!是不是说PASSWORD是非法呢?
我没有这个问题阿!
一开始我没有改名字就有你说的那个问题,现在修改过来之后就没有了!
我回去再试试!
QA_BAY 2004-12-29 16:02
[quote]Originally posted by [i]lousia[/i] at 2004-12-29 03:36 PM:
obj_type ("Agent Name:","<kCtrl_L>");
<kCtrl_L>"是键盘上的哪个键? [/quote]
哦,<kCtrl_L>这个是CTRL+空格
你可以在输入方框试一下!
dyjyhx 2004-12-29 16:02
斑竹帮忙,多谢了
QA_BAY 2004-12-30 23:01
回到宿舍调试了一下,
发现到第三个数据时,password_edit_set()就出现illegal number!很奇怪
想不通!
调出程序出来调试一下,很复杂,看不明白,
你自己看一下吧!
table = "e1.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
ddt_set_row(table,table_Row);
# Login
set_window ("Login", 3);
obj_type ("Agent Name:","<kCtrl_L>");
edit_set ("Agent Name:", ddt_val(table,"Name_1"));
edit_set ("Agent Name:", ddt_val(table,"Name_1"));
password_edit_set("Password_1:", ddt_val(table,"pwd"));
button_press ("OK");
# 字符输入错误,弹出错误窗口
if (win_exists("Flight Reservations")==E_OK)
{
win_mouse_click ("Flight Reservations", 120, 13);
set_window ("Flight Reservations", 3);
button_press ("确定");
}
#如果用户名和密码都为用空
if(ddt_val(table,"Name_1")== ""||ddt_val(table,"pwd") == "")
{
tl_step("用户名和密码",0,"用户名和密码都为空!");
}
else
{
#sprintf("%." & Agent Name: & "f","Name_1");
tl_step("用户名和密码",1,"用户名和密码都可能为空!");
#pause(ddt_val(table,"Name_1"));#如果不为空就输出
# pause(ddt_val(table,"pwd"));
}
}
ddt_close(table);
public function password_edit_set(edit, text)
{
auto text_buf, i, timeout,old_report_name;
auto status;
web_get_timeout(timeout);
if (nargs() != 2)
return(report_param_msg());
get_report_info(old_report_name);
save_report_info("edit_set");
if (Y2K && getvar("sysmode") != "replay")
Y2K_edit_translate(edit, text, text_buf);
else
text_buf = text;
if (window_is_a_browser_or_frame())
{
ns_dont_pop_wizard = TRUE;
for (i=0;i<timeout;i++)
{
status = activate_function(TOBJ, edit, "web_password_edit_set", text_buf);
if (status == E_AREA_OUT)
set_window(GUI_get_window(),1);
else
break;
}
ns_dont_pop_wizard = FALSE;
status = activate_function(TOBJ, edit, "web_password_edit_set", text_buf);
}
else
status = activate_function(TOBJ, edit, "_password_edit_set", text_buf);
save_report_info(old_report_name);
return(status);
}
public function edit_set(in edit, in str, in date_source, in date_target)
{
auto desc, file;
if(getvar("sysmode") == "replay") {
GUI_map_get_desc (GUI_get_window(), edit, desc, file);
return (_edit_set(desc, str));
}
else {
if(nargs() == 4)
return(Y2K_edit_set(edit, str, date_source, date_target));
else if(nargs() == 3)
return(Y2K_edit_set(edit, str, date_source));
else
return(Y2K_edit_set(edit, str));
}
}
public function Y2K_edit_set(in edit, in new_text, in date_source, in date_target)
{
auto trans_text;
if(nargs() == 4)
Y2K_edit_translate(edit, new_text, trans_text, date_source, date_target);
else if(nargs() == 3)
Y2K_edit_translate(edit, new_text, trans_text, date_source);
else
Y2K_edit_translate(edit, new_text, trans_text);
return (activate_function(TEDIT, edit, "_edit_set", trans_text));
}
public function Y2K_edit_translate(in edit, in new_text, out trans_text, in date_source, in date_target)
{
auto source, target, file, rcs, rct, win_name, class, desc;
auto age_type, age_d, age_m, age_y, rca, rcd, rcm, rcy;
rca = rcd = rcm = rcy = 1;
age_type = DEFAULT_AGING;
age_d = age_m = age_y = 0;
win_name = GUI_get_window();
source = "";
if (nargs() == 5) {
source = date_source;
target = date_target;
rcs = rct = 0;
}
else {
if(nargs() == 4) {
source = date_source;
rcs = 0;
}
if (get_Y2K_type_mode() == DISABLE_OVERRIDE ||
(TE && Y2K_get_capture_mode() != FIELD_METHOD)) {
rcs = rct = 1;
if(nargs() == 4) rcs = 0;
}
else {
win_get_info(win_name,"class",class);
if (class == "mic_if_win")
rcs=rct=1;
else {
GUI_map_get_desc (win_name, edit, desc, file);
if(source == "")
rcs=GUI_buf_get_data_attr(file,win_name,edit,"date_source",source);
rct=GUI_buf_get_data_attr(file,win_name,edit,"date_target",target);
rca = GUI_buf_get_data_attr(file,win_name,edit,"age_type",age_type);
if (!rca) {
rcd = GUI_buf_get_data_attr(file, win_name, edit, "age_days", age_d);
rcm = GUI_buf_get_data_attr(file, win_name, edit, "age_months", age_m);
rcy = GUI_buf_get_data_attr(file, win_name, edit, "age_years", age_y);
}
if (rca || rcd || rcm || rcy)
age_type = DEFAULT_AGING;
}
}
}
type_translate(source, target, new_text, trans_text, rcs, rct, age_type, age_d, age_m, age_y, FALSE);
}
#
# Popup an error message about illegal number of parameters.
#
public function report_param_msg(in func_name)
{
auto doagain;
process_return_value(E_ILLEGAL_NUM_OF_PARAMS, func_name, TWINDOW, 0, doagain);
return(E_ILLEGAL_NUM_OF_PARAMS);
}
#--------------------------------------------------------------------------------------------------#
public function window_is_a_browser_or_frame(win, timeout)
{
auto hWnd, rc;
if (nargs() == 0 )
rc = current_window_is_a_browser_or_frame(0);
else if (nargs() < 3 ) {
ns_dont_pop_wizard = TRUE;
rc = win_get_info(win,"handle",hWnd);
ns_dont_pop_wizard = FALSE;
if (rc != E_OK) {
return FALSE;
}
rc = current_window_is_a_browser_or_frame(hWnd);
}
else
{
report_param_msg();
return FALSE;
}
return rc;
}
[[i] Last edited by QA_BAY on 2005-1-1 at 20:37 [/i]]
QA_BAY 2004-12-30 23:03
以上需要的程序我都调出来了,
你要用DEBUG程序来调试一下才行!
如果看不明白的就到HELP查找吧!
shyfish 2004-12-31 08:46
password_encrypt试一下
shyfish 2004-12-31 09:12
另<kCtrl_L>应该是左边的Ctrl键的意思
dyjyhx 2005-1-4 15:43
在WinRunner的例子里找到了了示例脚本。按它的方法就没有这种问题。原因还是不太明白。
另外,它用到了自定义函数,并且把自定义函数放到了类似链接库(*Lib)的文件里。不知道怎么创建这种文件。请高手指点
QA_BAY 2005-1-4 16:18
[quote]Originally posted by [i]dyjyhx[/i] at 2005-1-4 03:43 PM:
在WinRunner的例子里找到了了示例脚本。按它的方法就没有这种问题。原因还是不太明白。
另外,它用到了自定义函数,并且把自定义函数放到了类似链接库(*Lib)的文件里。不知道怎么创建这种文件。请高手指点 [/quote]
你打开WR之后,点FILE---TEST PROPERTIES
把TEST TYPE的MAIN改为 COMPLIED MODULE就行了
然后你自己写的自定义程序就可以保存在LIB下面了!
dyjyhx 2005-1-5 08:34
谢谢QA_BOY
vivian84 2005-10-26 19:50
我的老天啊,怎么这么麻烦,我看后边的都看不懂,能不能请教一下和这个相关的问题 呢?
小曲曲 2005-11-4 17:47
你把 password_edit_set 改成edit_set.试试看。这个问题,我也碰到过的。 password_edit_set会自动加密的
lsz7741 2006-3-20 17:09
[quote]原帖由 [i]QA_BAY[/i] 于 2004-12-28 15:39 发表
问题已经解决!
本人已经在机子上试过了,可以做到!
现在我是这样做的.
先录制,然后做数据驱动!
数据就是这以下几个
name password1
asd asdfasdf
空格 空格
sdfwerw sdfsdf
... [/quote]
我在debug的时候很正常的,但是在run的时候老是跳过对“ Flight Reservations”的判断语句,不能关闭Flight Reservations,这是为什么啊?
chl6018 2006-3-29 15:50
win_activate ("ÖÐÐÇÊÀͨÎÞÏßµç¼à²âϵͳ Ver 4.0 (µ¥Õ¾°æ)");
# AfxFrameOrView42
table = "login.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
ddt_set_row(table,table_Row);
set_window ("AfxFrameOrView42", 0);
edit_set("Óû§Ãû",ddt_val(table,"username"));
edit_set("Óû§ÃÜÂë",ddt_val(table,"userpass"));
edit_set_selection ("·þÎñÆ÷±àºÅ_1", 0, 0, 0, 12);
edit_set ("·þÎñÆ÷±àºÅ_1", ddt_val(table,"server_id"));
button_press ("怫");
wait(3);
if (win_exists("AfxFrameOrView42")==E_OK)
{
report_msg("Óû§Ãû"&ddt_val(table,"username")&"»òÃÜÂë´íÎó");
wait(25);
}
else
{
report_msg("coming system username"&ddt_val(table,"username"));
}
}
ddt_close(table);
这是调试通过了的
laifeng415 2006-5-2 11:40
data table:
df;
safff fdfs ;
daffd ;
safas mercury
table = "login2.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
ddt_set_row(table,table_Row);
# Login
set_window ("Login", 2);
edit_set ("Agent Name:", ddt_val(table,"Login_Name"));
edit_get_row_length("Agent Name:",4,len);
if(len < 4)
{
tl_step("login",1,"name is incorrect");
continue;
}
else
tl_step("login",0,"name is correct");
password_edit_set("Password:", ddt_val(table,"Password"));
edit_get_row_length("Password:",4,len);
if(len < 4)
{
tl_step("password",1,"password length incorrect");
continue;
}
else
{
edit_get_text("Password:",text);
if(text!="mercury")
{
tl_step("password",1,"password is incorrect");
continue;
}
else
tl_step("password",0,"password is correct");
}
button_press ("OK");
# Flight Reservation
win_close ("Flight Reservation");
# Shell_TrayWnd
set_window ("Shell_TrayWnd", 0);
button_press ("开始");
# BaseBar
set_window ("BaseBar", 3);
toolbar_select_item ("ToolbarWindow32_1", "程序(P);WinRunner;Sample Applications;Flight 4A");
}
ddt_close(table);