2010-06-03 57 views
1

我们有一个功能,可以访问标准Windows应用程序中的按钮和列表框等两种类型的控件。该函数只使用控件名称作为参数,所以qtp无法理解它是什么类型的控件。如何解决这个问题?写2个单独的功能 - 1个按钮&另一个列表框?如何在qtp中运行时访问对象?

回答

2

这取决于你想要什么与对象的事,如果你想要做的东西是共同所有WinObjects(如ClickGetROProperty),你可以做到这一点,如果它是针对不同的测试对象,你必须有不同的方法(或至少把它不同内部)

示例CALC.EXE在科学模式:

Public Function Click(ByVal Name) 
    Window("text:=Calculator").WinObject("text:=" & Name).Click 
End Function 

Click "8" ''# This is a button 
Click "Oct" ''# This is a radio button 

运行结果之后是10(八进制8)


另一种方式来做到这一点是使用ChildObjects为了取得与​​这个属性(在这种情况下,一个)的所有对象,检查它是什么类型的对象(GetROProperty("micclass"))和关于转执行你的具体行动。

+1

但是,请注意,在控件更改其状态时,由ChildObjects返回的集合包含的引用变得无效。如果您尝试覆盖异步移动,消失,更改图标等的控件,那么这可能很糟糕 - 随后您会得到随机结果或运行时错误。 – TheBlastOne 2010-06-18 07:55:22

+0

@TheBlastOne如果控件本身发生变化(而不仅仅是它们的外观),则这只会有问题。如果浏览器导航,否则应该是OK。 – Motti 2010-06-19 19:17:14

+0

这也是我所期望的。但是,如果更改父容器的可见性,则ChildObjects集合中的任何子元素引用将变为无效。这正是我所针对的(意外)问题。我的猜测是,通过WNHD处理QTP地址,如果子对象由于状态更改而重新创建(如在UI框架中,如JBoss的ServerFaces或Delphi组件框架中的UI框架中经常这样做),那么这些地址会变得无效。 – TheBlastOne 2010-07-05 13:44:13

相关问题