51Testing软件测试论坛

标题: QTP 文本框输入类型问题,求助大家 [打印本页]

作者: king0964    时间: 2012-6-7 14:24
标题: QTP 文本框输入类型问题,求助大家
比如一个文本框,只允许输入数字(其它类型不能输入)。怎么来判断字母和中文等其它类型是否可以输入?
方法1.直接参数化不同类型数据,进行取值比较,根据比较结果判断是否能输入其它类型。比如参数化字母(ab),如果文本框VALUE为空,就是不能输入;反之则能输入。但有个问题,网页不能输入字母,但用SET方法数据时,却能输入字母,造成结果不同。
方法2.模拟键盘,直接用sendkeys输入,但又出现一个问题,中文不能用sendkeys直接输入。
希望大家帮忙看看,怎么来写这个自动化?谢谢
作者: SexyCat_1113    时间: 2012-6-7 21:10
没看明白,,,这个文本框是只允许输入数字类型,这个是开发决定的,不符合的时候给出提示或清除,,,为什么要你人为去判断其他是否能够输入?
作者: king0964    时间: 2012-6-8 09:15
回复 2# SexyCat_1113

比如一个手机号码文本框,手机号码只能输入11位数字,这是我们知道的,但开发不一定会去限制能否输入字母,所以要做这样的判断。
作者: May_may    时间: 2012-6-8 09:28
这种情况应该是提交后进行验证弹出提示的吧
作者: 黑羽祭    时间: 2012-6-8 09:49
回复 1# king0964
set输入后,将光标的焦点移开,看看刚刚输入的值还在该文本框中么?
作者: king0964    时间: 2012-6-8 10:39
回复 4# May_may
很多情况都是直接禁止输入字母的,检验不了
作者: king0964    时间: 2012-6-8 10:41
回复 5# 黑羽祭
问题有描述了,如果用set,会产生跟实际情况不一致:实际情况已经禁止输入字母,但用set方法却能输入字母。
作者: hsjzfling    时间: 2012-6-8 11:00
回复 1# king0964


    这种类型测试果断不能用set等事件的
测试方法和手工测试一样,激活控件焦点,然后噼里啪啦一阵狂敲键盘,敲完后看看控件中的文本与预期是否一致即可.
比如控件不允许输入字母,那么click文本区,然后用type或者sendkeys来敲a-z的字母,然后验证控件文本属性是否跟之前一样(依然为空),测中文也一样,先发送快捷组合键来切换输入法,然后就像手工打字一样发送字符串就行了,然后同样校验
作者: Lemon_s    时间: 2012-6-8 11:28
用Set不行,Set是直接修改了运行对象中的属性value的值,触发不了控件本身的逻辑判断
如这样的:
<input id="111"  onpaste= "return   false; "   onkeyup= "this.value=this.value.replace(/\D/g, ''); ">
首先要激活控件,否则无法触发控件中的事件。
然后用SendKeys发送字符。
楼上说的很对。
作者: king0964    时间: 2012-6-8 17:31
本帖最后由 king0964 于 2012-6-8 17:36 编辑

回复 8# hsjzfling
关键是怎么判断现在是中文输入法还是英文输入法?如果不知道什么输入法,怎么切换?
还有,这个切换的点,怎么判断?QTP判断不了输入是否字母或中文?
作者: hsjzfling    时间: 2012-6-8 18:25
回复 10# king0964


从测试初始状态,前置条件等方面去考虑吧,很多事情实际多尝试下可以找到方法的
作者: shihw11    时间: 2012-6-9 09:51
首先在开发环节。
采用正则表达式来保证文本框中输入的是数字而不是其他数据类型。

关于规定输入的数据类型我认为应该是开发端所做的。
例如:验证输入的邮箱地址是否符合邮箱格式,代码如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Question3
{

        /**
         * 输入一个Email地址,然后用正则表达式验证该Email地址是否正确。
         */
        public static void main(String[] args)
        {
                System.out.println("请输入Email地址");
                String str=SavitchIn.readLineWord();
                String ema="^[a-zA-Z0-9_\\-]{1,}@[a-zA-Z0-9_\\-]{1,}\\.[a-zA-Z0-9_\\-.]{1,}$";
                Pattern p=Pattern.compile(ema);
                Matcher m=p.matcher(str);
               
                if(m.matches())
                {
                        System.out.println("Email地址合法");
                }
                else
                {
                        System.out.println("Email地址非法");
                }

        }

}

如果想去验证文本框中输入的是否是数字,只需要将ema的值赋予为"[0-9]"
这样就够了,不足之处欢迎拍砖。
作者: king0964    时间: 2012-6-12 09:41
回复 12# shihw11
谢谢回复
不过这个也不行,这只是单据用正则表达式校验是否满足格式,并不能模拟输入。
要求很简单:对于一个只限制输入数字的文本框,手工测试分有效(数字)和无效(字母、中文和特殊字符等),用自动化模拟这几种类型,并自动返回那种类型不行,更好的是那种类型那个不行。我们报告不可能写,除了数字,其它类型不行,是不是都不行?或者只有那个类型不行?无法表现出来。
作者: king0964    时间: 2012-6-12 11:59
回复 1# king0964
有点麻烦,不过算解决了。
把参数化数据分为数字、字母、特殊字符和中文等,直接检验数据本身;并用两层次判断条件判断能否输入和数据正确性。
中英文输入法检验利用sendkeys "^ "(ctrl+space)
感谢大家的回复
作者: shanfeng1419    时间: 2012-6-13 10:13
回复 14# king0964


    很好的问题。
   “并用两层次判断条件判断能否输入和数据正确性。” 第一层判断能否输入,是怎么做的呢,不用set,用什么?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2