51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4144|回复: 9

[原创] 无聊,发个根据字段名称找到其对应的Web控件的小方法

[复制链接]

该用户从未签到

发表于 2008-7-8 17:33:43 | 显示全部楼层 |阅读模式
  1. Function webEditObj(pageObj, fieldName)
  2. '功    能:根据指定的页面文字,找到其所对应的WebEdit输入框,默认查找页面上符合条件的第一个输入框
  3. '传入参数: pageObj  页面对象
  4. '           fieldName 要查找的字段信息,注意不要添加冒号,本方法会自动添加中文或英文的冒号                       
  5. '实现步骤:1 根据传入的字段名称,找到包含该字段的WebTable对象
  6. '                                         2 根据WebTable对象,找到包含指定字段信息的单元格,记录其行数和列数
  7. '                                         3 列数+1 就是要找的输入框所在的单元格          
  8. '使用方法:           
  9. '                                        Set curPage = Browser("creationTime:=1").Page("index:=0")
  10. '                                        webEditObj(curPage,"客户名称").Set "01-0003"             

  11.    Set descObj = description.Create()
  12.    descObj("html tag").value = "table"
  13.    descObj("innertext").value =".*"& fieldName&"(:|:).*"
  14.    Set allDescObjs = pageObj.childObjects(descObj)
  15.    objsCount = allDescObjs.count()
  16.    For i= 0 to objsCount-1
  17.           Set webTableObj = allDescObjs(i)
  18.           webTableObj.highLight
  19.                 rows = webTableObj.rowCount
  20.                 For rowNO =1 to rows
  21.                         cols = webTableObj.columnCount(rowNO)
  22.                         For colNO = 1 to cols
  23.                                 temp = webTableObj.getCellData(rowNO,colNO)
  24.                                 reporter.ReportEvent micDone,rowNO&","&colNO,temp
  25.                                 If (trim(temp) =  fieldName&":") or (trim(temp) = fieldName&":") Then
  26.                                                 Set webEditObj = webTableObj.childItem(rowNO,colNO+1,"WebEdit",0)
  27.                                                 Exit Function
  28.                                 End If
  29.                         Next
  30.                 Next
  31.    Next
  32.        
  33. End Function

  34. Function webObj(pageObj,objClass, fieldName,indexNO)
  35. '功    能:根据指定的页面文字,找到其后一个单元格的指定的Web控件。如果页面上有多个相同名字的页面文字,则根据indexNO来查找
  36. '传入参数:pageObj  页面对象
  37. '          objClass     目标控件的类别。如,webEdit,webList....
  38. '          fieldName   要查找的字段信息,注意不要添加冒号,本方法会自动添加中文或英文的冒号
  39. '                                         indexNO                 如果页面上有多个相同文字的字段,默认取第一个,如果指定了indexNO,那么取指定的第indexNO个字段                       
  40. '实现步骤:1 根据传入的字段名称,找到包含该字段的WebTable对象
  41. '                                         2 根据WebTable对象,找到包含指定字段信息的单元格,记录其行数和列数
  42. '                                         3 列数+1 就是要找的输入框所在的单元格          
  43. '使用方法:           
  44. '                                                Set curPage = Browser("creationTime:=1").Page("index:=0")
  45. '                                                webObj(curPage,"WebList","担保品类别",0).select 1            

  46.    Set descObj = description.Create()
  47.    descObj("html tag").value = "table"
  48.    descObj("innertext").value =".*"& fieldName&"(:|:).*"
  49.    Set allDescObjs = pageObj.childObjects(descObj)
  50.    objsCount = allDescObjs.count()
  51.    For i= 0 to objsCount-1
  52.            Set webTableObj = allDescObjs(i)
  53.                 rows = webTableObj.rowCount
  54.                 For rowNO =1 to rows
  55.                         cols = webTableObj.columnCount(rowNO)
  56.                         For colNO = 1 to cols
  57.                                 temp = webTableObj.getCellData(rowNO,colNO)
  58.                                 If (trim(temp) =  fieldName&":") or (trim(temp) = fieldName&":") Then
  59.                                         If label = indexNO Then
  60.                                                 Set webEditObj = webTableObj.childItem(rowNO,colNO+1,objClass,0)
  61.                                                 Exit Function
  62.                                         else
  63.                                                 label = label+1
  64.                                         End If
  65.                                 End If
  66.                         Next
  67.                 Next
  68.    Next
  69. End Function
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2008-7-8 23:44:22 | 显示全部楼层
谢谢楼主的奉献精神,学习学习。

楼主,
1,好像写少了个frame中的对象,你这个只是针对了page页面的obj  
2,好像写少了对象的可否输入的判断,如果对象为不可输入,在你那句set 的时候,就会抛错了。
3,descObj("innertext").value =".*"& fieldName&"(:|:).*"
这句后边好像是多余的,你把它的值设置为支持正则表达式就可以了。
4,感觉....好像....,是不是可以这么写呢?
Browser("creationTime:=1").Page("index:=0").WebList("index:=0").select 1
为什么不这么写呢?考虑到中文和英文的不同页面的切换,通用性更好,以及既然你都去查它后台的innertext,那怎么不查下index直接确认就好呢?

大家一起讨论讨论,进步进步
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2008-7-9 11:10:15 | 显示全部楼层
1 如果页面中有frame的话,传入的pageObj就可以包含Frame对象,如:
set curPage = Browser("creationTime:=0").Page("inde:=0").Frame("name:=XXX")
WebEditObj(curPage,"客户编号").set "xxxx"

2 WebEditObj()这个方法的返回值,是一个WebEdit对象,其使用方法和browser().Page().WebEdit()的使用是一样的,所以判断是否为只读,需要自己来判断

3 descObj("innertext").value =".*"& fieldName&"(:|:).*"
WebEditObj()这个方法,是为了去查找指定字段后面一个单元格中的WebEdit对象。现在的被测系统中,字段名称后面是要求加上中文的冒号的,但是在实际的页面中,经常会有一些前导空格或者后面的空格,所以在前面加了".*"。fieldName是字段名称,传入参数,根据这个关键字来定位WebEdit对象的。

4 index不是Web对象的属性,它只是一个辅助识别的坐标信息,好像不能通过程序来找到index的值。

这次写的两个方法,都不需要去指定Web对象的name属性,而是根据页面上的文字信息来查找,这样可以根据Demo来编写脚本,虽然这样做意义不太大。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-7-9 11:53:53 | 显示全部楼层

我问题可能比较多。
如果是多个table的情况,也就是table下再包括了一个table好像就没办法用了....

很多情况都是table下再有一个table的,这样的情况不可避免的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-7-9 17:50:38 | 显示全部楼层

讨论才会进步,大家怎么好像都只看不顶呢,一起讨论讨论对自己也不错的。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2008-7-9 17:55:10 | 显示全部楼层
呵呵,代码会遍历所有的Table,如果是Table嵌套table的话,只有最里面的Table才是真正要找的,代码中实际上也做了一些无用功,把那些外围的Table也遍历了。经过测试,这段代码经过几个遍历后,是可以找到目标单元格的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-7-9 18:02:50 | 显示全部楼层
我早上4了下,好像多table 的情况是会出错的。不知道是不是我操作有误呢,所以才问了这个问题。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 1648 天

    连续签到: 5 天

    [LV.Master]测试大本营

    发表于 2019-1-22 10:56:48 | 显示全部楼层
    谢谢分享,先码后看
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-3-29 19:20 , Processed in 0.076649 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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