virgolong 发表于 2009-4-21 17:51:51

描述性编程多个属性时不生效

B/S程序表格页面,需要取某条特定的记录,找不到唯一属性,所以就用了多个innertext的值来定位那条记录
但奇怪的是我用一个调试没问题,能找出正确记录条数,而多个innertext反而不能定位到正确的记录了.
调试
Set mydescription=Description.Create()
mydescription("innertext").value="PD200904000008"
mydescription("innertext").value="010602-004"
Set ud=Browser("Openurl:=.*main.jsp.*").Page("url:=.*main.jsp.*").Frame("html id:=frmdata").ChildObjects(mydescription)
Dim n
n=ud.count此时n=1

但属性用一下三个
mydescription("innertext").value="PD200904000008"
mydescription("innertext").value="010602-004"
mydescription("innertext").value="三相转换开关"
调试时,n=3 ,明显不正确

但弄不清楚是为什么
页面图如下

lhd85 发表于 2009-4-21 17:57:08

个人觉得你想描述区域是文本, 而不是一个对象, 所以你想用描述性编程去找到它是比较困难的.
建议你用WebTable的方法(去帮助中找),用方法getcelldata去匹配, 里面有很多方法, 可以花时间看下

virgolong 发表于 2009-4-21 18:17:10

其实我的目的是要找到WebTable记录中,有三个字段的值符合我给的条件的那条记录,然后选中打开.
按照lhd85的思路我看了下WebTable的方法,假如用getcelldata去匹配,是不是用指定列每个字段去匹配下条件,记录下复核条件的行,三个条件都符合的行应该只有一个.这个匹配过程怎么写循环好点了?

virgolong 发表于 2009-4-21 22:57:35

调试了下,发觉两个属性时,这两个属性值都在当前页面
当使用三个属性值时,第三个值需要拖动滚动条才能看到该值,此时前面两个值没有生效,只查找了第三个值

试了下WebTable的属性及方法,是应该能检索到的,但循环太多了。
最好直接用页面的查询功能查找出需要的数据

大家还有什么建议了,谢谢

lhd85 发表于 2009-4-22 10:28:51

别想着有一步完成的方法, 老老实实用getrowwithcelltext, rowcount, getcelldata和do-while做个嵌套循环

virgolong 发表于 2009-4-22 11:03:14

多谢lhd85,原来webtable还有getrowwithcelltext方法的,有这个又方便了一些
看那个chm的帮助文档没发觉

风雪夜归人 发表于 2009-4-22 13:04:25

mydescription("innertext").value="PD200904000008"
mydescription("innertext").value="010602-004"
mydescription("innertext").value="三相转换开关"

我怎么觉得这个赋值就不正确呢?起作用的肯定是最后一句,而不是3句,因为一个对象的"innertext"应该是一个值的,建议lz用 index试试,或者spy看下你要查找的对象还有什么特殊的属性

virgolong 发表于 2009-4-22 14:01:31

谢谢风雪夜归人的指正,你说的是正确的,只有最后一句有效.以前调试结果的偶然性导致我有这个误区.
另外,没发觉有什么属性可以用了,毕竟是三个字段才能确定记录唯一性,目前就直到lhd85提的在webtable中查找了

风雪夜归人 发表于 2009-4-22 14:15:22

如果这纪录是固定位置的,就用 ("index:=xxx")来识别

virgolong 发表于 2009-4-22 14:32:35

页面的记录是别的功能流过来的,所以位置不确定,在别的功能存了三个参数,通过参数查找到需要的记录

风雪夜归人 发表于 2009-4-22 15:04:47

我想到一种方法,就是使用object方法,建议你spy 一下,然后点"run-time object properties",里面的参数看下嘛,我一般没有办法的时侯就找这些东西,不确定能不能找到,但至少多一种思路,以后遇到别的问题也可以往这方面思考嘛,:lol 其实直接循环查找是最方便的,如果描述不了的话

virgolong 发表于 2009-4-22 15:22:27

:P 多谢,不过我还没用过object方法,现在还不会.时间紧就没有继续去研究,也许以后知识多了就自然有新的方法了
我有空再来看看

hsjzfling 发表于 2009-4-22 16:35:00

原帖由 virgolong 于 2009-4-21 22:57 发表 http://bbs.51testing.com/images/common/back.gif
调试了下,发觉两个属性时,这两个属性值都在当前页面
当使用三个属性值时,第三个值需要拖动滚动条才能看到该值,此时前面两个值没有生效,只查找了第三个值

试了下WebTable的属性及方法,是应该能检索到的,但 ...

循环不多啊,一重循环就可以了,逻辑如下
先取到这些子元素的上一级WebTable对象(若有多层WebTable一定要确认是否取对),取到WebTable.RowCount,然后从第二行开始循环到RowCount,循环中用GetCellData(row, column)来取值判断,第X列的值="" and 第Y列的值="" and 第Z列的值="",如果为True那就返回当前的Row同时退出循环。

hsjzfling 发表于 2009-4-22 16:42:31

如果你只是要取到这条记录,也可以正则表达式匹配下,比如
Browser("Openurl:=.*main.jsp.*").Page("url:=.*main.jsp.*").Frame("html id:=frmdata").WebElement("innertext:=.*PD200904000008.*010602-004.*三相转换开关.*").XXX
当然可能符合条件的有多个,有可能要根据实际情况加个index

virgolong 发表于 2009-4-22 17:12:27

谢谢hsjzfling,在WebTable中循环时没想到直接用and,照你这么写的确好简单

然后用正则表达式那种写法,试了下不行,调试发现innertext取的值是页面所有文字信息组合连成的字符串

跨越蓝天 发表于 2009-4-23 17:14:20

不知道,你的这个List有没有分页。如果要在多页里来查找的话,那就麻烦了点,得多些几行代码。
不是脚本不好写。而是QTP有个问题,解决不了。
我用的是9.2。在网上也查到了其他人也遇到过,但是一直没有找到原因。

跨越蓝天 发表于 2009-4-23 17:16:25

http://bbs.51testing.com/thread-141249-1-1.html
页: [1]
查看完整版本: 描述性编程多个属性时不生效