51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3129|回复: 17
打印 上一主题 下一主题

[原创] QTP Function Design_Ask help

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-4-3 14:50:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 db_qtp 于 2012-4-3 18:47 编辑

Need desgin a function as below scenario:

Step 1: Navigate to Grid Page. (This information can be extracted from below excel sheet)

SR#        Grid Page        Max Rows
1        Draft 1        8
2        Draft 2        3

Step 2: Identify Filter/Sort Fields(Columns) in the screen
Step 3: Store the data in the Column into local variable

Column 1        Column 2        Column3        …
Value 1        …        …        …
Value 2        …        …        …
Value 3        …        …        …
Value 4        …        …        …

Step 4: Filter all columns and validate
Step 5: Sort all columns (ASC/DSC) and validate
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2012-4-3 22:25:49 | 只看该作者
本帖最后由 db_qtp 于 2012-4-4 11:54 编辑

waitting for the answer
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2012-4-4 11:53:44 | 只看该作者
Can any one start from Step 2/3 firstly?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2012-4-4 14:58:24 | 只看该作者
回复 3# db_qtp


希望你能有诚意的问问题.

1) 你对解决这个问题是否自己已经有了尝试?
我认为你首先应该尝试去解决问题, 在解决问题的过程中遇到了什么具体的问题.那么可以在论坛里提问.而不是像这样, 直接贴出整个问题.别人也没有办法帮助你.

2) 如果你的电脑有中文输入法, 那么请输入中文.
因为这是中文论坛. 而且你翻译为中文, 可以得到更好的帮助
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2012-4-4 15:27:19 | 只看该作者
本帖最后由 db_qtp 于 2012-4-5 13:43 编辑

回复 4# lifr


    谢谢你的回复, 个人感觉是带着诚意来这里提问题的,可能由于时间的仓促,这个键盘输入中文的不方便以及初学qtp和VB导致提问题的方式方法有所欠缺在此说声抱歉.对于我所提的问题我都尝试过了并且在等待回答的同时一直在尝试,只是感觉自己的写的代码很糟所以也不太好意思贴上来就把问题直接贴了上来想快速参考这里经验较丰富的回答. 下面归纳了些在设计这个function时所碰到的问题:
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2012-4-4 15:50:37 | 只看该作者
本帖最后由 db_qtp 于 2012-4-5 14:03 编辑

在step 2中,尝试用下面的方法去识别 Filter/Sort 的值并把他们储存到local variables 但一直在"set  objChild=Browser("").Page("").WebTable("").Childobjects(ObjDesc)"这行报错
set objDesc=Description.create(). 报错信息为:"General run error.
Line (62): "set objChild=Browser("").Page("").WebTable("").Childobjects(ObjDesc)"

objDesc("micclass").value="WebElement"
          set  objChild=Browser("").Page("").WebTable("").Childobjects(ObjDesc)
                                        For i=0 to objChild.count-1               
                               RO=Browser("").Page(" ").WebTable("").Childobjects(ObjDesc).GetROProperty("innertext")
                   datatable.GetSheet("Action1").GetParameter("Check").ValueByRow(2)=RO
                        next
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2012-4-5 15:52:50 | 只看该作者
up
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2012-4-5 17:00:21 | 只看该作者
回复 6# db_qtp


在debug窗口,  按照下面的顺序, 检查元素是否存在.
Browser("")
Browser("").Page("")
Browser("").Page("").WebTable("")
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2012-4-5 18:15:40 | 只看该作者
回复 8# lifr


   谢谢你的回复. 有什么方法可以识别系统里的Filter/Sort Fields(Columns) 并且把这些值存储到本地的datasheet 里?
Column 1        Column 2        Column3        …
Value 1        …        …        …
Value 2        …        …        …
Value 3        …        …        …
Value 4        …        …        …

我尝试了下面的办法但不行
Dim oDesc

Set MyDescription = Description.Create()
MyDescription("micclass").Value = "WebElement"


For i=0 to checkboxes.count-1               
     Dim RO
          RO=Browser("Name:=").Page("title:=").Childobjects(MyDescription).GetROProperty("innertext")
                           msgbox RO
                                   '
                       colcount=newsheet.UsedRange.Columns.Count 'Add to Header
                                 For i = 1 To colcount
                                    param=newsheet.Cells(1,i)
                                    DataTable.GetSheet("Action1").AddParameter param,""
                                 next

                         rowcount=newsheet.UsedRange.Rows.Count
                         colcount=newsheet.UsedRange.Columns.Count

                                 For i = 2 To rowcount
                                      DataTable.GetSheet("Action1").SetCurrentRow i-1
                                          For j =1 To colcount
                                           param=newsheet.Cells(i,j)
                                           DataTable.value(j,"Action1")=param     
                                           Next
                                 Next
                   datatable.GetSheet("Action1").GetParameter("Check").ValueByRow(2)=RO
                        next
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2012-4-6 12:25:54 | 只看该作者
up
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2012-4-6 17:00:27 | 只看该作者
你的问题描述不清晰,无法重现,呵...
很提问的都是做测试的,确无法清晰表述自己的问题,担心你们提交的bug开发人员能重现修改不,
唉,良好的测试人员的基本条件,清楚表述呀
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2012-4-6 18:48:16 | 只看该作者
回复 11# lotus

感谢你的回复,个人感觉问题已经很清晰了,就是我的script实现不了下面的function. 如果这里有人曾经遇到过相同/类似的情况希望可以共享一下脚本。

Step 2: Identify Filter/Sort Fields(Columns) in the screen
Step 3: Store the data in the Column into local variable

Column 1        Column 2        Column3        …
Value 1        …        …        …
Value 2        …        …        …
Value 3        …        …        …
Value 4        …        …        …

Step 4: Filter all columns and validate
Step 5: Sort all columns (ASC/DSC) and validate
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2012-4-6 21:00:29 | 只看该作者
本帖最后由 lifr 于 2012-4-6 21:03 编辑

回复 12# db_qtp
看得出你QTP经验和编程经验都不太多.  经验多少没有关系, 关键是解决问题的思路要清晰.

你的代码的有一个问题是一个函数要解决的问题太多, 结果把好多东西都混杂在一起. 出错了都不知道在哪里出错.

我给你一个思路
1. 定位要操作的table
通过QTP的对象spy找出此table, 然后用"column names"属性来定位此table

2. 把数据从table里提取出来
从你的要求来看, 保存Table里的数据使用 Dictionary数据结构, key是column name, value是一个Array. 其中Array的值是所有行在此column的cell的值.
也就是像下面的样子
{column => [value1, value2, ...]

注意: 没有必要用DataTable. 除非有把此数据持久化保存的要求, 否则不用DataTable.

3. 对其中的某一个column, 验证sort功能
首先对Dictionary中此column对应的Array进行排序, 这个是expected result.

对页面上Table中的column排序(click on head?), 把column的值提取出来(调用step2的函数), 这个是actual result.

比较expected result和actual result.

具体的操作, 给你一段代码参考.

  1. ' get text from a cell.
  2. '
  3. ' @return value of input box if in cell is an input box
  4. Function GUI_Table_GetCellText(objTbl, rowIdx, colIdx)

  5.         idx = 0
  6.         strVal = Empty
  7.         Do
  8.             Set ele = objTbl.ChildItem(rowIdx, colIdx, "WebElement", idx)
  9.             If ele is Nothing Then Exit Do End If

  10.             If ele.getROProperty("html tag") = "INPUT" Then
  11.                 strVal = ele.getROProperty("Value") ' editable param table
  12.                 Exit Do
  13.             ' first visiable SPAN
  14.             ElseIf ele.getROProperty("html tag") = "SPAN" And LCase(ele.object.style.display)<>"none" Then
  15.                 strVal = ele.getROProperty("innertext") ' cell with span
  16.                 Exit Do
  17.             Else
  18.                 ' Not ok
  19.             End If
  20.             idx = idx + 1
  21.         Loop

  22.         If IsEmpty(strVal) Then
  23.             strVal = objTbl.GetCellData(rowIdx, colIdx) 'plain cell
  24.         End If

  25.         GUI_Table_GetCellText = Trim(strVal)
  26. End Function

  27. ' read table content into [{rowIdx=1; key1=val1; ..}, ...]
  28. '
  29. ' Note a special key "rowIdx" added for each row
  30. Function GUI_Table_Read(tbl)
  31.         
  32.         Dim itemAry()
  33.         ReDim itemAry(tbl.RowCount - 2)
  34.         colAry = split(tbl.getROProperty("column names"), ";")
  35.         For rowIdx=2 To tbl.RowCount
  36.                 Set rowMap = CreateObject("Scripting.Dictionary")
  37.                 For i=0 to UBound(colAry)
  38.                         colName = colAry(i)
  39.                         colIdx = i+1
  40.                         celVal = GUI_Table_GetCellText(tbl, rowIdx, colIdx)
  41.                         rowMap.Add Trim(colName), Trim(celVal)
  42.                 Next
  43.                 rowMap.Add "rowIdx", rowIdx
  44.                 Set itemAry(rowIdx-2) = rowMap
  45.                 Set rowMap = Nothing
  46.         Next
  47.         
  48.         GUI_Table_Read = itemAry
  49. End Function

复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2012-4-6 23:26:36 | 只看该作者
回复 13# lifr


    真诚的非常感谢你的回复,我刚开始学习。希望可以早点独立以后以帮助别人来解决问题像你这样的身份回到这个论坛。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2012-4-7 20:20:48 | 只看该作者
回复 13# lifr

Please kindly check my issue inline
    1. 定位要操作的table
通过QTP的对象spy找出此table, 然后用"column names"属性来定位此table
Issue: 我所测试的系统很奇怪,这个table 单独spy 不出来. 我只有spy 它的column 时, 它spy 出来的结构为(才可以看到webTable):
Browser:
    Page:
        Web Table:
             WebElement:
当我spy column下面各个cell value 时, 它spy 出来的结构和上面 的结构一样,但是 web table 里 "column names"属性是不一样的, 这是否说明存在不同的table?
Column 1        Column 2        Column3        …
Value 1        …        …        …
Value 2        …        …        …
Value 3        …        …        …
Value 4        …        …        …

2. 你给我参考的代码其中一条为(Function GUI_Table_GetCellText中的第四行):
Set ele = objTbl.ChildItem(rowIdx, colIdx, "WebElement", idx)
在此之前我定义了set objTbl = Browser("Name:=").Page("title:=").WebTable("column names:=") (此处的webtable 属性我用了上面的第一个spy 出来的)
但在跑脚本的时候 ,qtp 报了"The statement contains one or more invalid function arguments.
Line (85): "Set ele = objTbl.ChildItem(rowIdx, colIdx, "WebElement", idx)"."  err msg.
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2012-4-8 11:16:39 | 只看该作者

RE: QTP Function Design_Ask help

回复 15# db_qtp

你的问题都是需要在现场通过调试去定位的, 如果你不懂怎么去调试问题, 那么最好先请教一下身边的人, 可以现场指导你一下.  我且回答你这两个问题.

1) 是不是存在不同的table
用firfox+firebug查看一下该page的dom tree, 是不是一个table就一目了然了. 如果你用IE9, 也有相应的工具, 菜单"tools->develop tools".

2) 调用childitem出错
单步到这行代码
Set ele = objTbl.ChildItem(rowIdx, colIdx, "WebElement", idx)
检查, objTb, rowIdx, colIdx, 和idx的值, 是否有异常的地方, 比如没有赋值的情况.

而且这个函数是给你参考的, 为了简化, 你可以直接用 objtbl.GetCellData(rowIdx, colidx) 这个函数来获取cell里的值. 如果你不知道这个函数的用法, 打开qtp的帮助文档, 输入关键词webtable, 里面就有此方法的帮助.

兄弟, 不是我不愿意帮助你, 我感觉你缺少qtp开发人员需要掌握的基本知识和技术. 你这样搞, 效率很低啊. 磨刀不误砍柴工, 你还是找本书, 先把qtp学习一下吧.
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2012-4-8 12:43:46 | 只看该作者
回复 16# lifr

感谢你的耐心,我也希望有足够磨刀的时间~~但现在是被逼着直接砍柴。所以只能边磨刀边砍柴,压力很大
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2012-4-9 17:47:23 | 只看该作者
回复 16# lifr

今天我重新spy 了一下,发现原来这个页面的每一行都是个单独的table. eg: Column 1 column 2.......是一个table
Value 1 .... .... .....是另外一个table, 而value 2 .... ... ... ....又是一个单独的table. 对于这种情况有什么办法可以验证他们的sort 和 filter 的功能是否正确
    Column 1        Column 2        Column3        …
Value 1        …        …        …
Value 2        …        …        …
Value 3        …        …        …
Value 4        …        …        …
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-22 15:38 , Processed in 0.103235 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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