diff --git a/src/main/java/io/appium/java_client/CommandExecutionHelper.java b/src/main/java/io/appium/java_client/CommandExecutionHelper.java index 7cb011677..e64470b38 100644 --- a/src/main/java/io/appium/java_client/CommandExecutionHelper.java +++ b/src/main/java/io/appium/java_client/CommandExecutionHelper.java @@ -62,7 +62,7 @@ public static T executeScript(ExecutesMethod executesMethod, String scriptNa */ @Nullable public static T executeScript( - ExecutesMethod executesMethod, String scriptName, @Nullable Map args + ExecutesMethod executesMethod, String scriptName, @Nullable Map args ) { return execute(executesMethod, Map.entry(EXECUTE_SCRIPT, Map.of( "script", scriptName, diff --git a/src/main/java/io/appium/java_client/clipboard/HasClipboard.java b/src/main/java/io/appium/java_client/clipboard/HasClipboard.java index a6ae3327c..24384da13 100644 --- a/src/main/java/io/appium/java_client/clipboard/HasClipboard.java +++ b/src/main/java/io/appium/java_client/clipboard/HasClipboard.java @@ -16,8 +16,10 @@ package io.appium.java_client.clipboard; +import io.appium.java_client.CanRememberExtensionPresence; import io.appium.java_client.CommandExecutionHelper; import io.appium.java_client.ExecutesMethod; +import org.openqa.selenium.UnsupportedCommandException; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -27,20 +29,25 @@ import static io.appium.java_client.MobileCommand.SET_CLIPBOARD; import static java.util.Objects.requireNonNull; -public interface HasClipboard extends ExecutesMethod { +public interface HasClipboard extends ExecutesMethod, CanRememberExtensionPresence { /** * Set the content of device's clipboard. * - * @param contentType one of supported content types. + * @param contentType one of supported content types. * @param base64Content base64-encoded content to be set. */ default void setClipboard(ClipboardContentType contentType, byte[] base64Content) { - CommandExecutionHelper.execute(this, Map.entry(SET_CLIPBOARD, - Map.of( - "content", new String(requireNonNull(base64Content), StandardCharsets.UTF_8), - "contentType", contentType.name().toLowerCase() - ) - )); + final String extName = "mobile: setClipboard"; + var args = Map.of( + "content", new String(requireNonNull(base64Content), StandardCharsets.UTF_8), + "contentType", contentType.name().toLowerCase() + ); + try { + CommandExecutionHelper.executeScript(assertExtensionExists(extName), extName, args); + } catch (UnsupportedCommandException e) { + // TODO: Remove the fallback + CommandExecutionHelper.execute(this, Map.entry(SET_CLIPBOARD, args)); + } } /** @@ -50,8 +57,14 @@ default void setClipboard(ClipboardContentType contentType, byte[] base64Content * @return the actual content of the clipboard as base64-encoded string or an empty string if the clipboard is empty */ default String getClipboard(ClipboardContentType contentType) { - return CommandExecutionHelper.execute(this, Map.entry(GET_CLIPBOARD, - Map.of("contentType", contentType.name().toLowerCase()))); + final String extName = "mobile: getClipboard"; + var args = Map.of("contentType", contentType.name().toLowerCase()); + try { + return CommandExecutionHelper.executeScript(assertExtensionExists(extName), extName, args); + } catch (UnsupportedCommandException e) { + // TODO: Remove the fallback + return CommandExecutionHelper.execute(this, Map.entry(GET_CLIPBOARD, args)); + } } /**