【发布时间】:2014-07-18 14:03:53
【问题描述】:
我对 IBM-RFT(8.5 版)有疑问。我正在为使用大量选项卡和面板的相对复杂的应用程序制作自动化测试框架。问题是我无法检查使用 find 方法找到的对象是否现在实际上在屏幕上可见(在前面/最上面其他)。换句话说,我需要一个算法,它只会搜索当前活动(带到前面)的标签。
我已经使用 Delphi 完成了一个非常简单的应用程序来调试这个问题:一个包含 2 个选项卡和每个选项卡上的单个文本字段 (TEdit) 的 TPageControl。主窗口是一个映射对象,所以这是我进行搜索的方式:
TestObject[] objs = window().find(atDescendant(".class", "TEdit"));
如果应用程序刚刚启动(只有第一个文本字段可见 - 第一个选项卡处于活动状态),则 find 方法将返回一个仅包含一个文本字段的数组。但是,如果我激活第二个选项卡,那么(无论我之后做什么)RFT 都会找到这两个文本字段,并且无法区分其中哪一个实际上在屏幕上。
我一直在使用多种自动化工具,但 RFT 中的这件事让我很沮丧。这里有一些更多信息以避免明显的建议。相信我,我一直在寻找答案。
- 当我在选项卡之间切换时,所有字段的属性(在对象检查器中可用)都不会改变。 .enabled 和 .visible 等标准属性始终为 true。没错,因为它们只是控件的属性,而不是一些实时的东西。
- RFT 对象的方法 isShowing() 始终为两个字段返回 true。
- RFT 对象的方法 ensureObjectIsVisible() 始终为两个字段返回 true,并且从不切换选项卡以将所需字段带入视图。
- 我可以为不可见的字段调用 click()、hover() 或任何用户模拟操作,并且测试继续运行,没有任何异常。更重要的是 - 如果在点击时窗口不在焦点上,它确实获得了焦点 - 看起来 RFT 只是将点击发送到不可见对象矩形中心的窗口。
- 方法 getClippedScreenRectangle()、getScreenRectangle() 和 getVisibleArea() 为不可见的文本字段返回相同的矩形(窗口完全测试期间在屏幕边框内)。
- 当我使用 getImage() 生成不可见文本字段的屏幕截图时,这会导致将窗口图像的一部分保存在不可见元素的屏幕矩形内。
- 如果我为两个文本字段创建映射对象,唯一的区别是,在这种情况下,刚刚启动的应用程序测试运行将在每次调用 invisible-and-not-yet-even-once- 期间挂起几秒钟激活的文本字段(例如,如果您在应用程序启动后调用 text2().exists(),此时活动选项卡是第一个,它将挂起并最终返回 true )。
- 这种不正确的行为和无法区分活动和非活动控件在我调试 Delphi 构建的应用程序和用 Java 编写的实际 SUT 上是相同的。
在我的调试应用程序中,我可以检查父对象以了解哪个文本字段属于哪个选项卡,但我如何找到激活了哪些选项卡?
QTP 和 TestComplete 都具有确保所需对象实际上在屏幕上的功能,如果您尝试单击视图外的对象,两者都会引发异常。更进一步 - QTP 允许访问对象的本机属性和方法,当没有任何 正确 方法来做这件事时,这通常会有所帮助(我可以在我的调试应用程序中检查 ActivePageIndex 以了解哪个选项卡处于活动状态)。
我是不是搞错了什么?还是我读的东西不够仔细?或者这个问题可能是我机器的本地问题?
如何使用 IBM-RFT 检查实际对象的可见性?
【问题讨论】: