Utilizo el marco TestFX para probar mi aplicación javaFX. Pruebo mi aplicación así:

@Test
public void shouldClickOnDeletMarkerButton() {
    FxRobot bot = new FxRobot();
    bot.robotContext();
    bot.clickOn("#deleteMarkerButton");
    bot.clickOn("javafx.scene.control.Alert.CANCEL_BUTTON"); //This doesn't work.
}

Me gustaría que haga clic en el botón Aceptar de Cuadros de diálogo de alerta de JavaFX, pero no he encontrado un fx: id.

¿Qué es fx: id of JavaFX Alert OK Button?

EDITAR: resuelvo mi problema, FxRobot sabe "leer", es suficiente hacer esto:

@Test
public void shouldClickOnDeletMarkerButtonWhenAnyMarkerAsBeenCreated() {
    bot.robotContext();
    bot.clickOn("#deleteMarkerButton");
    bot.clickOn("OK"); //Target text / Target Button / ...
}
1
KaluNight 13 nov. 2017 a las 11:48

2 respuestas

La mejor respuesta
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<BorderPane fx:controller="sample.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <Button text="Click me!" fx:id="button" onAction="#clickAction" BorderPane.alignment="CENTER"/>
</BorderPane>

Asignar un valor fx:id a un elemento, como se muestra en el código del control Button, crea una variable en el espacio de nombres del documento, a la que puede hacer referencia desde cualquier otra parte del código.

1
aKilleR 13 nov. 2017 a las 09:08

@KaluNight, su solución está bien, pero solo funciona para la localización en inglés.

Es mejor trabajar con identificadores. De hecho, Alert no define fx:id para sus propios botones, pero podemos hacerlo:

Button okButton = (Button) alert.getDialogPane().lookupButton(ButtonType.OK);
okButton.setId("my custom id");
1
Dmytro Maslenko 10 dic. 2017 a las 06:55