51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3778|回复: 10
打印 上一主题 下一主题

[原创] QTP中使用描述性编程难道不能采用DOM的方式靠ID来唯一定位对象么?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-7-3 08:37:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天在做QTP培训PPT的时候,忽然心血来潮用描述性编程写了一点东西,具体情况是这样的。如下图所示的登录页面中有两个textbox,其对应的HTML代码如下
<TD><input name="txtID" id="txtID" type="text" maxlength="32" size="17" /></TD>
<TD><input name="txtPwd" id="txtPwd" type="password" style="WIDTH: 100%" maxlength="32" size="17" /></TD>

可以看到,这两个文本框均有唯一对应的ID,如果是在DOM编程中,我们完全可以通过document.getElementById("textID")来获得第一个文本框的引用。

由于ID是唯一的,所以我当时考虑到可以用描述性编程来获取这两个文本框,代码如下:
Browser("GPSPortalLogin").Page("GPSPortalLogin").WebEdit("id := txtID").Set DataTable("LogName", dtGlobalSheet)
在执行的时候,我们却发现系统提示匹配了不止1个的webEdit。
由于id是唯一的,所以从道理上说应该不会匹配到其他的webEdit上去才对。是不是描述性编程不能像DOM编程那样直接通过ID来确定元素呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-7-3 09:00:17 | 只看该作者
描述性编程  如果不是封装DOM  还能是封装什么?
你可以试试把视野扩展到browser之类匹配上去,这种原因分析应该不难。

封装另外一种的话,支持的程度会受局限。

[ 本帖最后由 shanxi 于 2009-7-3 09:04 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-7-3 09:15:11 | 只看该作者
很奇怪,我把id 封装到1个description中以后奇怪就解决了,只需要一个id属性便能匹配第一个文本框;
但是第二个文本框又出问题了,我在description中封装了id 和 type,但是打死都匹配不上...我把spy中能看到的一些基本属性,例如name html tag 也封装了进去,但是第二个密码框就是匹配不上...
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-7-3 10:12:17 | 只看该作者
我以前的描述性编程序代码是这样写的。也是通过IE对象的属性来获取对象
Set staticObj = description.Create
staticObj("micclass").value = "Static"
staticObj("text").value = "当前支付范围划分待确认,不能上报!"
text = browser("ie").Dialog("Microsoft Internet Explorer").static(staticObj).GetROProperty("regexpwndtitle")
在这段代码中,我用了micclass,同样也可以写staticObj("name").value = "txtID"

[ 本帖最后由 dreamever 于 2009-7-3 10:15 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-7-3 11:26:47 | 只看该作者
micClass("")里面不只可以放一个可以识别该对象的属性,多放一个。虽然ID是唯一的,但也有其它属性可以描述对象,用name,type, nativeclass。

WebEdit("nativeclass:=Edit","id := txtID")
WebEdit("name:=txtID","nativeclass:=Edit")
WebEdit("name:=txtID","id := txtID")
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-7-3 11:52:43 | 只看该作者
刚才又试了一下,感觉用描述性编程最大的问题就是不知道使用哪种(些)属性去唯一标示这个对象。
于是我刚才用了DOM编程的方法去直接访问对象
Browser("GPSPortalLogin").Page("GPSPortalLogin").object.getElementById("txtPwd").value = "XXXX"
看来在元素有ID得情况下,用DOM 去直接访问对象才是最合适的方法。用描述性编程的话,感觉还是不够直接。
当然了,在元素没有ID 的情况下,还是用description + childobjects访问吧,暂时没想到什么好的方法,毕竟没有ID 用DOM的话也不是很方便,不过若是批量选择对象,那么DOM还是很不错的!
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-7-3 12:09:44 | 只看该作者
系统提示匹配了不止1个的webEdit。


你调试过有原因吗?或者简单一点,规律吧
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2009-7-3 12:14:58 | 只看该作者
原帖由 shanxi 于 2009-7-3 12:09 发表
系统提示匹配了不止1个的webEdit。


你调试过有原因吗?或者简单一点,规律吧



不知道是什么原因,页面上一共就2个 textbox 而且它们的ID 不一样,按道理来说用id描述就足够了。不知道为什么调试的是很总是说不止匹配1个。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-7-3 12:50:52 | 只看该作者

回复 8# 的帖子

装了一下QTP 10,应该知道原因了

看下图,访问的页面是books.google.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2009-7-3 16:34:55 | 只看该作者

回复 9# 的帖子

了解,原来有缺省的情况,看来还是不要让QTP来封装对象的好,直接用DOM,DOM的结点和遍历基本上够用了。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-7-4 15:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2009-7-3 18:07:24 | 只看该作者
    原帖由 nbkhic 于 2009-7-3 11:52 发表
    刚才又试了一下,感觉用描述性编程最大的问题就是不知道使用哪种(些)属性去唯一标示这个对象。
    于是我刚才用了DOM编程的方法去直接访问对象
    Browser("GPSPortalLogin").Page("GPSPortalLogin").object.getElemen ...

    深有同感。。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-20 17:32 , Processed in 0.081496 second(s), 30 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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