51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5204|回复: 22
打印 上一主题 下一主题

[求助] 一个棘手的问题!大家帮帮忙!多谢

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-8-19 15:36:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
==================================================================================================
1)    现状:用户登录认证画面-->明细画面(登录,更新,删除)-->确认画面
2) 操作流程:用户登录后,在明细画面填入信息,到确认画面再次确认填入信息,登录到DB. 确认画面关闭,明细画面显示,
             再次检索后要求把刚才登录到数据库的数据行选中(明细画面上有一个DataGrid)。
3)     问题:登录到DB的数据有一Key(EmpyloeeId),现在要在明细画面上(DataGrid)里选中该Key的所在行,请问QTP里VBScript怎么写?        :VbWindow("emInfomation").ActiveX("ActiveX").ActiveX("DataGrid").Click ??????
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2009-8-19 16:25:19 | 只看该作者
是不是大家测的都是WEB程序,VB的很少啊,都没有人帮帮忙!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-8-19 17:26:05 | 只看该作者
自己先顶,等好心人帮忙!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-8-19 17:36:09 | 只看该作者
先确认下你要选中的行的对象是否能被识别到,就你贴的代码来看应该是没有识别到的,只能识别到ActiveX级别。

可以通过GetTextLocation的方法获取key文本在ActiveX("DataGrid")中的坐标x,y,然后
VbWindow("emInfomation").ActiveX("ActiveX").ActiveX("DataGrid").Click x,y 即可

GetTextLocation方法的具体用法可参见QTP帮助文档
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-8-19 17:52:14 | 只看该作者
原帖由 hsjzfling 于 2009-8-19 17:36 发表
先确认下你要选中的行的对象是否能被识别到,就你贴的代码来看应该是没有识别到的,只能识别到ActiveX级别。

可以通过GetTextLocation的方法获取key文本在ActiveX("DataGrid")中的坐标x,y,然后
VbWindow("emInf ...


1: 没错只能识别到ActiveX级别。
2: 我看了GetTextLocation方法的帮助了,画面上DataGrid有很多行数据,有10个字段,EmpyloeeId是能唯一标示一行数据的字段。我现在要的是EmpyloeeId = “SS00162”数据所在行,而VbWindow("emInfomation").ActiveX("ActiveX").ActiveX("DataGrid").Click是靠坐标的。object.GetTextLocation (TextToFind, Left, Top, Right, Bottom, [MatchWholeWordOnly])的参数TextToFind是写字段名还是我要查找的值“SS00162”呢?不靠坐标其它还有什么方法没?
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-8-19 18:01:24 | 只看该作者

回复 5# 的帖子

是依靠坐标没错,但只要所查找的文本在当前对象中是唯一的,那么还是能动态定位到文本所在的坐标的。
对象不能识别,能用的方法就很有限了,GetTextLocation是我目前知道的最好的来处理类似问题的方法。
快要下班了,晚上我到家再写段示例代码来介绍该方法的使用好了,其实帮助文档中也有代码的,只是介绍的不算很清楚。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-8-19 18:04:21 | 只看该作者
回复 5# 的帖子
对你太感激了!
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-8-20 11:33:44 | 只看该作者

回复 7# 的帖子

昨晚没时间上网,刚才抽空把文章写出来了,希望能对你有帮助
http://bbs.51testing.com/viewthread.php?tid=164630&extra=page%3D2&frombbs=1
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-8-24 12:12:18 | 只看该作者
感谢楼上的,我按照你的方法搞定了。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2009-8-24 15:49:49 | 只看该作者
原帖由 hsjzfling 于 2009-8-20 11:33 发表
昨晚没时间上网,刚才抽空把文章写出来了,希望能对你有帮助
http://bbs.51testing.com/viewthr ... e%3D2&frombbs=1


不好意思,出现了一个新的问题:
背景:DataGrid固定显示10行(假设)数据,大于10行的时候,就出现滚动条。
问题:objOB.GetTextLocation strText,L,T,R,B,True 里的strText如果是正好显示的前十件数据中,那该方法没有问题,把指定的行选中,但是strText不在当前显示的10件里(拖动滚动条才能看到),该方法好像就没用了,选不中。这种情况该怎么整?

[ 本帖最后由 lyj841120 于 2009-8-24 15:50 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2009-8-25 17:37:32 | 只看该作者
这个问题有人遇到过没?没人回!
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2009-8-25 18:08:08 | 只看该作者
我顶!只因等待好人!
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2009-8-26 10:39:09 | 只看该作者
再顶!
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-8-26 10:56:13 | 只看该作者
Function ClickCellRow(obj1,obj2,obj3,height,devname)
        If devname = "" Then
                Exit Function
        Else
                If obj1.Exist And obj2.Exist Then
                        abs_y1 = obj1.GetROProperty("abs_y")
                        height1 = obj1.GetROProperty("height")
                        abs_y2 = obj2.GetROProperty("abs_y")
                        height2 = obj2.GetROProperty("height")
                        height = CInt(height)
                        Row = CInt((abs_y2-(height/2-height2/2)-abs_y1-height)/height)
                        If obj3.WpfButton("devname:=" &devname,"index:=" &Row).Exist Then
                                obj3.WpfButton("devname:=" &devname,"index:=" &Row).click
                        Else
                                Reporter.ReportEvent 3,OF011,""
                        End If
                Else
                        Reporter.ReportEvent 3,OF012,""
                End If
        End If
        Call VerifyErr(Err.Number)
End Function
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2009-8-26 11:05:34 | 只看该作者
14#
谢谢你,麻烦你解释一下参数各是什么?
Function ClickCellRow(obj1,obj2,obj3,height,devname)
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2009-8-26 11:14:45 | 只看该作者
'        Par1:Obj1 - Inquiry element in a row first object(Must enter the value)
'        Par2:Obj2 - Inquiry element in a row object(Must enter the value)
'        Par3:Obj3 - process windows object(Must enter the value)
'        Par4:height - In list two element widths.
'        Par5:row - devname - The name of button.
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2009-8-26 11:24:58 | 只看该作者
原帖由 zhangwl0417 于 2009-8-26 11:14 发表
'        Par1:Obj1 - Inquiry element in a row first object(Must enter the value)
'        Par2:Obj2 - Inquiry element in a row object(Must enter the value)
'        Par3:Obj3 - process windows object(Must enter the valu ...


我怎么还是不大明白!你能不能麻烦你结合我的问题解释具体点。
我的问题:
  1)最先的问题
       现状:用户登录认证画面-->明细画面(登录,更新,删除)-->确认画面
    操作流程:用户登录后,在明细画面填入信息,到确认画面再次确认填入信息,登录到DB. 确认画面关闭,明细画面显示,
             再次检索后要求把刚才登录到数据库的数据行选中(明细画面上有一个DataGrid)。
       问题:登录到DB的数据有一Key(EmpyloeeId),现在要在明细画面上(DataGrid)里选中该Key的所在行,
             请问QTP里VBScript怎么写?
            *VbWindow("emInfomation").ActiveX("ActiveX").ActiveX("DataGrid").Click ??????

1)的问题用objOB.GetTextLocation strText,L,T,R,B,True解决了。但出现了下面2)问题。

2)新的问题:
    背景:DataGrid固定显示10行(假设)数据,大于10行的时候,就出现滚动条。
    问题:objOB.GetTextLocation strText,L,T,R,B,True 里的strText如果是正好显示的前十件数据中,那该方法没有问题,把指定的行选中,但是strText不在当前显示的10件里(拖动滚动条才能看到),该方法好像就没用了,选不中。这种情况该怎么整?
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-8-26 11:34:39 | 只看该作者
写一个循环判断啊,如果文本没找到并且滚动条存在,就往下翻一页,直到找到文本或者翻到最下面
vbscroll应该能捕获到吧
回复 支持 反对

使用道具 举报

该用户从未签到

19#
 楼主| 发表于 2009-8-26 11:40:29 | 只看该作者
原帖由 hsjzfling 于 2009-8-26 11:34 发表
写一个循环判断啊,如果文本没找到并且滚动条存在,就往下翻一页,直到找到文本或者翻到最下面
vbscroll应该能捕获到吧


可以捕获vbscroll,正在试你的思想!
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2009-8-26 15:20:05 | 只看该作者
这是一个典型的父子对象问题,从它的父一级来解决问题,你可以用childItem方法来解决。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-24 09:04 , Processed in 0.092246 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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