51Testing软件测试论坛

标题: 怎样测试已经控制了最大长度的控件的最大长度阿 [打印本页]

作者: zhuifengha    时间: 2007-8-23 09:06
标题: 怎样测试已经控制了最大长度的控件的最大长度阿
刚学QTP不久,碰到一个问题。
用户名的最大长度为20,就是输入20个字符后就不能输入了,用QTP怎么测试阿
我先在记录中输入21个字符,想检查它自动截断,但是运行会报错。
而且我的控件事WinEdit,也没有找到max length属性。

高手给解答下吧,谢谢了
作者: xiaonan    时间: 2007-8-23 09:23
你能不能把需求描述一下,比如用户名超过长20个字符后,程序会怎么处理的?
作者: zhuifengha    时间: 2007-8-23 09:38
就是输入用户名的时候,输入20个字符后就不能输入了,控件的最大长度是20,无法输入第21个字符阿
作者: rivermen    时间: 2007-8-23 09:57
len函数
作者: zhuifengha    时间: 2007-8-23 10:07
能具体说一下么?len函数怎么用啊,能解决判断最大长度的问题?
作者: anson_xiong    时间: 2007-8-23 10:08
example:

1.先向那個Control輸入超過20位的字符 "12345678901234567890123456"
2.如果Spec要求是超過20位字符,Control需要截斷後面超過的位數,且不提示,
   拿麼判斷Control的Text屬性是否為 "12345678901234567890"

------------------------------------------------------------------------------------
1.先向那個Control輸入超過20位的字符 "12345678901234567890123456"
2.如果Spec要求是超過20位字符,Control給出提示,光標不離開
   拿麼判斷是否有提示 Dialog 出現,同時判斷提示信息是否正確

.........


還是要結合你的Spec啊.


Object.Set "1234567890123456789012345"
Object.CheckProperty "Text", "12345678901234567890", 1
作者: anson_xiong    时间: 2007-8-23 10:11
原帖由 rivermen 于 2007-8-23 09:57 发表
len函数



如果Spec規定需要Cut後面的字符號,這個時候單純判斷 Text 的 Length 是不夠的, 也是不嚴謹的, 有可能程序人員Cut錯誤了,截後變成了截前,甚至截錯,
作者: zhuifengha    时间: 2007-8-23 10:13
谢谢楼上的解释

但是楼上还是没有看明白
我说了,控件控制了最多输入20个字符,根本就无法输入超过20个字符
并不是输入,提交后的截断或者报错的问题啊。
作者: yt1985cncn    时间: 2007-8-23 10:21
楼主,你到底想表达的是什么意思啊,#1说:在记录中输入21个字符,想检查它自动截断,#8又说:并不是输入,提交后的截断或者报错的问题啊~~
作者: anson_xiong    时间: 2007-8-23 10:23
用QTP  Set  超過20位的字符.QTP腳本會出錯麼?
作者: anson_xiong    时间: 2007-8-23 10:25
呵呵呵呵,如果是這樣,我寫一個函數給你好了.that is easy.

sdlkfj5
作者: zhuifengha    时间: 2007-8-23 10:25
我本来想在QTP的Step中给这个控件输入21个字符,然后检查它取了前20个,但是这样QTP会报错

应用程序中的控件最大输入20个字符,不可能输入第21个的

由于是控件自己控制了长度,所以我不知道用QTP应该如何测试这个最大长度阿
作者: anson_xiong    时间: 2007-8-23 10:49
剛才有事離開了一下, sorry
作者: anson_xiong    时间: 2007-8-23 10:49
If SetText(SwfWindow("Form1").SwfEdit("TextBox1"), "1234567890123456789012345") Then
        reporter.ReportEvent micFail, "字符串长度检查错误", "长度没有控制正确"
End If

'=========================================================
' 函数说明: 向一个 SwfEdit 对象输入Text内容, 返回执行成功或失败
' 参数说明: objEdit - 类型为 SwfEdit 的对象;text  - 要填入到objEdit中的内容
' 返 回 值: Boolean
'=========================================================

Public Function SetText(byval objEdit, byval text)
        On Error Resume Next
        objEdit.Set text
        If err.number<>0  Then
                '产生错误
                SetText =  False
        Else   SetText =  True
        End If
  End Function

[ 本帖最后由 walker1020 于 2007-8-27 22:04 编辑 ]
作者: skyzhu    时间: 2007-8-23 10:49
那就不要用SET  用 TYPE
作者: anson_xiong    时间: 2007-8-23 10:51
如果你向控件中填寫超過限制長度的字符, 如果還可以填入成功, 拿麼一定有錯, 呵呵,產生錯誤的話,說明開發人員有做好限制錯誤,
作者: anson_xiong    时间: 2007-8-23 10:57
原帖由 skyzhu 于 2007-8-23 10:49 发表
那就不要用SET  用 TYPE


SwfEdit 對象的說明中,

Type 的解釋是:


Description
Types the specified string in the object.

Syntax
object.Type KeyboardInput

Argument Description
object A test object of type SwfEdit.
KeyboardInput Required. A String value.

The text string and/or constants representing non-alphanumeric keys.  

上面的意思,是說Type用與鍵入一些特殊的字串,並且是non-alphanumeric Keys, 非文字數字的鍵
作者: anson_xiong    时间: 2007-8-23 11:01
繼續:

關於 Set, 說明中是這樣描述的:

Description
Sets the value of an edit box.

Syntax
object.Set Text

Argument Description
object A test object of type SwfEdit.
Text Required. A String value. The text to be entered in the edit field.



The text to be entered in the edit field. sdlkfj3


So, 我認為用Set是沒有錯誤的, 而且,你可以發現對於 SwfEdit ,QTP自身錄製的腳本中,就一定是使用Set 而非Type的,

只有在案下會車,Tab 的時候,QTP才會使用到 Type

objEdit.Type micReturn
作者: zhuifengha    时间: 2007-8-23 11:08
谢谢你的函数

确实可以set 21 个字符了

但是,我按你的函数运行了之后,test result中会显示错误阿.........这个能解决不?
作者: skyzhu    时间: 2007-8-23 11:37
type 也一样可以输普通字符的,而且可以追加,或者插入的
不一定都要看帮助 试了就知道了
作者: anson_xiong    时间: 2007-8-23 11:54
Type 相當於往TextBox中敲入數據,模擬鍵盤的一個鍵一個鍵的輸入
Set   是直接往TextBox中設定它的Text內容.

呵呵呵呵,看測試需求了.如果只是要輸入內容,不用一個一個鍵入,拿麼還是用Set好,

因為Type在QTP內部仍然是一個一個鍵入到目標Textbox上的,內部多不少步驟,
作者: anson_xiong    时间: 2007-8-23 11:54
原帖由 zhuifengha 于 2007-8-23 11:08 发表
谢谢你的函数

确实可以set 21 个字符了

但是,我按你的函数运行了之后,test result中会显示错误阿.........这个能解决不?



上午比較忙,下午幫你看看.
作者: zhuifengha    时间: 2007-8-23 11:58
谢谢大家帮忙啊
作者: walker1020    时间: 2007-8-24 00:13
原帖由 zhuifengha 于 2007-8-23 11:08 发表
谢谢你的函数

确实可以set 21 个字符了

但是,我按你的函数运行了之后,test result中会显示错误阿.........这个能解决不?


那就使用 Reporter对象的 ReportEvent方法自己去检查 这个地方了
作者: walker1020    时间: 2007-8-24 00:14
QTP 是死的,因为它没有思想,没有自己的思考。可人是活的,因为人有思想!
作者: yabest    时间: 2007-8-24 02:00
这个是要测试控件对键盘输入的反应的,所以不能绕过键盘事件,直接用Edit的set方法,因为set方法是直接往对象的内部text属性赋值的。

更不能用set超长字符串后再检查错误这种方法的,你想想用户实际输入时,是不可能触发这种错误的,你却制造了这种错误,跟测试目的根本就是两码事了。

所以,要用模拟键盘输入的方法,比如对象的type方法,或者系统对象的sendkeys方法,这样才符合测试要求!
这样输入完后,再讲edit的内容取出来,看看是否忽略了后面超长部分的键盘输入了。

[ 本帖最后由 yabest 于 2007-8-24 02:01 编辑 ]
作者: lyscu    时间: 2007-8-24 12:48
两位高手,学习。
作者: anson_xiong    时间: 2007-8-26 02:09
原帖由 yabest 于 2007-8-24 02:00 发表
这个是要测试控件对键盘输入的反应的,所以不能绕过键盘事件,直接用Edit的set方法,因为set方法是直接往对象的内部text属性赋值的。

更不能用set超长字符串后再检查错误这种方法的,你想想用户实际输入时, ...


呵呵呵呵,这个忽略了,虽然也曾有这样的怀疑,但是在看QTP录制的脚本的时候发现它只用Set,再看他家的帮助里面的说明,便没有再做更多思考,虚心接受。多谢赐教。Thank you for remind.


To 楼主:原本答应帮楼主搞定的Repoter的问题,因为周五部门的服务器坏了,加上和台北的会议,一直没有处理,呵呵,Say Sorry. 周一下午再替楼主处理。


sdlkfj3
作者: prcsc    时间: 2007-8-26 08:21
ddd
作者: gzj_06    时间: 2007-8-26 16:16
原帖由 zhuifengha 于 2007-8-23 11:08 发表
谢谢你的函数

确实可以set 21 个字符了

但是,我按你的函数运行了之后,test result中会显示错误阿.........这个能解决不?
报嘛错,你最好把错误信息提供给大家,好帮你分析
作者: anson_xiong    时间: 2007-8-27 09:12
'=======================================================
' 用例編號:
' 用例說明:
' 用例作者:
' 版本歷史:
'=======================================================
Option Explicit

'範例
If SetText(SwfWindow("Form1").SwfEdit("TextBox1"), "1234567890123456789012345") Then
        reporter.ReportEvent micFail, "字串長度檢查錯誤", "長度沒有控制正確"
End If


'=========================================================
' 函數說明: 向一個 SwfEdit 對象塞入Text內容, 返回執行成敗
' 參數說明: objEdit - 類型為 SwfEdit 的控件對象
'           text    - 要填入到 objEdit 中的內容
' 返 回 值: Boolean
'=========================================================

Public Function SetText(byval objEdit, byval text)
        On Error Resume Next

        '错误报表中不显示接下来产生的任何错误
        Reporter.Filter rfDisableAll
               
        objEdit.Type text

        If err.number<>0 Then
                '產生錯誤
                SetText =  False
        Else
                SetText =  True
        End If

        '恢复报表错误过滤,否则后面所有的错误都不会纪录到Report中.
        Reporter.Filter rfEnableAll
End Function

关键在于:
        Reporter.Filter rfDisableAll
        Reporter.Filter rfEnableAll

[ 本帖最后由 walker1020 于 2007-8-27 22:06 编辑 ]
作者: bobile    时间: 2007-8-27 09:20
好帖子
作者: zhuifengha    时间: 2007-8-27 10:42
十分感谢sdlkfj3
作者: oeardi    时间: 2007-8-27 12:11
...
作者: walker1020    时间: 2007-8-27 22:15
非常感谢 热心朋友anson_xiong对论坛的支持,特别是不断回复楼主的问题。此种精神值得偶学习。 你在 #31的 solution可以说是 #14 的增强版。呵呵!
作者: lp1109ab    时间: 2007-8-28 16:52
标题: 学习中
顶,学习下
作者: flying32    时间: 2007-9-3 15:42
看看!
作者: yfyl0309    时间: 2007-9-4 15:01
原帖由 skyzhu 于 2007-8-23 11:37 发表
type 也一样可以输普通字符的,而且可以追加,或者插入的
不一定都要看帮助 试了就知道了

type 怎么输入普通字符阿 我的控件属性是webedit  用type输普通字符是会出错的阿 请教高手了
作者: yfyl0309    时间: 2007-9-5 09:28
我觉得是不是这样的呢 webedit属性的控件没有type这个方法  这类控件测试长度的时候可不可以直接用getroproperty(maxlenth)呢  如果取出来的值正确的话就证明长度控制了呢
另外 我在qtp启动的时候只加载activex 这时候识别出来的对象就是winobject属性的了  用 type 方法就是正确的  但是我觉得这样实在是太麻烦了   
请教各位前辈  对于webedit这样属性的控件测试最大长度究竟应该用什么方法呢
作者: yabest    时间: 2007-9-5 10:00
原帖由 yfyl0309 于 2007-9-5 09:28 发表
我觉得是不是这样的呢 webedit属性的控件没有type这个方法  这类控件测试长度的时候可不可以直接用getroproperty(maxlenth)呢  如果取出来的值正确的话就证明长度控制了呢


这样测试,太间接了,谁能保证maxlenth属性是20,它就真的按20来控制输入了?!

还是要尽量贴近实际情况,自己模拟键盘输入,然后检查webedit里的内容,这样的比较好。
作者: yfyl0309    时间: 2007-9-5 11:27
但是web属性的控件是没有type 方法的呀  难道真的只能把它识别成win属性的 然后再用type 方法吗? 请教高手说的 type可以输入普通字符 而且可以插入 追加    具体是怎么操作的呢
作者: 19thangel    时间: 2007-9-5 13:32
用sendkey模拟输入
作者: yfyl0309    时间: 2007-9-5 15:00
各位前辈到底是怎么用 type 和sendkeys 的呢  
有没有前辈可以就  百度的 搜索文本框 举 一个 type 和sendkeys 具体用法的例子呢 就输几个简单的字符就可以了 谢谢了
公司一个礼拜前让我自己看qtp 说是要用来测一个网页 公司从来没人用过 而且就我一个人 我看的头都大了 只能来 请教各位前辈了 麻烦大家了
作者: 19thangel    时间: 2007-9-5 15:44
打开百度,焦点定在对话框,输入“sousuo”,点击确定。

Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").click
Dim WshShell
        set WshShell = CreateObject("Wscript.Shell")
        WshShell.SendKeys "sousuo"
   Set WshShell = nothing
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Click





type看了下帮助,貌似webedit的属性不支持。
作者: yfyl0309    时间: 2007-9-5 16:17
楼上的 非常感谢你的解答  但是我试了下 这样的话 WebEdit("wd")中是空的  "sousou"并没有输进去呀
作者: yabest    时间: 2007-9-5 16:24
原帖由 yfyl0309 于 2007-9-5 16:17 发表
楼上的 非常感谢你的解答  但是我试了下 这样的话 WebEdit("wd")中是空的  "sousou"并没有输进去呀


可能webedit没得到焦点吧,你试试手工点击,让焦点落在这webedit上。
作者: yfyl0309    时间: 2007-9-5 16:31
Browser("百度搜索").Page("百度一下,你就知道").WebEdit("wd"). FireEvent "onfocus"   
  Browser("百度搜索").Page("百度一下,你就知道").WebEdit("wd").Set "1"
        Dim WshShell
        set WshShell = CreateObject("Wscript.Shell")
        WshShell.SendKeys "sousuo"
   Set WshShell = nothing
Browser("百度搜索").Page("百度一下,你就知道").WebButton("百度一下").click


我把脚本改成这样 搜索结果是 “1“                   "sousuo" 没有输进去
作者: 19thangel    时间: 2007-9-5 16:38
Set "1"以后焦点没了,再点一次试试
作者: yfyl0309    时间: 2007-9-5 17:59
对了      非常感谢各位热心帮忙了   我来总结一下TYPE 和SENDKEYS的用法 说的不对的还请各位前辈指正
首先作用是  模拟键盘动作输入字符  
对于web属性的控件 没有type方法  但是可以用低级录制模式 将控件识别成win属性的 就可以用type了  

sendkeys 用法前辈们已经说得很清楚了  需要注意的是 一定要让控件得到焦点  不然就会犯我那样的错误了哦sdlkfj5

解决了这个问题 觉得很开心  再次谢谢大家的帮忙
作者: yabest    时间: 2007-9-5 18:34
原帖由 yfyl0309 于 2007-9-5 16:31 发表
Browser("百度搜索").Page("百度一下,你就知道").WebEdit("wd"). FireEvent "onfocus"   
  Browser("百度搜索").Page("百度一下,你就知道").WebEdit("wd").Set "1"
        Dim WshShell
        set WshShell = CreateObject("Wscript.Shell")
        WshShell.SendKeys "sousuo"
   Set WshShell = nothing
Browser("百度搜索").Page("百度一下,你就知道").WebButton("百度一下").click


我把脚本改成这样 搜索结果是 “1“                   "sousuo" 没有输进去
.


改成这样就可以了!用Click模拟鼠标点击来获得焦点!


  1. Browser("百度搜索").Page("百度一下,你就知道").WebEdit("wd").Click
  2. Dim WshShell
  3. set WshShell = CreateObject("Wscript.Shell")
  4. WshShell.SendKeys "sousuo"
复制代码

作者: danmy    时间: 2007-9-6 09:32
WebEdit 好像有个属性是最大长度吧? 不记得了,一会看看
作者: milan330330    时间: 2007-9-6 10:30
type 记得我是在输入QQ密码的时候用过~~
作者: wuyu702    时间: 2007-10-25 11:58
学习啊




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