FEST: дождаться загрузки графического интерфейса, прежде чем что-либо делать
@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 пуст, все загружено), но он просто не работает.
Я знаю, что pause может использовать некоторые условия в качестве события, когда нужно остановиться, но я не понимаю, как написать его, так как 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));
Любая помощь?
1 ответ
Вы можете использовать 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);