1

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>
chenshuiluke
  • 319
  • 1
  • 16

1 Answers1

1

I only needed to add

test {
  testLogging.showStandardStreams = true
}

to my build.gradle

chenshuiluke
  • 319
  • 1
  • 16