我有一个场景(scene1)有一个按钮。
当我点击按钮时,场景变为scene2。
Scene2也有一个按钮。当我点击它时,场景变成了场景1。
我如何使用JemmyFX或TestFX在JavaFX2中测试此行为?
下面是一个非常简单的应用程序示例,使用JemmyFX测试了两个不同的窗格。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.jemmy.fx.SceneDock;
import org.jemmy.fx.control.LabeledDock;
import org.jemmy.resources.StringComparePolicy;
public class TwoScenes extends Application {
StackPane root1 = new StackPane();
StackPane root2 = new StackPane();
Scene scene;
@Override
public void start(Stage primaryStage) {
Button btn1 = new Button("Goto Page 2");
btn1.setOnAction((e) -> {
scene.setRoot(root2);
});
root1.getChildren().add(btn1);
Button btn2 = new Button("Return to Page 1");
btn2.setOnAction((e) -> {
scene.setRoot(root1);
});
root2.getChildren().add(btn2);
scene = new Scene(root1, 300, 250);
primaryStage.setTitle("Two Scenes");
primaryStage.setScene(scene);
primaryStage.show();
// for simplicity of the example let's run test directly from an app
runTest();
}
private void runTest() {
// tests should be run in other thread
new Thread(() -> {
// find scene
SceneDock sd = new SceneDock();
// find button with specified text, and if it's found -- click it
new LabeledDock(sd.asParent(), "Goto Page 2", StringComparePolicy.EXACT).mouse().click();
// find button 2 and click it
new LabeledDock(sd.asParent(), "Return to Page 1", StringComparePolicy.EXACT).mouse().click();
// verify we returned to root1 (by checking first button is present)
new LabeledDock(sd.asParent(), "Goto Page 2", StringComparePolicy.EXACT)
}).start();
}
}
NB1:设置jemmyfx的描述如下:jemmyfx jar location
NB2:这里没有针对场景变化的特定验证,我们假设找到具有不同文本的按钮就足够验证了