2
    @Before public void setUp() {
        Robot robot = BasicRobot.robotWithCurrentAwtHierarchy();
        ApplicationLauncher.application("myApp").start(); 

        Pause.pause(5, TimeUnit.SECONDS); 
        frame = WindowFinder.findFrame("frame0").using(robot);

        JTableFixture table = frame.table(new GenericTypeMatcher<JTable>(JTable.class) {
             @Override protected boolean isMatching(JTable table) {
                return (table instanceof myTreeTable); 
             }  
        });
    }

このコードはうまく機能します。5 秒間の一時停止を削除すると、アプリがテーブルをロードするのに数秒かかるため、テーブルは見つかりません。

よりクリーンな方法があれば知りたいです。ApplicationLauncher の後に robot.waitForIdle() を試しました (EDT が空になると、すべてが読み込まれると思います) が、うまくいきません。

一時停止がいつ停止するかのイベントとしていくつかの条件を使用できることは知っていますが、JavaDoc と公式ドキュメントが貧弱であるため、それを記述する方法がわかりません。

  • Pause.pause(WaitForComponentToShowCondition.untilIsShowing(frame.component())) : コンポーネントが必要です。ラッパー フレームを渡すと機能しません。そして、それがまさに私が得るのを待っているものであるため、私はテーブルを渡すことができません.
  • おそらくComponentFoundConditionで作業する必要があることは理解していますが、わかりません! 私は疲れました:

           ComponentMatcher matcher = new GenericTypeMatcher<JTable>(JTable.class) {
               @Override protected boolean isMatching(JTable table) {
                 return (table instanceof myTreeTable); 
               }  
           };
    
           Pause.pause(new ComponentFoundCondition("DebugMsg", frame.robot.finder(), matcher)); 
    

何か助けはありますか?

4

1 に答える 1

3

ComponentFinder を使用してコンポーネントを見つけることができます。たとえば、質問のマッチャーに基づいて:

final ComponentMatcher matcher = new TypeMatcher(myTreeTable.class);

Pause.pause(new Condition("Waiting for myTreeTable") {
    @Override
    public boolean test() {
        Collection<Component> list = 
                window.robot.finder().findAll(window.target, matcher);
        return list.size() > 0;
    }
 }, 5000); 

名前によるルックアップの代替手段は次のとおりです。

final ComponentMatcher nameMatcher = new ComponentMatcher(){
    @Override
    public boolean matches(Component c) {
        return "ComponentName".equals(c.getName()) && c.isShowing();
    }
};

Pause.pause(new Condition("Waiting") {
    @Override
    public boolean test() {
        Collection<Component> list = 
                window.robot.finder().findAll(window.target, nameMatcher);
        return list.size() > 0;
    }
 }, 5000);
于 2012-07-27T04:48:23.197 に答える