Question

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

Ce code fonctionne bien.Si nous supprimons la pause de 5 secondes, le tableau n'est pas trouvé car il faut quelques secondes à l'application pour le charger.

J'aimerais savoir s'il y a une façon plus propre de le faire.J'ai essayé avec robot.waitforidle () après candidatureLauncher (je suppose qu'une fois l'EDT est vide, tout est chargé), mais cela ne fonctionne tout simplement pas.

Je sais que la pause peut utiliser certaines conditions comme un événement sur quand arrêter, mais je ne comprends pas comment l'écrire depuis que Javadoc et Doc officiel sont pauvres.

  • Puse.Pause (waitforcomponenttoshowcondition.untilisshowing (cadre.commeurs ())): J'ai besoin d'un composant, si je passe le cadre d'emballage, il ne fonctionne pas.Et je ne peux pas passer la table parce que c'est précisément ce que j'attends pour obtenir.
  • Je comprends alors je devrais probablement travailler avec la compositionFoundCondition, mais je ne l'obtiens pas!Je me suis fatigué avec:

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

    Toute aide?

Était-ce utile?

La solution

Vous pouvez utiliser composantfinder à localiserle composant.Par exemple, sur la base de la correspondance de la question:

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

Voici une alternative avec la recherche par nom:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top