如何使用 TestFX 使用 JavaFXML 测试场景的内容

How to use TestFX to test a scene's contents using JavaFXML

我想知道在使用 TestFX 时我应该如何测试 JavaFXML 中某些场景的内容。 示例包括这些 link: https://github.com/TestFX/TestFX/blob/master/subprojects/testfx-junit5/src/test/java/org/testfx/framework/junit5/ApplicationRuleTest.java

https://medium.com/@mglover/java-fx-testing-with-testfx-c3858b571320

第一个link在测试class中构建场景,后者使用存储在其自身class中的预定义场景。 当使用 JavaFXML 而不是 JavaFX 时,我应该如何做类似的事情,其中​​场景的结构是在 fxml 文件而不是 java 代码中定义的?

第一步是在您的 fxml 文件中提供您的组件 fx:id-s,然后是:

public class ChangeProfilesMenuControllerTest extends ApplicationTest {
    Pane mainroot;
    Stage mainstage;

    @Override
    public void start(Stage stage) throws IOException {
      mainroot = (Pane) FXMLLoader.load(Main.class.getResource("ChangeProfilesMenU.fxml"));
      mainstage = stage;
      stage.setScene(new Scene(mainroot));
      stage.show();
      stage.toFront();

   }

    @Before
    public void setUp() throws Exception{

    }

   @After
   public void tearDown () throws Exception {
     FxToolkit.hideStage();
     release(new KeyCode[]{});
     release(new MouseButton[]{});
   }

   @Test
   public void addingAndDeletingProfiles() {
      @SuppressWarnings("unchecked")
      ListView<String> listview = (ListView<String>) mainroot.lookup("#listview");
      clickOn("#textfield");
      write("This is a test");
      clickOn("#createnewprofile");
      ...
  }

如果你想访问你的控制器class实例:

    @Override
    public void start(Stage stage) throws IOException {
        this.mainstage = stage;
        FXMLLoader loader = new FXMLLoader(getClass().getResource("GameOn2.fxml"));
        this.mainroot = loader.load();
        this.controller = loader.getController();
        stage.setScene(new Scene(mainroot));
        stage.show();
        stage.toFront();
    }