diff --git a/src/main/java/io/appium/java_client/HasOnScreenKeyboard.java b/src/main/java/io/appium/java_client/HasOnScreenKeyboard.java new file mode 100644 index 000000000..7a9d6febb --- /dev/null +++ b/src/main/java/io/appium/java_client/HasOnScreenKeyboard.java @@ -0,0 +1,15 @@ +package io.appium.java_client; + +import static io.appium.java_client.MobileCommand.isKeyboardShownCommand; + +public interface HasOnScreenKeyboard extends ExecutesMethod { + + /** + * Check if the keyboard is displayed. + * + * @return true if keyboard is displayed. False otherwise + */ + default boolean isKeyboardShown() { + return CommandExecutionHelper.execute(this, isKeyboardShownCommand()); + } +} diff --git a/src/main/java/io/appium/java_client/MobileCommand.java b/src/main/java/io/appium/java_client/MobileCommand.java index 81f4315c8..37aedd7f6 100644 --- a/src/main/java/io/appium/java_client/MobileCommand.java +++ b/src/main/java/io/appium/java_client/MobileCommand.java @@ -515,4 +515,14 @@ public static ImmutableMap prepareArguments(String[] params, new String(img2Data, StandardCharsets.UTF_8), options.build()}; return new AbstractMap.SimpleEntry<>(COMPARE_IMAGES, prepareArguments(parameters, values)); } + + /** + * This method forms a {@link Map} of parameters for the checking of the keyboard state (is it shown or not). + * + * @return a key-value pair. The key is the command name. The value is a {@link Map} command arguments. + */ + public static Map.Entry> isKeyboardShownCommand() { + return new AbstractMap.SimpleEntry<>( + IS_KEYBOARD_SHOWN, ImmutableMap.of()); + } } diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 6ff2f7d54..a00a9d05c 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -23,6 +23,7 @@ import io.appium.java_client.AppiumDriver; import io.appium.java_client.CommandExecutionHelper; import io.appium.java_client.FindsByAndroidUIAutomator; +import io.appium.java_client.HasOnScreenKeyboard; import io.appium.java_client.LocksDevice; import io.appium.java_client.PressesKeyCode; import io.appium.java_client.android.connection.HasNetworkConnection; @@ -51,8 +52,8 @@ public class AndroidDriver extends AppiumDriver implements PressesKeyCode, HasNetworkConnection, PushesFiles, StartsActivity, - FindsByAndroidUIAutomator, LocksDevice, HasAndroidSettings, HasDeviceDetails, - HasSupportedPerformanceDataType, AuthenticatesByFinger, + FindsByAndroidUIAutomator, LocksDevice, HasAndroidSettings, HasAndroidDeviceDetails, + HasSupportedPerformanceDataType, AuthenticatesByFinger, HasOnScreenKeyboard, CanRecordScreen, SupportsSpecialEmulatorCommands, SupportsNetworkStateManagement, ListensToLogcatMessages, HasAndroidClipboard { diff --git a/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java b/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java index 2f6aa1d7e..75135be54 100644 --- a/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java +++ b/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java @@ -152,16 +152,6 @@ public class AndroidMobileCommandHelper extends MobileCommand { GET_SYSTEM_BARS, ImmutableMap.of()); } - /** - * This method forms a {@link Map} of parameters for the checking of the keyboard state (is it shown or not). - * - * @return a key-value pair. The key is the command name. The value is a {@link Map} command arguments. - */ - public static Map.Entry> isKeyboardShownCommand() { - return new AbstractMap.SimpleEntry<>( - IS_KEYBOARD_SHOWN, ImmutableMap.of()); - } - /** * This method forms a {@link java.util.Map} of parameters for the * finger print authentication invocation. diff --git a/src/main/java/io/appium/java_client/android/HasDeviceDetails.java b/src/main/java/io/appium/java_client/android/HasAndroidDeviceDetails.java similarity index 66% rename from src/main/java/io/appium/java_client/android/HasDeviceDetails.java rename to src/main/java/io/appium/java_client/android/HasAndroidDeviceDetails.java index 30b28cefe..03006185e 100644 --- a/src/main/java/io/appium/java_client/android/HasDeviceDetails.java +++ b/src/main/java/io/appium/java_client/android/HasAndroidDeviceDetails.java @@ -2,14 +2,14 @@ import static io.appium.java_client.android.AndroidMobileCommandHelper.getDisplayDensityCommand; import static io.appium.java_client.android.AndroidMobileCommandHelper.getSystemBarsCommand; -import static io.appium.java_client.android.AndroidMobileCommandHelper.isKeyboardShownCommand; import io.appium.java_client.CommandExecutionHelper; import io.appium.java_client.ExecutesMethod; import java.util.Map; -public interface HasDeviceDetails extends ExecutesMethod { +public interface HasAndroidDeviceDetails extends ExecutesMethod { + /* Retrieve the display density of the Android device. */ @@ -24,12 +24,4 @@ default Map getSystemBars() { return CommandExecutionHelper.execute(this, getSystemBarsCommand()); } - /** - * Check if the keyboard is displayed. - * - * @return true if keyboard is displayed. False otherwise - */ - default boolean isKeyboardShown() { - return CommandExecutionHelper.execute(this, isKeyboardShownCommand()); - } } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 9aedde7a2..99469233f 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -23,6 +23,7 @@ import io.appium.java_client.FindsByIosClassChain; import io.appium.java_client.FindsByIosNSPredicate; import io.appium.java_client.FindsByIosUIAutomation; +import io.appium.java_client.HasOnScreenKeyboard; import io.appium.java_client.HidesKeyboardWithKeyName; import io.appium.java_client.LocksDevice; import io.appium.java_client.remote.MobilePlatform; @@ -54,7 +55,7 @@ */ public class IOSDriver extends AppiumDriver - implements HidesKeyboardWithKeyName, ShakesDevice, HasIOSSettings, + implements HidesKeyboardWithKeyName, ShakesDevice, HasIOSSettings, HasOnScreenKeyboard, FindsByIosUIAutomation, LocksDevice, PerformsTouchID, FindsByIosNSPredicate, FindsByIosClassChain, PushesFiles, CanRecordScreen, HasIOSClipboard, ListensToSyslogMessages { diff --git a/src/test/java/io/appium/java_client/ios/IOSDriverTest.java b/src/test/java/io/appium/java_client/ios/IOSDriverTest.java index e777fd170..349e30210 100644 --- a/src/test/java/io/appium/java_client/ios/IOSDriverTest.java +++ b/src/test/java/io/appium/java_client/ios/IOSDriverTest.java @@ -73,4 +73,10 @@ public void getDeviceTimeTest() { byte[] data = driver.pullFile("Library/AddressBook/AddressBook.sqlitedb"); assert (data.length > 0); } + + @Test public void keyboardTest() { + MobileElement element = driver.findElementById("IntegerA"); + element.click(); + assertTrue(driver.isKeyboardShown()); + } }