51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4981|回复: 20
打印 上一主题 下一主题

[求助] 可否根据字体颜色来进行判断呢?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-6-30 11:41:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
最近在录制一个注册脚本,见下图:

能否根据提示信息颜色的不同来进行判断呢?
希望各位高手指点一下,最好能给出判断的脚本,谢谢啦!!!

[ 本帖最后由 zhengpeipei 于 2009-6-30 11:43 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

21#
发表于 2009-7-2 13:44:40 | 只看该作者
我机器上没有QTP,用RFT写了一段演示脚本楼主参考一下吧。代码虽然不同,但是思路是相同的,在演示脚本中我只对用户名的不同的情况验证,并返回系统的提示信息文本和字体颜色。代码写的比较复杂,因为我写它也是因为手痒。在我们的自动化测试过程中,测试力度不会细到用户名这样的功能点,因为在我们看来,用户名合法性校验以及系统登录功能是否正确这样的功能,是不适合用自动化测试来做的,更适合人工执行

import resources.UsrnameTestHelper;
import com.rational.test.ft.*;
import com.rational.test.ft.object.interfaces.*;
import com.rational.test.ft.object.interfaces.SAP.*;
import com.rational.test.ft.object.interfaces.siebel.*;
import com.rational.test.ft.object.interfaces.flex.*;
import com.rational.test.ft.script.*;
import com.rational.test.ft.value.*;
import com.rational.test.ft.vp.*;
import com.cn.jiuqi.automation.ci.*;
import com.cn.jiuqi.automation.rft.*;

/**
* Description   : 对页面中的用户名文本框进行校验,在演示脚本中,只校验了用户名为空\用户名不符合规定长度\正确用户名三种情况
* @author wangyunpeng
*/
public class UsrnameTest extends UsrnameTestHelper
{
        /**
         * Script Name   : <b>UsrnameTest</b>
         * Generated     : <b>2009-7-2 下午12:51:18</b>
         * Description   : Functional Test Script
         * Original Host : WinNT Version 5.1  Build 2600 (S)
         *
         * @since  2009/07/02
         * @author wangyunpeng
         */
        public void testMain(Object[] args)
        {
                /*
                 * 首先定义要进行录入的测试数据,然后遍历数组,执行测试
                 * 其实用键值对更为合理,因为输入和输出应该是对应的,这里就暂时用一个switch做简单处理了.
                 */
                String[] usrnames = {"","@","test"};
                String expectMessage = "";//定义一个变量用来存储预期结果
                String expectColor = "";
                for(int i = 0; i < usrnames.length; i++){
                        this.inputUsrname(usrnames);//录入用户名;
                       
                        switch(i){//利用switch来设置预期结果
                        case 0:
                                expectMessage = "请输入登录名";
                                expectColor = "Color:red";
                                break;
                        case 1:
                                expectMessage = "长度必须4-16位";
                                expectColor = "Color:red";
                        case 2:
                                expectMessage = "";
                                expectColor = "";
                        }
                        //获取页面信息并进行校验
                        String message = this.getMessage();
                        String color = this.getColor();
                        /*
                         * 以下代码实现对结果的检查,这里只简单输出比较结果
                         * 实际测试中,此出的代码应做相应修改
                         */
                        if(message.equals(expectMessage) && color.equals(expectColor)){
                                System.out.println("当输入用户名:" + usrnames + "时,系统处理正确");
                        }
                }
        }
        /**
         * 执行录入用户名的操作
         * @param usrname
         */
        public void inputUsrname(String usrname){
                rft.getObject(".name", "username").setProperty(".value", usrname);//在用户名文本框中录入用户名;
                rft.getObject(".name", "password").click();//点击密码文本框以切换焦点;
        }
        /**
         * 录入用户名,并且返回对用户名的检查结果
         * @param usrname String 要进行录入的用户名
         * @return String 返回信息
         */
        public String getMessage(){
                if(this.isError()){//首先判断是否出现了错误信息提示框,如果有则返回文本
                        String message = rft.getObject(".id", "chk_username").getProperty(".text").toString();//获取提示信息的文本
                        return message;
                }
                return null;
        }
        /**
         * 当录入用户名后,返回提示信息的文字;
         * @return
         */
        public String getColor(){
                if(this.isError()){//首先判断是否出现了错误信息提示框,如果有则返回文本颜色
                        String color = rft.getObject(".id", "chk_username").getProperty("style").toString();//获取提示信息的文本
                        return color;
                }
                return null;
        }
       
        /**
         * 判断错误提示信息是否出现
         * @return boolean 出现输入不合法则返回true,否则返回false
         */
        public boolean isError(){
                return (null == rft.getObject(".id", "chk_username"));
        }
        /**
         * RftTools类是一个封装了RFT对象识别接口的工具类.
         */
        public RftTools rft = new RftTools();
}
回复 支持 反对

使用道具 举报

该用户从未签到

20#
 楼主| 发表于 2009-7-2 12:58:21 | 只看该作者

回复dreamever和小_麦的帖子

我录制的网站还没有发布,就用新浪网注册的页面吧,希望可以给一个完整的脚本,让我好好学习一下,多谢,多谢!!!!
https://login.sina.com.cn/cgi/register/reg_sso.php
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2009-7-2 09:35:38 | 只看该作者
添加对象的是后,找你webelement 的上一级我想应该是webtable....
是的...你最好给个页面.那样就好弄多了
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-7-2 09:29:49 | 只看该作者
原帖由 zhengpeipei 于 2009-7-2 09:26 发表
这个提示信息的对象不是表格怎么使用webtable呢,可以写一下脚本吗?我是新手,对脚本不是很熟悉,谢谢!!!

你可以给个地址吗?不然没有界面的话脚本也不好写
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2009-7-2 09:26:31 | 只看该作者

回复小_麦的帖子

这个提示信息的对象不是表格怎么使用webtable呢,可以写一下脚本吗?我是新手,对脚本不是很熟悉,谢谢!!!
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2009-7-1 18:42:58 | 只看该作者

回复 15# 的帖子

其实我觉得用WebElement不好,不妨用webtable下的方法,如GetCellData,然后取得文字,在和预期值比较,如果不行在用WebElement,控制对象的innertext,或者其他.最好单独写成方法..用描述性语言会清晰些..
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2009-7-1 17:54:36 | 只看该作者

回复小_麦的帖子

应该控制这个WebElement对象的什么属性呢?
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-7-1 17:03:40 | 只看该作者
innertext咯,用object
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-7-4 15:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    13#
    发表于 2009-7-1 15:50:33 | 只看该作者
    为何不用正则表达式对提示语进行判断那??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2009-7-1 14:36:01 | 只看该作者
    你的脚本逻辑太复杂了,后期极不宜维护.不适合用在项目中,还有你的脚本中的report一旦执行,就全都是pass,这样不好,没有检查点的作用,
    user_check=DataTable.Value("user_check","Action1")
    If Browser("xxx大餐厅").Page("xxx-个人注册").WebElement(user_check).Exist(1) Then
    类似这两句也不建议这样做,控制对象的名字,不如控制对象的属性
    总之你的这个脚本可以拆成几个测试用例,不该都柔在一起
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2009-7-1 13:54:59 | 只看该作者

    怎么没有人发表意见啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2009-7-1 09:56:50 | 只看该作者
    下面是我录制的脚本,大家来找错吧。
    Dim user_check,passwd_check,pwdcopy_check,email_check,title_check
    Browser("xxx大餐厅").Page("欢迎光临 xxx招聘网站 首页").Link("个人会员注册").Click
    Browser("xxx大餐厅").Page("信息注册条款").WebButton("我接受").Click
    Browser("xxx大餐厅").Page("xxx-个人注册").WebEdit("perUserName").Set DataTable("user", dtGlobalSheet)
    user_check=DataTable.Value("user_check","Action1")
    If Browser("xxx大餐厅").Page("xxx-个人注册").WebElement(user_check).Exist(1) Then
        If user_check="错误!会员名称不能为空!" Then
            Reporter.ReportEvent micPass,"注册失败",user_check
        elseIf user_check="错误!此用户名已被使用,请重新填写" Then       
            Reporter.ReportEvent micPass,"注册失败",user_check
        end if
    end if
    Browser("xxx大餐厅").Page("xxx-个人注册").WebEdit("perPassWord").SetSecure DataTable("passwd", dtGlobalSheet)
    passwd_check=DataTable.Value("passwd_check","Action1")
    If browser("xxx大餐厅").Page("xxx-个人注册").WebElement(passwd_check).Exist(1) Then
        If passwd_check = "错误!密码不能为空!" Then
            Reporter.ReportEvent micPass,"注册失败",passwd_check
        elseIf passwd_check="密码长度错误!由6-20个字符组成。" Then
            Reporter.ReportEvent micPass,"注册失败",passwd_check
        end if
    end if
    Browser("xxx大餐厅").Page("xxx-个人注册").WebEdit("textfield3").SetSecure DataTable("pwdcopy", dtGlobalSheet)
    pwdcopy_check=DataTable.Value("pwdcopy_check","Action1")
    If browser("xxx大餐厅").Page("xxx-个人注册").WebElement(pwdcopy_check).Exist(1) Then
        If   pwdcopy_check = "错误!确认密码不能为空!" Then
            Reporter.ReportEvent micPass,"注册失败",pwdcopy_check
        elseIf pwdcopy_check="两次密码输入不一样,重复输入上面设置的密码!" Then
            Reporter.ReportEvent micPass,"注册失败",pwdcopy_check               
        end if
    end if
    Browser("xxx大餐厅").Page("xxx-个人注册").WebEdit("perEmail").Set DataTable("email", dtGlobalSheet)
    email_check=datatable.Value("email_check","Action1")
    If browser("xxx大餐厅").Page("xxx-个人注册").WebElement(email_check).Exist(1) Then
        If   email_check = "错误!邮件地址不能为空!" Then
            Reporter.ReportEvent micPass,"注册失败",email_check               
        elseIf email_check="电子邮件格式不正确!" Then
            Reporter.ReportEvent micPass,"注册失败",email_check                 
        elseIf   email_check = "错误!此邮箱已被使用!" Then
            Reporter.ReportEvent micPass,"注册失败",email_check               
        end if
    end if
    Browser("xxxx大餐厅").Page("xxxx-个人注册").WebButton("下一步").Click
    If Browser("xxxx大餐厅").Page("xxxx-个人注册").Exist(1) Then
        Browser("xxx大餐厅").Close
    elseIf Browser("xxx大餐厅").Page("简历属性设置").Exist(1) Then
        Browser("金禾泰大餐厅").Page("简历属性设置").WebEdit("title").Set DataTable                          ("title",dtGlobalSheet)
        title_check=DataTable.Value("title_check","Action1")
        If Browser("xxx大餐厅").Page("简历属性设置").WebElement(title_check).Exist(1) Then
            If title_check="错误!简历标题不能为空!" Then
                Reporter.ReportEvent micPass,"注册失败",title_check                  
            else
                Browser("xxx大餐厅").Page("简历属性设置").WebRadioGroup("operType").Select DataTable("opertype", dtGlobalSheet)
                Browser("xxx大餐厅").Page("简历属性设置").WebList("select").Select DataTable("language", dtGlobalSheet)
                Browser("xxx大餐厅").Page("简历属性设置").WebRadioGroup("showType").Select DataTable("showtype", dtGlobalSheet)
                Browser("xxx大餐厅").Page("简历属性设置").WebButton("下一步").Click
                Browser("xxx大餐厅").Page("xxx").WebButton("返回首页").Click
                Browser("xxx大餐厅").Page("欢迎光临 xxx招聘网站 首页").Link("安全退出").Click
                Browser("xxx大餐厅").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
                Browser("xxx大餐厅").Page("欢迎光临 xxx招聘网站 首页_2").Sync
                Browser("xxx大餐厅").Close
                Reporter.ReportEvent micPass,"注册成功","注册成功!"
            end if
        End If         
    end if
    DataTable.ExportSheet "D:\招聘网站\个人注册.xls",1

    因为输入不合法的数据给出提示信息后,输入的数据会自动清空,所以我输入一个数据后就进行判断。希望大家多多发表意见,谢谢!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2009-6-30 14:18:31 | 只看该作者
    原帖由 zhengpeipei 于 2009-6-30 12:24 发表
    像这个注册的脚本录制的思路是什么呢?
    我是这样录制的:对提示信息插入检查点并进行参数化,先输入用户名,之后进行判断,若不正确就执行下一条用例,若正确就输入密码,在像这样进行判断……

    关键不在于如何去录制,而在于如何去校验(楼主别笑我咬文嚼字啊)。
    首先,楼主如果要对用户名、密码等几个文本框都做正向和反向的测试,那么没说的,就挨个测试吧,人工怎么测试的,脚本就怎么执行,这没什么好说的。
    其次说思路的问题,比如对于登录操作来说,首先应该明确要校验什么。“不输入密码不允许登录”和“密码为空时出现文字提示”这是两个完全不同的校验点,它会决定你的脚本如何录制。如果我们要验证的是“不输入密码不允许登录”,那么OK,我们就让脚本录入空密码并点击登录,然后校验当前页面是否仍然显示用户名、密码等文本框元素(也就是仍然停留在当前页面);如果要校验的是”密码为空时出现文字提示”,那么我们就让脚本录入空密码并点击登录,然后在当前页面中查找“密码不能为空”这个文本是否存在。
    说一句老生常谈的话,自动化测试过程中一定要先让你的测试目标明确,就象你说的“若不正确就执行下一条用例”,那么不正确的标准是什么呢,对于脚本来说它无法识别什么是正确的,什么是不正确的,它只能判断XX对象是否存在,XX文本是否与预期的文本值一致

    [ 本帖最后由 dreamever 于 2009-6-30 14:20 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2009-6-30 13:41:14 | 只看该作者
    webelement 对象,如果直接用QTP的话,判断起来也比较麻烦的

    我觉得颜色值可以不用自动化了,我估计你上面的提示信息是一个div来的(可以用一些查看页面dom结构的工具看一下,如ie developer),你可以用qtp 直接访问dom的方法,来取得提交信息的内容,颜色值能不能取得到,我就不知道了.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2009-6-30 13:18:15 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2009-6-30 12:24:34 | 只看该作者
    像这个注册的脚本录制的思路是什么呢?
    我是这样录制的:对提示信息插入检查点并进行参数化,先输入用户名,之后进行判断,若不正确就执行下一条用例,若正确就输入密码,在像这样进行判断……
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2009-6-30 12:15:52 | 只看该作者

    回复4#的帖子

    用spy抓取的提示信息是一个WebElement对象
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2009-6-30 12:05:44 | 只看该作者
    楼为,用spy抓取提示信息的,是一个什么对象来的,是一个div,还是其它的??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2009-6-30 12:02:38 | 只看该作者

    回复2#的帖子

    我用spy查了一下,没有color属性啊。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-20 15:31 , Processed in 0.082601 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表