Domanda

    @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); 
             }  
        });
    }

Questo codice funziona bene.Se togliamo i 5 secondi di pausa, poi la tabella non viene trovato perché ci vogliono alcuni secondi per l'applicazione per caricare.

Vorrei sapere se c'è un modo più pulito di farlo.Ho provato con il robot.waitForIdle() dopo ApplicationLauncher (credo che una volta EDT è vuoto, tutto è caricato), ma semplicemente non funziona.

So che la pausa è possibile utilizzare alcune condizioni, come un evento su quando smettere, ma non capisco come scrivere dal JavaDoc e ufficiale doc è scarsa.

  • Pausa.pausa(WaitForComponentToShowCondition.untilIsShowing(fotogramma.componente())) :Ho bisogno di un componente, se mi passa il wrapper telaio non funziona.E non posso passare il tavolo, perché quello è proprio quello che sto aspettando per ottenere.
  • Capisco quindi probabilmente dovrei lavorare con ComponentFoundCondition ma io non capisco!Mi stanco con:

           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)); 
    

Qualsiasi aiuto?

È stato utile?

Soluzione

Si potrebbe utilizzare ComponentFinder per individuare il componente.Per esempio, basato sulla matcher in questione:

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); 

Qui è un'alternativa con ricerca per nome:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top