51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5049|回复: 16
打印 上一主题 下一主题

[原创] 求高手指点:QTP无法回放上传图片的click事件

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-11-20 16:16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 caicai2012 于 2012-11-20 16:18 编辑



用QTP无法录制点击“上传图片”按钮操作,手动添加对象后脚本如下:Browser("商城、商户登录").Page("商品信息填写").WebElement("WebElement").Click

但是无法回放

对象属性为


outerhtml属性值为:<div id="upload_button2" class="upload_btu ie6_png   "></div>

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

2#
发表于 2012-11-20 16:29:15 | 只看该作者
我也在找这个问题的答案那。搞了一下午没有成就感。希望有成就感的童鞋多指教指教。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2012-11-20 16:47:52 | 只看该作者
你的Image是包含在这个webElement里的,往内层找到Image,然后click它应该就可以了。话说LZ的outerhtml属性贴的不全吧
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2012-11-20 17:10:26 | 只看该作者
回复 3# xjwldlover


    outerhtml属性贴全了呢,能具体说一下怎么操作吗?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2012-11-20 18:35:56 | 只看该作者
本帖最后由 xjwldlover 于 2012-11-20 18:36 编辑

如果可以,LZ右键‘查看源代码’把整个页面的html信息以附件刑事给发上来吧。

ps,往内层找对象,就是说要操作的对象出现在第5级,但QTP找到的是第4级或者第三级,需要靠手工创建一个第5级的对象
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2012-11-20 23:14:50 | 只看该作者
回复 5# xjwldlover
求详解,,,
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    7#
    发表于 2012-11-21 08:50:26 | 只看该作者
    个人感觉可能不是不能click而是你的对象有问题。。。。。

    Browser("商城、商户登录").Page("商品信息填写").WebElement("WebElement").Click
    确定你能找到你那个WebElement 对象啊?我的意思是说该对象可能不唯一。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 2012-11-21 11:54:56 | 只看该作者
    回复 7# joykao

    那么重命名可行吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    9#
    发表于 2012-11-21 13:42:44 | 只看该作者
    回复 8# caicai2012
    这是一种方法,方便你管理对象,但是识别对象是去对比对象的属性的,你要让你的测试对象能被很好的识别,当你加入对象到对象库后,你可去增删属性或者编辑属性方便你去唯一识别该对象,你可以highlight去查看加到对象库的对象是否可以识别,因为可能有好多对象几乎属性都相同,可能靠index,location去鉴别。
    当然不能确定这个就是你遇到的问题,多研究下对象的属性,用SPY 去多看看,当然你也可以用浏览器自带的工具去查看。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2012-11-21 15:10:19 | 只看该作者
    LZ需要提供详细信息。

    1. 如果这里整个是flash做到,那么它有可能被QTP识别为WebElement("WebElement")网页元素对象,如果click事件录制时未能录制到坐标,那么回放时QTP会点击这个对象的中心点,如果你需要点的“按钮”不在整个对象的中心点,那么回放时就看不出效果。如果是flash,建议模拟录制。当然从你提供的网页代码看,这里不是flash,而是div。

    2. div只是一个块,但你图中显示有“上传图片”这4个字或图片,那么可以肯定有一个对象(表示“上传图片”这4个字或图片的对象)存在,可能div中还有其他元素覆盖在这个对象上,导致你录制时QTP以为你在操作那个对象。对这种情况建议在对象库中将该网页上所有对象都导入进来,分别查看一下,找到这个表示“上传图片”这4个字或图片的对象,代码中换成这个对象的click。如果嫌加进来一个一个看台麻烦,可以用Page.ChildObjects(oEle)的方式print出页面下所有子对象的object.type/name/class/id,具体用哪些要看网页代码中用了哪些。

    3. 还有一种可能,表示“上传图片”这4个字或图片的对象在网页中有一些属性导致QTP无法识别,结果QTP就完全找不到这个对象,这会导致childObjects方法就拿不到。这时需要通过GetElement系列函数来获取所有网页元素,具体是byTag/id/name也要看网页代码中怎么写,拿出来后再object.type/name/class/id,找到后用document.write方式<script>来执行。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2012-11-22 16:38:59 | 只看该作者
    回复 10# jack_loo


        我这边上传文件的按钮是falsh的,按照你的说法进行了模拟录制,但是没有录制下来。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2012-11-22 16:39:21 | 只看该作者
    回复 10# jack_loo


    不知道还有没有别的办法。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2012-11-22 16:47:37 | 只看该作者
    本帖最后由 yanfang84 于 2012-11-22 19:10 编辑

    <object width="112" height="112" class="swfupload" id="SWFUpload_0" data="http://192.168.1.51/sns/public/js/swf/swfupload.swf?preventswfcaching=1353573678421" type="application/x-shockwave-flash" SelectFile="null" SelectFiles="null" StartUpload="null" ReturnUploadStart="null" StopUpload="null" CancelUpload="null" RequeueUpload="null" GetStats="null" SetStats="null" GetFile="null" GetFileByIndex="null" GetFileByQueueIndex="null" AddFileParam="null" RemoveFileParam="null" SetUploadURL="null" SetPostParams="null" SetFileTypes="null" SetFileSizeLimit="null" SetFileUploadLimit="null" SetFileQueueLimit="null" SetFilePostName="null" SetUseQueryString="null" SetRequeueOnError="null" SetHTTPSuccess="null" SetAssumeSuccessTimeout="null" SetDebugEnabled="null" SetButtonImageURL="null" SetButtonText="null" SetButtonTextPadding="null" SetButtonTextStyle="null" SetButtonAction="null" SetButtonDisabled="null" SetButtonCursor="null">

    这个是flash的元素代码,请帮忙看看,按照里面的type和class创建了新对象,但是父对象却和应用程序的对象不匹配。

    完整脚本是:
    Browser("AAAAA").Page("AAAAA").Link("个人主页").Click
    Browser("AAAAA").Page("AAAAA-BBBBB").Link("上传图片").Click
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").WinTable("FalshButton").Click'641,382'点击falsh按钮,FalshButton是我新建的对象
    Window("Microsoft Internet Explorer").Window("选择要上载的文件,通过: 192.168.1.51").WinObject("FolderView").Click 82,245'打开window窗口
    Browser("AAAAA").Dialog("YY").WinListView("SysListView32").Select DataTable("FileName", dtLocalSheet)    '对上传的文件名参数化
    Window("Microsoft Internet Explorer").Window("YY").WinObject("打开(O)").Click 27,9'选择文件后点击window窗口上的“打开”按钮
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Click 621,609
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Click 606,590
    Browser("AAAAA").Page("AAAAA-BBBBB").WebButton("发布").Click

    回放时的错误信息:

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2012-11-23 10:21:38 | 只看该作者
    模拟录制,录制出来的脚本应该类似这样:
    Window("Google Chrome").RunAnalog "Track1"
    它录制下来的是一个鼠标运动轨迹,所以叫Track,整个录制过程不可修改。

    看你的脚本,使用的不是模拟录制,而是低级别模式录制,所以录制到Window("Microsoft Internet Explorer")这样的对象,如果页面和页面中所有元素的大小与坐标都固定,那么Click 621,609这样的位置就能够重现,你这样的录制就应该可以回放。不能回放的原因只能是“页面和页面中所有元素的大小与坐标”有一些发生了改变,所以通常低级别录制少用,容易发生对象坐标改变的现象,如果一定要用,通常将窗口最大化。如果要在多个测试机上能运行,还要统一操作系统和其他软件版本、统一分辨率。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2012-11-23 10:36:08 | 只看该作者
    除了模拟录制、低级别录制外,还可以做虚拟对象。本质上虚拟对象方法就是低级别录制的进化版,一样是通过坐标确定一个点击位置,低级别录制是直接点击一个位置,虚拟对象是划定一个方框范围,凡是点在这个方框内,都被认为是对这个方框(QTP把这个方框虚拟成一个对象,这就是虚拟对象名称的来源)的操作。

    虚拟对象的优势在于可以获得更好的相对坐标位置。比如你这个例子。当低级别录制时,Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Click 621,609这个事件中点击坐标621,609是WinObject("Internet Explorer_Server")的相对坐标,是在IE浏览器中的坐标,万一回放时因为flash前的文字多了挤占了flash的位置,就导致Click 621,609是点在一个无效的位置上。而虚拟对象的方法可以将对象直接画在这个flash对象上,认为是flash对象的子对象,那么虚拟对象的坐标位置就是相对flash的坐标,很少看到flash的大小会发生变化,而flash本身位置的改变,不会影响虚拟对象相对于flash对象的位置。所以虚拟对象方法比低级别录制效果好,模拟录制也有相对哪个对象的坐标来进行模拟录制的概念,所以模拟录制也比低级别录制效果好。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2012-11-23 16:25:01 | 只看该作者
    严重支持,必须的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2014-5-27 15:45:30 | 只看该作者
    话说你以前是联通商城的?我也在学,现在问题解决了吗  求指教。。。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-22 15:07 , Processed in 0.089047 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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