I have a simple application where, if the user clicks the login button, a messages is printed to stdout. I'm trying to start using testfx, but when it simulates the button click, no message is printed. Is this expected behaviour, or is there something I'm missing?
DialogioController.java
:
package dialogio;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.control.Button;
public class DialogioController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private ListView<?> peopleList;
@FXML
private TabPane tabList;
@FXML
private TextField usernameField;
@FXML
private TextField passwordField;
@FXML
private TextField ipField;
@FXML
private Button loginButton;
@FXML
void login(MouseEvent e) {
System.out.println("Trying to login!");
}
@FXML
void initialize() {
assert peopleList != null : "fx:id=\"peopleList\" was not injected: check your FXML file 'Dialogio.fxml'.";
assert tabList != null : "fx:id=\"tabList\" was not injected: check your FXML file 'Dialogio.fxml'.";
assert usernameField != null : "fx:id=\"usernameField\" was not injected: check your FXML file 'Dialogio.fxml'.";
assert passwordField != null : "fx:id=\"passwordField\" was not injected: check your FXML file 'Dialogio.fxml'.";
assert ipField != null : "fx:id=\"ipField\" was not injected: check your FXML file 'Dialogio.fxml'.";
}
}
DialogioTest.java
:
import org.loadui.testfx.GuiTest;
import java.io.IOException;
import java.net.URL;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Parent;
import javafx.fxml.FXMLLoader;
import org.junit.Test;
import javafx.scene.control.Button;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.TextField;
public class DialogioTest extends GuiTest{
@Override
protected Parent getRootNode() {
Parent parent = null;
try {
parent = FXMLLoader.load(getClass().getResource("Dialogio.fxml"));
System.out.println("Loaded parent");
return parent;
} catch (IOException exc) {
exc.printStackTrace();
}
return parent;
}
@Test
public void clickLogin(){
Button loginButton = find("#loginButton");
click(loginButton);
}
}
Dialogio.java
:
package dialogio;
import javafx.application.Application;
import java.net.URL;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Parent;
import javafx.fxml.FXMLLoader;
public class Dialogio extends Application{
public static void main(String[] args){
launch();
}
public void start(Stage primaryStage){
primaryStage.setTitle("Dialogio");
Parent root = null;
String sceneFile = "Dialogio.fxml";
URL url = null;
try{
url = getClass().getClassLoader().getResource(sceneFile);
root = FXMLLoader.load(url);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
catch(Exception exc){
exc.printStackTrace();
}
}
}
Dialogio.fxml
:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.76-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="dialogio.DialogioController">
<children>
<GridPane layoutX="14.0" layoutY="66.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<ListView fx:id="peopleList" prefHeight="200.0" prefWidth="200.0" GridPane.rowSpan="3" />
<TabPane fx:id="tabList" prefHeight="134.0" prefWidth="353.0" tabClosingPolicy="UNAVAILABLE" GridPane.columnIndex="1" GridPane.columnSpan="3" GridPane.rowSpan="3">
<tabs>
<Tab text="Home">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<GridPane layoutY="94.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="usernameField" promptText="username" />
<TextField fx:id="passwordField" promptText="password" GridPane.rowIndex="1" />
<TextField fx:id="ipField" promptText="server ip" GridPane.rowIndex="2" />
<Button fx:id="loginButton" mnemonicParsing="false" onMouseClicked="#login" text="Login" textAlignment="CENTER" GridPane.rowIndex="3" />
</children>
</GridPane>
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</children>
</GridPane>
</children>
</AnchorPane>