From 8a541627af997a54ee15aa2a97620a2d910c15fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez?= Date: Mon, 29 Apr 2024 22:45:12 +0200 Subject: [PATCH] [UI Testing] Implement PressEnter method (#22112) * Implement PressEnter method on appium * IsKeyboardShown not implemented on Windows * Updated test --- .../tests/UITests/Tests/Issues/Issue16386.cs | 6 ++---- .../AppiumAndroidVirtualKeyboardActions.cs | 13 +++++++++++++ .../Actions/AppiumIOSVirtualKeyboardActions.cs | 17 +++++++++++++++++ .../Actions/AppiumVirtualKeyboardActions.cs | 8 ++++++++ .../src/UITest.Appium/AppiumWindowsApp.cs | 1 + .../src/UITest.Appium/HelperExtensions.cs | 9 +++++++++ 6 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/Controls/tests/UITests/Tests/Issues/Issue16386.cs b/src/Controls/tests/UITests/Tests/Issues/Issue16386.cs index e666f7de6567..5bfc74901ce3 100644 --- a/src/Controls/tests/UITests/Tests/Issues/Issue16386.cs +++ b/src/Controls/tests/UITests/Tests/Issues/Issue16386.cs @@ -1,5 +1,4 @@ using NUnit.Framework; -using OpenQA.Selenium; using UITest.Appium; using UITest.Core; @@ -20,13 +19,12 @@ public void HittingEnterKeySendsDone() this.IgnoreIfPlatforms(new[] { TestDevice.Mac, - TestDevice.iOS, - TestDevice.Windows, + TestDevice.Windows }); App.WaitForElement("HardwareEnterKeyEntry"); App.Tap("HardwareEnterKeyEntry"); - App.SendKeys(66); + App.PressEnter(); App.WaitForElement("Success"); } } diff --git a/src/TestUtils/src/UITest.Appium/Actions/AppiumAndroidVirtualKeyboardActions.cs b/src/TestUtils/src/UITest.Appium/Actions/AppiumAndroidVirtualKeyboardActions.cs index 5b470912b4e8..42bc2bc11229 100644 --- a/src/TestUtils/src/UITest.Appium/Actions/AppiumAndroidVirtualKeyboardActions.cs +++ b/src/TestUtils/src/UITest.Appium/Actions/AppiumAndroidVirtualKeyboardActions.cs @@ -19,6 +19,19 @@ protected override CommandResponse DismissKeyboard(IDictionary p return CommandResponse.SuccessEmptyResponse; } + protected override CommandResponse PressEnter(IDictionary parameters) + { + if (_app.Driver is AndroidDriver android) + { + // 66 - KEYCODE_ENTER + // More information: https://developer.android.com/reference/android/view/KeyEvent.html + android.PressKeyCode(66); + return CommandResponse.SuccessEmptyResponse; + } + + return CommandResponse.FailedEmptyResponse; + } + protected override CommandResponse PressVolumeDown(IDictionary parameters) { if (_app.Driver is AndroidDriver android) diff --git a/src/TestUtils/src/UITest.Appium/Actions/AppiumIOSVirtualKeyboardActions.cs b/src/TestUtils/src/UITest.Appium/Actions/AppiumIOSVirtualKeyboardActions.cs index 70fe4d59cb93..adc117727a66 100644 --- a/src/TestUtils/src/UITest.Appium/Actions/AppiumIOSVirtualKeyboardActions.cs +++ b/src/TestUtils/src/UITest.Appium/Actions/AppiumIOSVirtualKeyboardActions.cs @@ -27,6 +27,23 @@ protected override CommandResponse DismissKeyboard(IDictionary p return CommandResponse.SuccessEmptyResponse; } + protected override CommandResponse PressEnter(IDictionary parameters) + { + try + { + if (_app.Driver.IsKeyboardShown()) + { + _app.Driver.SwitchTo().ActiveElement().SendKeys(Keys.Return); + } + } + catch (InvalidElementStateException) + { + return CommandResponse.FailedEmptyResponse; + } + + return CommandResponse.SuccessEmptyResponse; + } + protected override CommandResponse PressVolumeDown(IDictionary parameters) { try diff --git a/src/TestUtils/src/UITest.Appium/Actions/AppiumVirtualKeyboardActions.cs b/src/TestUtils/src/UITest.Appium/Actions/AppiumVirtualKeyboardActions.cs index 28c167638d3f..78b23dc9ca87 100644 --- a/src/TestUtils/src/UITest.Appium/Actions/AppiumVirtualKeyboardActions.cs +++ b/src/TestUtils/src/UITest.Appium/Actions/AppiumVirtualKeyboardActions.cs @@ -6,6 +6,7 @@ public class AppiumVirtualKeyboardActions : ICommandExecutionGroup { const string IsKeyboardShownCommand = "isKeyboardShown"; const string HideKeyboardCommand = "dismissKeyboard"; + const string PressEnterCommand = "pressEnter"; const string PressVolumeDownCommand = "pressVolumeDown"; const string PressVolumeUpCommand = "pressVolumeUp"; @@ -14,6 +15,7 @@ public class AppiumVirtualKeyboardActions : ICommandExecutionGroup { IsKeyboardShownCommand, HideKeyboardCommand, + PressEnterCommand, PressVolumeDownCommand, PressVolumeUpCommand, }; @@ -34,6 +36,7 @@ public CommandResponse Execute(string commandName, IDictionary p { IsKeyboardShownCommand => IsKeyboardShown(parameters), HideKeyboardCommand => DismissKeyboard(parameters), + PressEnterCommand => PressEnter(parameters), PressVolumeDownCommand => PressVolumeDown(parameters), PressVolumeUpCommand => PressVolumeUp(parameters), _ => CommandResponse.FailedEmptyResponse, @@ -50,6 +53,11 @@ protected virtual CommandResponse DismissKeyboard(IDictionary pa return CommandResponse.SuccessEmptyResponse; } + protected virtual CommandResponse PressEnter(IDictionary parameters) + { + return CommandResponse.SuccessEmptyResponse; + } + protected virtual CommandResponse PressVolumeDown(IDictionary parameters) { return CommandResponse.SuccessEmptyResponse; diff --git a/src/TestUtils/src/UITest.Appium/AppiumWindowsApp.cs b/src/TestUtils/src/UITest.Appium/AppiumWindowsApp.cs index a80c342188cc..0a7b53a06fc1 100644 --- a/src/TestUtils/src/UITest.Appium/AppiumWindowsApp.cs +++ b/src/TestUtils/src/UITest.Appium/AppiumWindowsApp.cs @@ -10,6 +10,7 @@ public class AppiumWindowsApp : AppiumApp, IWindowsApp public AppiumWindowsApp(Uri remoteAddress, IConfig config) : base(new WindowsDriver(remoteAddress, GetOptions(config)), config) { + } public override ApplicationState AppState diff --git a/src/TestUtils/src/UITest.Appium/HelperExtensions.cs b/src/TestUtils/src/UITest.Appium/HelperExtensions.cs index e99caac17f61..5c1a52307066 100644 --- a/src/TestUtils/src/UITest.Appium/HelperExtensions.cs +++ b/src/TestUtils/src/UITest.Appium/HelperExtensions.cs @@ -358,6 +358,15 @@ public static void PressVolumeDown(this IApp app) app.CommandExecutor.Execute("pressVolumeDown", ImmutableDictionary.Empty); } + /// + /// Presses the enter key in the app. + /// + /// Represents the main gateway to interact with an app. + public static void PressEnter(this IApp app) + { + app.CommandExecutor.Execute("pressEnter", ImmutableDictionary.Empty); + } + /// /// Performs a left to right swipe gesture on the screen. ///