51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7957|回复: 24
打印 上一主题 下一主题

[原创] 请教一个关于QTP描述性编程的问题--Dialog控件无法被识别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-9-10 12:30:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天一直被一个问题困扰,同时希望您能够耐心的看完下面的描述,多谢!
实际场景:场景很简单,就是一个登录操作,当用户名为空时点击【登录】按钮,系统弹出个Dialog对话框提示“用户名不能为空”,而后点
击对话框中的【确定】按钮。
测试脚本设计:在登录操作后加入一个判断,判断这个Dialog对话框是否存在,如果存在,利用Reporter向报告中输入一个信息:“测试用例
执行成功,登录失败”,而后点击【确认】按钮。
遇到的问题:在判断Dialog是否存在的时候,QTP没有报错,只是在报告中说“Dialog对象不能被发现”。而后,我又换了一个思路,不做判断
直接点击Dialog对话框中确定按钮,结果造成QTP报错,截图如下,大意是说Dialog对象找不到。
代码如下:
Call login
Function login()
        '关闭所有的IE窗口,避免出现问题
        SystemUtil.CloseProcessByName "iexplore.exe"
        '打开IE,进入站点
        SystemUtil.Run "iexplore.exe"
        Set browsDesc = description.create()
        Set pageDesc = description.create()
        Set curPage = Browser(browsDesc).Page(pageDesc)
        curPage.Sync
        Browser(browsDesc).Navigate "http://200.101.13.3:8080/DCSM"
        curPage.Sync
        Browser("title:=登录","name:=登录").Page("title:=登录").WebEdit("name:=username").Set ""
        Browser("title:=登录","name:=登录").Page("title:=登录").WebEdit("name:=passwordshow").set "admin"

        Browser("creationtime:=0").Page("title:=登录").WebButton("name:=登 录").Click
        '代码运行到这里的时候都是没有问题的。重点的是下面这句直接点击按钮这行代码。在此处QTP会报错,见截图。
        Browser("creationtime:=0").Dialog("text:=Windows Internet Explorer").WinButton("text:=确定").Click
        '下面是用来判断Dialog是否存在的,此处QTP不会直接报错,但在报告中提示“对象不能被发现”
        If Browser("title:=登录","name:=登录").Dialog("text:=Windows Internet Explorer","creationtime:=0","location:=1").Exist Then
                msgbox "success"
        End If
End Function
原因分析:我一直怀疑是没有找对定位这个Dialog的属性。所以尝试使用了能够定位这个对话框的其他属性。例如:
location:=X,creation:=X,index:=X。结果还是一样的找不这个Dialog对象。
这个问题都困扰我好几天了。请大侠们经过的时候进来看看,帮小弟看看还有没有其他办法。在下感激涕零。
另外,因为不想依赖对象库,所以没有采用录制的方法制作脚本。还有,脚本中Browser用了两种方法描述对象,也是没有问题,可以通过的。
再有一个情况是:到后来我没办法了,直接录制个脚本,结果OK,没有问题,正常录制的脚本就能够识别这个Dialog。看脚本生成的情况,录制的脚本也是用text这个元素定位的啊,为啥轮到用描述性编程就识别不到了???
以下是录制的脚本:
Browser("登录").Page("登录").WebEdit("passwordshow").SetSecure "4c89b025e3c892ccef58"
Browser("登录").Page("登录").WebButton("登 录").Click
Browser("登录").Dialog("Microsoft Internet Explorer").WinButton("确定").Click '回放到这里也是能通过的。
Browser("登录").Page("登录").Sync
Browser("登录").Close

[ 本帖最后由 oicq997 于 2010-9-10 12:45 编辑 ]

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2010-9-10 12:44:06 | 只看该作者

自己先坐个沙发吧。

自己先坐个沙发吧。

希望早点儿有人关注。。。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    3#
    发表于 2010-9-10 12:53:31 | 只看该作者
    虽然不知道你具体原因。
    登录页面,建议Browser用title;Dialog用index识别就行了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2010-9-10 13:10:10 | 只看该作者
    尝试在desktop下找Dialog,而不是在Browser下,对象库层次顺序感觉有问题
    或者说是现在的系统Dialog层次变了

    你可以尝试使用description 在Browser找任何下一级的子对象,结果可能就是只有 page
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2010-9-10 14:03:26 | 只看该作者
    我觉得你的Dialog的text属性有可能有问题,
    我昨天遇到一咱情况,Dialog的text不是"Windows Internet Explorer"而是"Mircorsoft Internet Explorer"..
    你再确定一下你弹出的对话框.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2010-9-10 14:14:05 | 只看该作者

    多谢战友们的点化

    多谢战友们的点化,我马上就去验证。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2010-9-10 14:57:32 | 只看该作者

    问题已经解决

    原帖由 YangMay 于 2010-9-10 14:03 发表
    我觉得你的Dialog的text属性有可能有问题,
    我昨天遇到一咱情况,Dialog的text不是"Windows Internet Explorer"而是"Mircorsoft Internet Explorer"..
    你再确定一下你弹出的对话框.

    多谢这位兄弟的建议,我是用你的方法修改了脚本,结果脚本通过。成功。
    分析原因:是不同的浏览器版本造成了Dialog对话框的text是不同的。但是,又有一个新问题出现了。即便在IE7的环境下,使用"text:= Windows Internet Explorer"也是识别不成功的,只能用IE6才能正常识别。难道,不同的IE版本QTP会区别对待?非常希望有高手能够为我解惑。我有一个大胆的怀疑,这是不是QTP的一个BUG呢。呵呵,希望是,这样也好让我感到欣慰一些啊。
    下面是IE6和IE7在Object spy下的不同识别结果。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    8#
    发表于 2010-9-10 16:26:05 | 只看该作者
    对于不同浏览器,你可以用正则表达式啊,
    比如:最简单的
    "text:= .*Internet Explorer"

    另外如果你dialog对象就一个,索性用"index:=0"来识别不就行了吗,管它啥标题和其他属性的变化
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2014-12-19 21:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2010-9-10 19:26:29 | 只看该作者
    恩,描述性编程还是比较好用,比一般的代码更能识别页面元素,而且写起来也比较灵活
    frameworkmanager的框架就不错
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2010-9-10 21:59:57 | 只看该作者
    IE6和IE7存在一些区别,在写QTP脚本时需要注意,参考:
    http://knowledgeinbox.com/articl ... etween-ie6-and-ie7/
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2010-9-10 22:29:52 | 只看该作者
    IE7要这样描述Dialog:
    "text:=Windows Internet Explorer","nativeclass:=#32770"
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2010-9-11 07:59:56 | 只看该作者
    IE7下面,  对跳出的Dialog的操作,不需要父对象Browser。建议吧Browser那一层去掉试试
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2010-9-13 10:13:22 | 只看该作者
    QTP10.0 很多情况下干脆就不承认Dialog是在 Browser下了,只有桌面下才找的到,呵呵。
    另外中文系统下的IE8的text是中文的信息

    Description的属性,在桌面 desktop下还不能用正则,只有Browser下才行 (QTP9.0已测试)

    以前也被Dialog搞晕过一段时间

    [ 本帖最后由 skyzhu 于 2010-9-13 10:16 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2010-9-13 10:47:33 | 只看该作者
    browser("我的资料").Dialog("来自网页的消息").Exist ---通过录制回放的方式,脚本的结果为True;

        Browser("name:=我的资料").Dialog("text:=来自网页的消息").Exist----居然结果为False??这个结果让我费解了大半天,有人说是描述Dialog的参数太少,于是我把Dialog中能用到的参数都放进去,结果还是不行.....最后我在帮助文档里找到了Dialog的nativeclass属性,结果就成功了。

        小结:web对象是使用micclass来描述的,windows对象是使用nativeclass来描述的,理解了之后我们就可以把脚本写成下面这种方式:Browser("name:=我的资料").Dialog("nativeclass:=#32770").Exist---执行结果True,而#32770就是用于描述Dialog的属性
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2010-9-13 11:46:03 | 只看该作者

    回复 14# 的帖子

    以前我也是 Dialog("nativeclass:=#32770") 这样做的
    但一次偶然的使用了QTP10,全挂了,一个都没找到,暂时也没研究和那机器环境是不是有关系
    后来就搜的复杂了,整桌面用Description找Dialog,然后再过滤,再抓TXT。。。再正则验证
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2010-9-19 08:59:38 | 只看该作者
    认为相这样正则可以搞定的问题 就就不用描述性了  , 正则用着简单, 虽然可能在查找时会浪费一点时间 ,  可描述性编程的代码行比较高  个人观点
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2010-9-19 19:11:41 | 只看该作者
    恩,是的,注意对象所属位置很重要,没抢到回答,哎....
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2011-2-10 16:25:32 | 只看该作者
    ”QTP10.0 很多情况下干脆就不承认Dialog是在 Browser下了,只有桌面下才找的到“
    原来如此终于解决了~~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2011-5-12 15:36:28 | 只看该作者
    如果我要Dialog上的文字呢,而且还是多行文字?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2011-5-12 16:34:43 | 只看该作者
    如果你不想判断弹出框中的提示语之类的,或者只想点击这个确定按钮,我建议你用我写的MonitorQTP,监控这类弹出框,然后它会把它关了的!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 02:41 , Processed in 0.099352 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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