51Testing软件测试论坛

标题: QTP对一些控件的识别都用什么属性 [打印本页]

作者: moshuang    时间: 2012-8-30 13:25
标题: QTP对一些控件的识别都用什么属性
比如对web控件,对page主要是用index识别,webEdit由name识别,button由name识别,webElement由intertext识别。那flex的一些常用控件由哪个属性识别??
作者: xjwldlover    时间: 2012-8-30 13:37
本帖最后由 xjwldlover 于 2012-8-30 13:41 编辑

编辑了半天,我还是放弃回答了,你对QTP的对象识别方式理解貌似有点偏差~
没能帮到你
作者: joykao    时间: 2012-8-30 15:45
介个没有什么规定的说法吧,这个问题很难回答。。。。只要能识别对象,你管它用的是什么属性去识别的啦。
作者: moshuang    时间: 2012-8-30 16:56
回复 2# xjwldlover


    难道不是这样子吗?对一些控件在object identification里面是写好了由哪些属性来识别这个控件的呀。
作者: xjwldlover    时间: 2012-8-30 17:19
回复 4# moshuang

你说的QTP识别属性其实是Tools-Object Identification中控件的Mandatory Properties(MP)强制属性和Assistive Properties (AP)辅助属性。一般情况下QTP根据MP和AP可以唯一确定一个对象,这里面包含的其实是一个经验值。当根据这些属性无法唯一确定一个对象时,QTP的智能识别(Smart Identification)便发挥作用了,比如你说的PAGE使用index来唯一确定。这其实不是Page本身的属性,是QTP没招了,只能根据他们顺序来定义。
但绝大多数情况下,我们是不允许使用智能识别,因为这代表这我们没有准确找到目标对象。这时我们
给对象库的对象添加属性,比如Hwnd,来唯一确定这个对象。
总的来说,我们可以使用“对象(TO)的所有属性”来查找一个页面的运行时对象(RO),QTP为了方便我们,默认先使用“一些几乎必定要用的属性”来描述这个对象,如果能唯一确定一个对象,那我们就无须再改了,如果不能我就再手动添加属性。

总结:QTP识别对象是根据对象库属性。你说的那些属性,是QTP默认属性的一个子集,QTP默认属性又是对象属性的子集

我的描述不够清晰,等以后我理解再深刻点时再编辑吧,希望高手能予以指正~
作者: xjwldlover    时间: 2012-8-30 18:45
Object Identification 的作用我认为有三个功能,如有错误请指正,谢谢
①辨识对象类型,比如webEdit,JavaButton什么的
②便于修改对象库。虽然QTP本质是使用对象属性来匹配页面对象。但如果在对象库中所有的对象都是一个类型,一个样子,你怎么去修改。挨个看属性还不如不用这个工具。于是QTP使用Mandatory属性来确定这个控件的类型和显示名称。你可以很容易找到这个对象并修改。
③辨识出对象类型后提供对象的方法。比如你webButton().Object加一个点后,后面提示那么多方法。
作者: moshuang    时间: 2012-8-31 14:37
回复 6# xjwldlover


    非常非常感谢你的回答。明白了。
作者: moshuang    时间: 2012-8-31 14:37
回复 5# xjwldlover


    我不太明白这一句话“给对象库的对象添加属性,比如Hwnd,来唯一确定这个对象。”。Hwnd什么意思?
作者: moshuang    时间: 2012-8-31 14:40
回复 5# xjwldlover


    我这样问,是因为很多flex控件的属性里面有automationindex和automationname,这样子我的脚本总因为这个index无法回放成功。我删除了有时候它又说对象找不到。真是不知道该怎么做了。这个automationindex是加载页面时后自动生成的还是开发那边自动生成的,一旦返还给开发,这些就又变了??
作者: xjwldlover    时间: 2012-8-31 15:30
回复 8# moshuang


    hwnd是web对象的一个句柄属性,可以唯一标识这个对象。本质上是和name一样,是Object的一个属性,只不过它具有唯一性。但它是会变的哦,所以可能不太好抓。一般只有在确定browser时使用它。其他类型的对象我就不知道是否有这个属性了,推测应该有类似的属性吧
作者: moshuang    时间: 2012-8-31 16:15
回复 10# xjwldlover


    能举个例子吗?针对browser的。
作者: xjwldlover    时间: 2012-8-31 16:51

  1. Set IE = CreateObject("InternetExplorer.Application")
  2. IE.Visible = True
  3. ie.Navigate "www.baidu.com"
  4. hwnd = ie.HWND
  5. Browser("目标").SetTOProperty "hwnd", hwnd
复制代码

不知道是否我的解释有偏差啊。我的意思不是时hwnd有多好用。而是说对象的属性‘集合’的使用很灵活,作用很强大~
作者: moshuang    时间: 2012-9-3 16:16
回复 12# xjwldlover


    那它也就是唯一标示IE,它不能唯一标示控件呀
作者: xjwldlover    时间: 2012-9-3 17:33
回复 13# moshuang


   呵呵 就是举个例子,控件肯定也有其他可以唯一标识的‘属性集’啊。
作者: moshuang    时间: 2012-9-4 15:16
回复 14# xjwldlover


    唯一的属性,我的对象库里的属性我去掉automationindex值后是可以的。可是,我就是想知道怎样在object identification里面去掉这个属性。可是在那里偏偏不能用这个configure,你说的英文帮助文档里有吗?传给我吧。F1里没有[attach]81250[/attach]
作者: xjwldlover    时间: 2012-9-4 18:06
本帖最后由 xjwldlover 于 2012-9-5 10:15 编辑

找到了[attach]81256[/attach]
好像这个文件无法独立运行,如果不行的话,你就到你自己QTP安装目录里找这个英文文档吧
HP\QuickTest Professional\help
作者: qtp老菜鸟    时间: 2012-9-5 00:51
object identification可以查看的。。
作者: xjwldlover    时间: 2012-9-5 11:25
这事整愁了,我直接把帮助文档里的这段示例发给你吧

  1. Dim qtApp
  2. Dim qtIdent
  3. Dim qtWinListIdent
  4. Dim intPosition


  5. Set qtApp = CreateObject("QuickTest.Application")
  6. qtApp.Launch
  7. qtApp.Visible = True

  8. Set qtIdent = qtApp.Options.ObjectIdentification
  9. Set qtWinListIdent = qtIdent.Item("WinList")

  10. qtIdent.ResetAll
  11. qtWinListIdent.OrdinalIdentifier = "Index"


  12. intPosition = qtWinListIdent.MandatoryProperties.Find("nativeclass")
  13. qtWinListIdent.MandatoryProperties.Remove intPosition
  14. If qtWinListIdent.AvailableProperties.Find("items count") <> -1 Then
  15.     qtWinListIdent.MandatoryProperties.Add "items count" '
  16. End If


  17. qtWinListIdent.AssistiveProperties.RemoveAll
  18. qtWinListIdent.AssistiveProperties.Add "all items"
  19. qtWinListIdent.AssistiveProperties.Add "width", 1
  20. qtWinListIdent.AssistiveProperties.Add "height", -1
  21. qtWinListIdent.AssistiveProperties.MoveToPos 2, 1

  22. qtWinListIdent.EnableSmartIdentification = True
  23. If qtWinListIdent.BaseFilterProperties.Count = 0 Then
  24.     qtWinListIdent.BaseFilterProperties.Add "x"
  25.     qtWinListIdent.BaseFilterProperties.Add "y"
  26. End If
  27. qtWinListIdent.OptionalFilterProperties.Add "abs_x", 1
  28. qtWinListIdent.OptionalFilterProperties.Add "abs_y", 2

  29. Set qtWinListIdent = Nothing
  30. Set qtIdent = Nothing
  31. Set qtApp = Nothing
复制代码

作者: moshuang    时间: 2012-9-5 16:41
回复 18# xjwldlover


    这代码完全看不懂呀。我的意思是说,能不能怎样让我把flex插件里的configure项改动,让他的智能识别项减少,没有automationindex,这样脚本就不用每次去掉这个值。这段代码和这里有关系吗?谢谢你了,太谢谢了。
作者: xjwldlover    时间: 2012-9-5 17:59
回复  xjwldlover


    这代码完全看不懂呀。我的意思是说,能不能怎样让我把flex插件里的configure项 ...
moshuang 发表于 2012-9-5 16:41


这段代码的意思就是取控件WinList,重新定义控件的强制识别属性、辅助识别和智能识别标志。
作者: moshuang    时间: 2012-9-6 17:14
回复 20# xjwldlover


    那怎么更改?




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