是否可以结合SwingLibrary选择带有Robot Framework的java.awt.Frame?

时间:2014-02-14 13:30:01

标签: java swing robotframework gui-testing

我一直在使用Robot Framework与Swing Library一起测试基于Java Swing的应用程序。我陷入了其中一个测试用例,因为Select Window关键字在屏幕上找不到所需的窗口,尽管它是可见的。

以下是显示此测试用例的相关关键字的代码段:

...
Select Window      Main Window
Push Button        Add Person
List Windows
Select Window      Person Manager

前三行工作正常,但Select Window Person Manager失败并显示以下相当短的消息:

14:24:40    FAIL    Frame with name or title 'Person Manager'

调试正在测试的应用程序后,我确定了问题的根源:未找到的窗口是java.awt.Frame的实例。

有趣的是,它由List Windows列出。

是否有已知的解决方法或Swing Library的现有扩展,以便能够专注于java.awt.Frame

1 个答案:

答案 0 :(得分:0)

我通过调整Swing Library的现有源代码找到了解决问题的方法。 它可以从github(https://github.com/robotframework/SwingLibrary)轻松下载。 有三个类需要更改以另外允许类型为java.awt.Frame的窗口。

首先,有一个班级org.robotframework.swing.window.FrameOperator。而不是扩展JFrameOperator,它必须扩展FrameOperator。 因此,该类的改编版本如下所示:

 public class FrameOperator extends org.netbeans.jemmy.operators.FrameOperator ... {
    ...
    private static ComponentChooser createRegExpChooser(String title) {
          //change from JFrameFinder to FrameFinder
          return new FrameFinder(...);
    }

 }

此外,类private boolean titleMatches中的方法org.robotframework.swing.chooser.ByNameOrTitleFrameChooser需要进行调整,以支持作为java.awt.Frame实例的组件。

最后,需要删除班级org.robotframework.swing.keyword.window.WindowKeywords中的第89行。

可以使用mvn package轻松构建新版本的Swing Library。