From 5ba85c85f3f77f6b1b6fd38c41c18e6c03442ada Mon Sep 17 00:00:00 2001 From: Turo Soisenniemi Date: Fri, 3 Sep 2021 16:19:01 +0300 Subject: [PATCH] Support getting and setting clipboard content One could have application where there are for example hot keys or buttons that copies data to clipboard or from clipboard to application. These new keywords is made to support these cases. --- .../keywords/Keywords/KeyboardRobot.java | 45 +++++++++++++++++++ .../robotframework/acceptance/MiscTests.robot | 6 +++ 2 files changed, 51 insertions(+) diff --git a/src/main/java/javafxlibrary/keywords/Keywords/KeyboardRobot.java b/src/main/java/javafxlibrary/keywords/Keywords/KeyboardRobot.java index 3d37c93..33a94f5 100644 --- a/src/main/java/javafxlibrary/keywords/Keywords/KeyboardRobot.java +++ b/src/main/java/javafxlibrary/keywords/Keywords/KeyboardRobot.java @@ -29,7 +29,9 @@ import org.testfx.api.FxRobotInterface; import java.awt.*; import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.UnsupportedFlavorException; import java.util.Arrays; import java.util.concurrent.ExecutionException; @@ -252,4 +254,47 @@ public int setWriteSpeed(int milliseconds) { return oldSleepMillis; } + + @RobotKeyword("Reads clipboard content as text.") + public String getClipboardContent() { + if (TestFxAdapter.isHeadless) { + RobotLog.warn("Headless mode does not support clipboard."); + return ""; + } else { + try { + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); + String contents = (String) c.getData(DataFlavor.stringFlavor); + return contents; + } catch (UnsupportedFlavorException e) { + throw new JavaFXLibraryNonFatalException("Unable to get clipboard contents. Getting current content as string is not supported", e); + } catch (Exception e) { + if(e instanceof JavaFXLibraryNonFatalException) { + throw (JavaFXLibraryNonFatalException) e; + } + throw new JavaFXLibraryNonFatalException("Unable to get clipboard contents.", e); + } + } + } + + @RobotKeyword("Writes a given text characters to clipboard.\n\n" + + "``text`` is the text characters to write\n" + + "\nExample: \n" + + "| Set Clipboard Content | Clipboard value as string | \n") + @ArgumentNames({"text" }) + public void setClipboardContent(String text) { + if (TestFxAdapter.isHeadless) { + RobotLog.warn("Headless mode does not support clipboard."); + } else { + try { + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); + StringSelection testData = new StringSelection(text); + c.setContents(testData, testData); + } catch (Exception e) { + if(e instanceof JavaFXLibraryNonFatalException) { + throw e; + } + throw new JavaFXLibraryNonFatalException("Unable to set clipboard contents.", e); + } + } + } } \ No newline at end of file diff --git a/src/test/robotframework/acceptance/MiscTests.robot b/src/test/robotframework/acceptance/MiscTests.robot index bb50b21..44ec622 100644 --- a/src/test/robotframework/acceptance/MiscTests.robot +++ b/src/test/robotframework/acceptance/MiscTests.robot @@ -399,6 +399,12 @@ Library Keyword Timeout Should Happen ... Write Robot Framework [Teardown] Run Keywords Set Timeout ${old_timeout} AND Set Write Speed ${old_write_speed} +Clipboard Contents + [Tags] smoke + Set Clipboard Content text=JavaFXLibrary is a great tool! + ${READ_CONTENT}= Get Clipboard Content + Should Be Equal ${READ_CONTENT} JavaFXLibrary is a great tool! + *** Keywords *** Setup All Tests Import JavaFXLibrary