首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IBM:在窗口中查找_really_可见对象

IBM:在窗口中查找_really_可见对象
EN

Stack Overflow用户
提问于 2014-07-18 14:03:53
回答 3查看 2.9K关注 0票数 1

我对IBM(8.5版)有个问题。我正在为一个相对复杂的应用程序建立一个自动化测试框架,它使用了大量的选项卡和面板。问题是,我无法检查使用 find 方法找到的对象现在是否在屏幕上实际可见(在所有其他对象的前面/顶部)。换句话说,我需要一个算法,它将只搜索当前活动(带到前面)选项卡。

我使用Delphi完成了一个非常简单的应用程序来调试这个问题:一个TPageControl包含2个选项卡,每个选项卡上都有一个文本字段(TEdit)。主窗口是一个映射的对象,所以我是这样进行搜索的:

代码语言:javascript
运行
复制
TestObject[] objs = window().find(atDescendant(".class", "TEdit"));

如果应用程序刚刚启动(只有第一个文本字段是可见的-第一个选项卡是活动的),那么find方法将返回一个只有一个文本字段的数组。但是,如果我激活第二个选项卡,那么RFT就会找到两个文本字段(无论我在后面做什么),并且没有办法区分其中的哪个实际上在屏幕上。

我一直在使用一些自动化工具,但是RFT中的这个东西让我很沮丧。以下是一些更多的信息,以避免明显的建议。相信我,我一直在寻找答案。

  1. 当我在制表符之间切换时,字段的属性(在对象检查器中可用)都不会改变。标准属性(如.enabled.visible )总是正确的。这是正确的,因为它们只是控件的属性,而不是一些实时的东西。
  2. RFT对象的方法isShowing()总是为两个字段返回true
  3. RFT对象的方法ensureObjectIsVisible()总是为两个字段返回,并且从不切换选项卡将所需字段带入视图。
  4. 我可以调用click() for ()或任何不可见字段的用户模拟操作,测试将继续运行,没有任何例外。更多的--如果窗口在这样的点击时没有聚焦,它确实得到了焦点--看起来RFT只是将一次点击发送到不可见对象的矩形中心的窗口。
  5. 方法getClippedScreenRectangle()getScreenRectangle()getVisibleArea()为不可见文本字段返回相同的矩形(测试期间窗口完全位于屏幕边框内)。
  6. 当我使用getImage()生成不可见文本字段的屏幕快照时,结果是将窗口图像的一部分保存在不可见元素的屏幕矩形中。
  7. 如果我为这两个文本字段创建映射对象,唯一的区别是,在刚刚启动的应用程序测试运行的情况下,每次调用不可见甚至尚未激活的文本字段时,它都会挂起几秒钟(例如,如果您在应用程序启动后调用text2().exists(),而激活选项卡是第一个,它将挂起并最终返回true)。
  8. 在我的调试Delphi构建的应用程序和用Java编写的实际SUT上,这种不正确的行为和不能区分活动控件和非活动控件的行为是一样的。

在我的调试应用程序中,我可以检查父对象以了解哪个文本字段属于哪个选项卡,但是如何找到哪个选项卡被激活?

QTP和TestComplete都具有确保所需对象实际上在屏幕上的功能,如果尝试单击超出视图的对象,两者都会抛出异常。更进一步- QTP允许访问对象的本机属性和方法,这通常在没有任何正确的方法时会有所帮助(我可能会在调试应用程序中检查ActivePageIndex,以了解哪个选项卡是活动的)。

我出什么问题了吗?还是我读的东西不够仔细?或者这个问题对我的机器来说是局部的?

如何使用IBM检查实际对象的可见性?

EN

Stack Overflow用户

发布于 2014-07-19 17:41:07

若要确定对象是否可见,请尝试类似的操作,并查看是否解决了问题。

代码语言:javascript
运行
复制
boolean  isActuallyVisible(TestObject t)
    {
        boolean isVisible = true;
        Rectangle r = (Rectangle) t.getProperty(".bounds");
        if(r.width == 0 && r.height ==0)
        {
            isVisible = false; // bound says height /width is zero , most likely  invisible object.
        }

        return isVisible;
    }
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24826933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档