51Testing软件测试论坛

标题: WPF对象可以识别但是不能添加到对象库 [打印本页]

作者: palsin    时间: 2011-1-12 11:43
标题: WPF对象可以识别但是不能添加到对象库
本帖最后由 palsin 于 2011-1-12 16:39 编辑

各位大侠,我装了WPF插件,遇到的问题有一下两点:
1,对象识别困难:
  我在spy的时候,如果我直接指在我要识别的对象上然后点左键,wpf对象往往没有被识别出来,  而识别出来的只是一个wpfwindnow对象,但是如果我spy的时候把鼠标指针在整个页面上移   动,这个时候指针的移动速度就会变慢,在我移动过我想要识别的对象的时候,这个对象会被    highlight出来,然后我在把鼠标指上去,这个时候wpf对象就会被识别出来。
2,对象不能添加到对象库
  我点了添加对象库的图标后到页面上去选择对象,这个时候鼠标的指针不会像我spy的时候一样变  慢,我点击了要添加的对象后对象总是被识别成一个wpfwindnow。
PS:我采用录制的方法可以识别某些添加不上去的对象,但是录制的速度太慢了,经常导致QTP或者application死掉。
请问大家有什么经验可以交给小弟的,谢谢啦.
(我用的是QTP10)
作者: palsin    时间: 2011-1-12 16:36
有那位大侠知道么?
谢谢啦
作者: zzxxbb112    时间: 2011-1-13 09:07
对想库中自己new一个对象,并加入对应的属性根据spy的一些信息
作者: hsjzfling    时间: 2011-1-13 10:46
1。 这个是老毛病了,spy的过程中QTP会时刻与.net做大量交互,消耗大量的资源. wpf的UI展现和web也有很大区别,往往实际能spy到的控件位置与所见有些偏差. 查看对象属性最好是用Tools下的.Net专用对象查看器,里面还有些很好用的功能,也可以结合snoop工具来查看

2。 正常的,用10.0及以前版本的话,可以在添加对象时,通过点击控件边角的方式来完成(原理是什么不清楚,但实践证明很有效). 这类问题再QTP11中很好的解决掉了.  另一种情况,有些对象存在的有效期是有限制的,比如一些右键的wpfMenu控件,就很难添加进去,这时只能用另一些特殊的方式了.
作者: palsin    时间: 2011-1-13 11:41
感谢版主回复,不知道我理解的是不是正确,就是假设我对象库里面已经有了wpfButton对象,然后我有新的wpfButton对象加不上,我可以copy以前的那个然后改下属性?但是如果我有些对象类型压根就没有加进去过,我应该怎么样new一个那样类型的对象啊?谢谢版主
作者: palsin    时间: 2011-1-13 11:53
本帖最后由 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和大家不吝赐教
作者: palsin    时间: 2011-1-13 14:11
理解版主new 一个test object的意思了,我用hsjzfling 同学的方法可以把对象添加了,现在就是不能解决有些对象被识别成wpfobject,甚至有的对象根本就不识别,QTP根本不认为那里有东西。像这样的问题有解决办法么?
作者: hsjzfling    时间: 2011-1-13 14:49
对于grid的处理向来比较麻烦,不过方法自然是有的. 若只是需要验证某几条记录,那么用wpfobject的属性应该能将其识别的,若是要验证所有数据, 可以自己开发扩展插件,这个对技术要求不低,也比较麻烦点.

比较建议用wpfobject("xxx").object.ExportToCSV 方法,将整个表格导出成一个csv文件,然后写个文本比较的函数,同时把report部分写的清晰明了点就行了.这个方法比较省事,不过最好通知手工测试人员对于UI展现部分留心看看,自动化在这里侧重于数据的校验了
作者: palsin    时间: 2011-1-13 15:36
本帖最后由 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文件报一样的错误
作者: palsin    时间: 2011-1-13 22:40
睡前顶顶~
作者: hsjzfling    时间: 2011-1-14 11:00
报错提示是没有找到该方法,那用.Net Windows Forms Spy查看下该表格控件支持哪些方法,分析下哪些可以利用上咯




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2