查看完整版本: 登陆界面的测试程序

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 ("&Ouml;&ETH;&ETH;&Ccedil;&Ecirc;&Agrave;&Iacute;¨&Icirc;&THORN;&Iuml;&szlig;&micro;&ccedil;&frac14;à&sup2;&acirc;&Iuml;&micro;&Iacute;&sup3; Ver 4.0 (&micro;&yen;&Otilde;&frac34;°&aelig;)");
# 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("&Oacute;&Atilde;&raquo;§&Atilde;&ucirc;",ddt_val(table,"username"));
                edit_set("&Oacute;&Atilde;&raquo;§&Atilde;&Uuml;&Acirc;&euml;",ddt_val(table,"userpass"));
                edit_set_selection ("·&thorn;&Icirc;&ntilde;&AElig;÷±à&ordm;&Aring;_1", 0, 0, 0, 12);
                edit_set ("·&thorn;&Icirc;&ntilde;&AElig;÷±à&ordm;&Aring;_1", ddt_val(table,"server_id"));
                button_press ("&micro;&Ccedil;&Acirc;&frac12;");

        wait(3);
        if (win_exists("AfxFrameOrView42")==E_OK)
       
        {
        report_msg("&Oacute;&Atilde;&raquo;§&Atilde;&ucirc;"&ddt_val(table,"username")&"&raquo;ò&Atilde;&Uuml;&Acirc;&euml;&acute;í&Icirc;ó");
        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);
页: [1] 2
查看完整版本: 登陆界面的测试程序