jemmy fx testing fx ui выдает мне IllegalStateException при нажатии кнопки
Я хочу проверить свой пользовательский интерфейс javafx. У меня есть Application.class, который имеет основную функцию и загружает сцену (экран входа в систему). Мой тестовый код
@Before
public void startApp() throws InterruptedException {
startApp(Application.class);
scene = new SceneDock();
this.username = new TextInputControlDock(scene.asParent(), "txtFieldUsername");
this.password = new TextInputControlDock(scene.asParent(), "txtFieldPassword");
this.btnLogin = new LabeledDock(scene.asParent(), "Login", StringComparePolicy.EXACT);
this.btnCancel = new LabeledDock(scene.asParent(), "Cancel", StringComparePolicy.EXACT);
}
@Test
public void loginScreenMustContainTwoButtonsCancelAndLogin() throws Exception {
assertEquals(Button.class, new LabeledDock(scene.asParent(), "Cancel",
StringComparePolicy.EXACT).wrap().getControl().getClass());
assertEquals(Button.class, new LabeledDock(scene.asParent(), "Login",
StringComparePolicy.EXACT).wrap().getControl().getClass());
}
@Test
public void loginScreenMustContainTwoTextFieldsUsernameAndPassword() throws Exception {
TextInputControlDock username = new TextInputControlDock(scene.asParent(), "txtFieldUsername");
TextInputControlDock password = new TextInputControlDock(scene.asParent(), "txtFieldPassword");
assertTrue(username.wrap().getControl() instanceof TextField);
assertTrue(password.wrap().getControl() instanceof PasswordField);
}
@Ignore
@Test(expected=TimeoutExpiredException.class)
public void loginWindowHasAnErrorLabel() throws Exception {
NodeDock errorLabel = new NodeDock(scene.asParent(), Label.class, "lblErrorMessage");
assertTrue(errorLabel.wrap().getControl() instanceof Label);
}
@Test
public void loginButtonWithNoInputShowsErrorText() throws Exception {
log.debug("Clicking login button");
btnLogin.wrap().mouse().click(1);
log.debug(scene);
}
private void startApp(Class<AvalancheClient> app) {
// TODO Auto-generated method stub
AppExecutor.executeNoBlock(app);
}
После того, как я добавил этот текст loginButtonWithNoInputShowsErrorText
Я всегда получаю следующую ошибку
Exception in thread "Thread-7" java.lang.IllegalStateException: Application launch must not be called more than once
Почему это происходит? Я основываю свой код на примерах openjfx, которые я нашел в Интернете, потому что я еще не нашел аналитическую документацию и ссылку на jemmyfx. Не могли бы вы помочь мне немного?
1 ответ
Ну, я обнаружил, что было не так... AppExecutor должен вызываться в аннотированном методе @BeforeClass (статический), а не в методе @Before. Это работает сейчас.