51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

[原创] WPF对象可以识别但是不能添加到对象库

[复制链接]

该用户从未签到

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

各位大侠,我装了WPF插件,遇到的问题有一下两点:
1,对象识别困难:
  我在spy的时候,如果我直接指在我要识别的对象上然后点左键,wpf对象往往没有被识别出来,  而识别出来的只是一个wpfwindnow对象,但是如果我spy的时候把鼠标指针在整个页面上移   动,这个时候指针的移动速度就会变慢,在我移动过我想要识别的对象的时候,这个对象会被    highlight出来,然后我在把鼠标指上去,这个时候wpf对象就会被识别出来。
2,对象不能添加到对象库
  我点了添加对象库的图标后到页面上去选择对象,这个时候鼠标的指针不会像我spy的时候一样变  慢,我点击了要添加的对象后对象总是被识别成一个wpfwindnow。
PS:我采用录制的方法可以识别某些添加不上去的对象,但是录制的速度太慢了,经常导致QTP或者application死掉。
请问大家有什么经验可以交给小弟的,谢谢啦.
(我用的是QTP10)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2011-1-12 16:36:44 | 只看该作者
有那位大侠知道么?
谢谢啦
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-1-13 09:07:24 | 只看该作者
对想库中自己new一个对象,并加入对应的属性根据spy的一些信息
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2011-1-13 10:46:57 | 只看该作者
1。 这个是老毛病了,spy的过程中QTP会时刻与.net做大量交互,消耗大量的资源. wpf的UI展现和web也有很大区别,往往实际能spy到的控件位置与所见有些偏差. 查看对象属性最好是用Tools下的.Net专用对象查看器,里面还有些很好用的功能,也可以结合snoop工具来查看

2。 正常的,用10.0及以前版本的话,可以在添加对象时,通过点击控件边角的方式来完成(原理是什么不清楚,但实践证明很有效). 这类问题再QTP11中很好的解决掉了.  另一种情况,有些对象存在的有效期是有限制的,比如一些右键的wpfMenu控件,就很难添加进去,这时只能用另一些特殊的方式了.
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2011-1-13 11:41:36 | 只看该作者
感谢版主回复,不知道我理解的是不是正确,就是假设我对象库里面已经有了wpfButton对象,然后我有新的wpfButton对象加不上,我可以copy以前的那个然后改下属性?但是如果我有些对象类型压根就没有加进去过,我应该怎么样new一个那样类型的对象啊?谢谢版主
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2011-1-13 11:53:32 | 只看该作者
本帖最后由 palsin 于 2011-1-13 11:57 编辑

感谢hsjzfling大侠的回复,我刚试了下你说的2点,用.Net专用查看器,果然流畅了很多,应该是资源消耗少了的缘故,而且你说的点控件边角添加对象的方式很好用,我现在还有谢新的问题请hsjzfling和各位赐教:页面上有个table样的控件,我不是很清楚在wpf对象模型里面这个应该叫什么,因为spy出来的只是一个wpfobject,我想要得到里面的数据,由于只能识别出wpfobject,所以没有提供方法读各个行列的数据,我就随便spy了一下里面一个数据单元格发现这个数据单元格的classname是TextBlock,所以我就create了一个classname为TextBlock的Description对象,然后想通过wpfobject.Childobjects(Description)的方式返回一个子对象集合,然后读每个对象的text属性得到数据的值,但是这样做的问题有如下几点,请大家帮我分析一下:
1. 得到对象的集合后,用For each obj in objs出错,说是什么对象不支持改属性或方法,只能通过先得到ojbs.count,然后用for 来输出每个子对象的text属性。
2. 得到的子对象的数目远远小于table里数据的个数,数据有成百上千个,但是得到的子对象只有100多个,所以费解中,最后的结果倒是可以输出table里的一部分数据,貌似是不连续的,有的输出了,有的没有输出
所以请问大家,对于这种问题,大家有什么好的建议没有,请hsjzfling和大家不吝赐教
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2011-1-13 14:11:49 | 只看该作者
理解版主new 一个test object的意思了,我用hsjzfling 同学的方法可以把对象添加了,现在就是不能解决有些对象被识别成wpfobject,甚至有的对象根本就不识别,QTP根本不认为那里有东西。像这样的问题有解决办法么?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2011-1-13 14:49:00 | 只看该作者
对于grid的处理向来比较麻烦,不过方法自然是有的. 若只是需要验证某几条记录,那么用wpfobject的属性应该能将其识别的,若是要验证所有数据, 可以自己开发扩展插件,这个对技术要求不低,也比较麻烦点.

比较建议用wpfobject("xxx").object.ExportToCSV 方法,将整个表格导出成一个csv文件,然后写个文本比较的函数,同时把report部分写的清晰明了点就行了.这个方法比较省事,不过最好通知手工测试人员对于UI展现部分留心看看,自动化在这里侧重于数据的校验了
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2011-1-13 15:36:10 | 只看该作者
本帖最后由 palsin 于 2011-1-13 15:37 编辑

刚试了下ExportToCSV方法,但是出错了,以前没有用过这个,请指正下:
查了下wpfobject("xxx").object.ExportToCSV 后面的参数是个stream,所以就建了个Test.csv文件在C盘下:
set fso=createobject("scripting.filesystemobject")
set objCSVFileStream=fso.opentextfile("C:\Test.csv")
wpfobject("xxx").object.ExportToCSV objCSVFileStream
ofile.close
结果报的错误是:
ExportToCsv has thrown the following exception: Method Xceed.Wpf.DataGridControl.ExportToCsv not found
是因为ExportToCSV 的参数传错了么?
我把csv文件换成txt文件报一样的错误
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2011-1-13 22:40:04 | 只看该作者
睡前顶顶~
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2011-1-14 11:00:25 | 只看该作者
报错提示是没有找到该方法,那用.Net Windows Forms Spy查看下该表格控件支持哪些方法,分析下哪些可以利用上咯
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-20 19:58 , Processed in 0.075282 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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