package test.gui.robot; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Date; import javafx.application.Platform; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Node; import javafx.scene.image.WritableImage; import javax.imageio.ImageIO; import org.testfx.api.FxRobotInterface; /** * TestFX does not provide all the required routines to test GUIs. This trait defines routines for * taking screen shots. */ public interface FxRobotCaptureScreenshot extends FxRobotInterface { static Path createScreenshotFolder(final String folderName, final boolean withDate) { try { if(withDate) return Files.createDirectory(Paths.get(folderName + System.currentTimeMillis())); return Files.createDirectory(Paths.get(folderName)); }catch(IOException ex) { ex.printStackTrace(); return null; } } static Path createScreenshotFolder() { return createScreenshotFolder("screenshots-", true); } /** * Takes a screenshot using a file name. * @param dir * @param name * @param node * @return The screenshot */ default File captureScreenshot(final Path dir, final String name, final Node node) { File captureFile = new File(dir + File.separator + name + new Date().getTime() + ".png"); Platform.runLater(() -> { WritableImage img = node.snapshot(null, null); try { ImageIO.write(SwingFXUtils.fromFXImage(img, null), "png", captureFile); }catch(Exception e) { e.printStackTrace(); } }); return captureFile; } }