Fest: ждать, пока GUI загрузится, прежде чем делать что-либо

StackOverflow https://stackoverflow.com//questions/11674383

Вопрос

    @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 секунд, то таблица не найдена, потому что для его приложения требуется несколько секунд.

Я хотел бы знать, есть ли устойчивый способ сделать это.Я попробовал с Robot.waitforidle () После applicationLauncher (я думаю, когда EDT пуст, все загружено), но просто не работает.

Я знаю, что пауза может использовать некоторые условия в качестве события, когда он останавливается, но я не понимаю, как писать, поскольку javadoc и официальный документ плохой.

    .
  • pause.pause (waitforcomponenttoshowcondition.untilisshowing (frame.component ())): Мне нужен компонент, если я передаю раму обертки, она не работает.И я не могу передать столик, потому что это именно то, что я жду, чтобы получить.
  • Я понимаю, тогда я должен работать с компонентомfoundcondition, но я не понимаю!Я устал с:

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

    Любая помощь?

Это было полезно?

Решение

Вы могли бы использовать КомпонентныйФиндер для определения размещениякомпонент.Например, на основе сопоставления в вопросе:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top