1
我们有一个功能,可以访问标准Windows应用程序中的按钮和列表框等两种类型的控件。该函数只使用控件名称作为参数,所以qtp无法理解它是什么类型的控件。如何解决这个问题?写2个单独的功能 - 1个按钮&另一个列表框?如何在qtp中运行时访问对象?
我们有一个功能,可以访问标准Windows应用程序中的按钮和列表框等两种类型的控件。该函数只使用控件名称作为参数,所以qtp无法理解它是什么类型的控件。如何解决这个问题?写2个单独的功能 - 1个按钮&另一个列表框?如何在qtp中运行时访问对象?
这取决于你想要什么与对象的事,如果你想要做的东西是共同所有WinObjects
(如Click
或GetROProperty
),你可以做到这一点,如果它是针对不同的测试对象,你必须有不同的方法(或至少把它不同内部)
示例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")
)和关于转执行你的具体行动。
但是,请注意,在控件更改其状态时,由ChildObjects返回的集合包含的引用变得无效。如果您尝试覆盖异步移动,消失,更改图标等的控件,那么这可能很糟糕 - 随后您会得到随机结果或运行时错误。 – TheBlastOne 2010-06-18 07:55:22
@TheBlastOne如果控件本身发生变化(而不仅仅是它们的外观),则这只会有问题。如果浏览器导航,否则应该是OK。 – Motti 2010-06-19 19:17:14
这也是我所期望的。但是,如果更改父容器的可见性,则ChildObjects集合中的任何子元素引用将变为无效。这正是我所针对的(意外)问题。我的猜测是,通过WNHD处理QTP地址,如果子对象由于状态更改而重新创建(如在UI框架中,如JBoss的ServerFaces或Delphi组件框架中的UI框架中经常这样做),那么这些地址会变得无效。 – TheBlastOne 2010-07-05 13:44:13