From c1e80a7706066413eefa7d447152d5d98cebc927 Mon Sep 17 00:00:00 2001 From: Troy W Date: Wed, 8 Sep 2021 07:34:46 -0500 Subject: [PATCH 01/21] Add most fixes --- src/Appium.Net/Appium.Net.csproj | 5 +- .../Appium/Android/AndroidDriver.cs | 2 +- src/Appium.Net/Appium/AppiumCapabilities.cs | 20 +-- src/Appium.Net/Appium/AppiumCommand.cs | 146 +++++++++--------- src/Appium.Net/Appium/AppiumDriver.cs | 39 +---- src/Appium.Net/Appium/AppiumOptions.cs | 6 +- src/Appium.Net/Appium/AppiumWebElement.cs | 83 ++++------ src/Appium.Net/Appium/CachedElementFactory.cs | 6 +- src/Appium.Net/Appium/Mac/MacDriver.cs | 2 +- .../Appium/MultiAction/TouchAction.cs | 6 +- .../AppiumPageObjectMemberDecorator.cs | 2 +- .../PageObjects/WebDriverUnpackUtility.cs | 2 +- .../Appium/Service/AppiumCommandExecutor.cs | 7 +- .../Appium/Service/Options/OptionCollector.cs | 2 +- src/Appium.Net/Appium/Tizen/TizenDriver.cs | 2 +- .../Appium/Windows/WindowsDriver.cs | 2 +- src/Appium.Net/Appium/iOS/IOSDriver.cs | 2 +- .../Appium.Net.Integration.Tests.csproj | 5 +- ...ageObjectChecksAttributeMixOnNativeApp1.cs | 8 +- ...ageObjectChecksAttributeMixOnNativeApp2.cs | 8 +- ...jectChecksAttributesForNativeAndroidApp.cs | 8 +- ...geObjectChecksSelendroidModeOnNativeApp.cs | 8 +- ...bjectChecksSeleniumFindsByCompatibility.cs | 8 +- ...PageObjectChecksAttributeMixOnNativeApp.cs | 8 +- ...geObjectChecksAttributesForNativeIOSApp.cs | 8 +- test/integration/Windows/ClickElementTest.cs | 4 +- .../Windows/ImagesComparisonTest.cs | 2 +- 27 files changed, 169 insertions(+), 232 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index 67564fe2e..f22b48cb8 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -48,9 +48,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + diff --git a/src/Appium.Net/Appium/Android/AndroidDriver.cs b/src/Appium.Net/Appium/Android/AndroidDriver.cs index 01347f43b..cfd64b5c7 100644 --- a/src/Appium.Net/Appium/Android/AndroidDriver.cs +++ b/src/Appium.Net/Appium/Android/AndroidDriver.cs @@ -303,7 +303,7 @@ public IList GetPerformanceDataTypes() => public string EndTestCoverage(string intent, string path) => AndroidCommandExecutionHelper.EndTestCoverage(this, intent, path); - protected override RemoteWebElementFactory CreateElementFactory() => new AndroidElementFactory(this); + protected override WebElementFactory CreateElementFactory() => new AndroidElementFactory(this); public void SetSetting(string setting, object value) => AndroidCommandExecutionHelper.SetSetting(this, setting, value); diff --git a/src/Appium.Net/Appium/AppiumCapabilities.cs b/src/Appium.Net/Appium/AppiumCapabilities.cs index d979939c7..ff1516491 100644 --- a/src/Appium.Net/Appium/AppiumCapabilities.cs +++ b/src/Appium.Net/Appium/AppiumCapabilities.cs @@ -7,22 +7,16 @@ namespace OpenQA.Selenium.Appium /// /// Appium capabilities /// - public class AppiumCapabilities : DesiredCapabilities + public class AppiumCapabilities : DriverOptions { - /// - /// Get the capabilities back as a dictionary - /// - /// This method uses Reflection and should be removed once - /// AppiumOptions class is avalaible for each driver - /// - /// - public Dictionary ToDictionary() + public override void AddAdditionalCapability(string capabilityName, object capabilityValue) { - var bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; - FieldInfo capsField = typeof(DesiredCapabilities) - .GetField("capabilities", bindingFlags); + this.AddAdditionalOption(capabilityName, capabilityValue); + } - return capsField?.GetValue(this) as Dictionary; + public override ICapabilities ToCapabilities() + { + return GenerateDesiredCapabilities(true).AsReadOnly(); } } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/AppiumCommand.cs b/src/Appium.Net/Appium/AppiumCommand.cs index 16b271f0b..c2338d9ba 100644 --- a/src/Appium.Net/Appium/AppiumCommand.cs +++ b/src/Appium.Net/Appium/AppiumCommand.cs @@ -26,9 +26,9 @@ public class AppiumCommand { #region Context Commands - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.Contexts, "/session/{sessionId}/contexts"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetContext, "/session/{sessionId}/context"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetContext, "/session/{sessionId}/context"), + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.Contexts, "/session/{sessionId}/contexts"), + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetContext, "/session/{sessionId}/context"), + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetContext, "/session/{sessionId}/context"), #endregion Context Commands @@ -36,121 +36,121 @@ public class AppiumCommand #region Clipboard - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.GetClipboard, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.GetClipboard, "/session/{sessionId}/appium/device/get_clipboard"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetClipboard, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetClipboard, "/session/{sessionId}/appium/device/set_clipboard"), #endregion #region Device -> Network Commands - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ToggleAirplaneMode, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ToggleAirplaneMode, "/session/{sessionId}/appium/device/toggle_airplane_mode"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ToggleData, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ToggleData, "/session/{sessionId}/appium/device/toggle_data"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ToggleWiFi, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ToggleWiFi, "/session/{sessionId}/appium/device/toggle_wifi"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ToggleLocationServices, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ToggleLocationServices, "/session/{sessionId}/appium/device/toggle_location_services"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.GsmCall, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.GsmCall, "/session/{sessionId}/appium/device/gsm_call"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SendSms, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SendSms, "/session/{sessionId}/appium/device/send_sms"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetGsmSignalStrength, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetGsmSignalStrength, "/session/{sessionId}/appium/device/gsm_signal"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetGsmVoiceState, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetGsmVoiceState, "/session/{sessionId}/appium/device/gsm_voice"), #endregion #region Device System Commands - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.OpenNotifications, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.OpenNotifications, "/session/{sessionId}/appium/device/open_notifications"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.SystemTime, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.SystemTime, "/session/{sessionId}/appium/device/system_time"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.SystemBars, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.SystemBars, "/session/{sessionId}/appium/device/system_bars"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetDisplayDensity, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetDisplayDensity, "/session/{sessionId}/appium/device/display_density"), #endregion - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ShakeDevice, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ShakeDevice, "/session/{sessionId}/appium/device/shake"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.LockDevice, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.LockDevice, "/session/{sessionId}/appium/device/lock"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.IsLocked, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.IsLocked, "/session/{sessionId}/appium/device/is_locked"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.UnlockDevice, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.UnlockDevice, "/session/{sessionId}/appium/device/unlock"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.PressKeyCode, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.PressKeyCode, "/session/{sessionId}/appium/device/press_keycode"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.LongPressKeyCode, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.LongPressKeyCode, "/session/{sessionId}/appium/device/long_press_keycode"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.Rotate, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.Rotate, "/session/{sessionId}/appium/device/rotate"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetCurrentActivity, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetCurrentActivity, "/session/{sessionId}/appium/device/current_activity"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetCurrentPackage, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetCurrentPackage, "/session/{sessionId}/appium/device/current_package"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.InstallApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.InstallApp, "/session/{sessionId}/appium/device/install_app"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.RemoveApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.RemoveApp, "/session/{sessionId}/appium/device/remove_app"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ActivateApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ActivateApp, "/session/{sessionId}/appium/device/activate_app"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.TerminateApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.TerminateApp, "/session/{sessionId}/appium/device/terminate_app"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.IsAppInstalled, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.IsAppInstalled, "/session/{sessionId}/appium/device/app_installed"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.PushFile, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.PushFile, "/session/{sessionId}/appium/device/push_file"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.PullFile, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.PullFile, "/session/{sessionId}/appium/device/pull_file"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.PullFolder, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.PullFolder, "/session/{sessionId}/appium/device/pull_folder"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.GetPerformanceData, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.GetPerformanceData, "/session/{sessionId}/appium/getPerformanceData"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.GetPerformanceDataTypes, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.GetPerformanceDataTypes, "/session/{sessionId}/appium/performanceData/types"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.LaunchApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.LaunchApp, "/session/{sessionId}/appium/app/launch"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.CloseApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.CloseApp, "/session/{sessionId}/appium/app/close"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ResetApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ResetApp, "/session/{sessionId}/appium/app/reset"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.BackgroundApp, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.BackgroundApp, "/session/{sessionId}/appium/app/background"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.EndTestCoverage, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.EndTestCoverage, "/session/{sessionId}/appium/app/end_test_coverage"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.GetAppStrings, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.GetAppStrings, "/session/{sessionId}/appium/app/strings"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.GetAppState, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.GetAppState, "/session/{sessionId}/appium/device/app_state"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.HideKeyboard, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.HideKeyboard, "/session/{sessionId}/appium/device/hide_keyboard"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.IsKeyboardShown, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.IsKeyboardShown, "/session/{sessionId}/appium/device/is_keyboard_shown"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.StartActivity, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.StartActivity, "/session/{sessionId}/appium/device/start_activity"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetSettings, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetSettings, "/session/{sessionId}/appium/settings"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.UpdateSettings, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.UpdateSettings, "/session/{sessionId}/appium/settings"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.TouchID, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.TouchID, "/session/{sessionId}/appium/simulator/touch_id"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.FingerPrint, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.FingerPrint, "/session/{sessionId}/appium/device/finger_print"), #endregion Driver Commands #region Touch Commands - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.PerformMultiAction, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.PerformMultiAction, "/session/{sessionId}/touch/multi/perform"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.PerformTouchAction, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.PerformTouchAction, "/session/{sessionId}/touch/perform"), #endregion Touch Commands @@ -159,60 +159,60 @@ public class AppiumCommand #region W3C Actions - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.Actions, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.Actions, "/session/{sessionId}/actions"), #endregion W3C Actions #region JSON Wire Protocol Commands - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetOrientation, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetOrientation, "/session/{sessionId}/orientation"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetOrientation, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetOrientation, "/session/{sessionId}/orientation"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetConnectionType, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetConnectionType, "/session/{sessionId}/network_connection"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetConnectionType, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetConnectionType, "/session/{sessionId}/network_connection"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetLocation, "/session/{sessionId}/location"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetLocation, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetLocation, "/session/{sessionId}/location"), + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetLocation, "/session/{sessionId}/location"), #region Input Method (IME) - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetAvailableEngines, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetAvailableEngines, "/session/{sessionId}/ime/available_engines"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetActiveEngine, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetActiveEngine, "/session/{sessionId}/ime/active_engine"), - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.IsIMEActive, + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.IsIMEActive, "/session/{sessionId}/ime/activated"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ActivateEngine, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ActivateEngine, "/session/{sessionId}/ime/activate"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.DeactivateEngine, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.DeactivateEngine, "/session/{sessionId}/ime/deactivate"), #endregion Input Method (IME) #region Input value - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.ReplaceValue, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.ReplaceValue, "/session/{sessionId}/appium/element/{id}/replace_value"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.SetValue, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.SetValue, "/session/{sessionId}/appium/element/{id}/value"), #endregion Input value #region SeassionData - new AppiumCommand(CommandInfo.GetCommand, AppiumDriverCommand.GetSession, "/session/{sessionId}/"), + new AppiumCommand(HttpCommandInfo.GetCommand, AppiumDriverCommand.GetSession, "/session/{sessionId}/"), #endregion SeassionData #region Recording Screen - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.StartRecordingScreen, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.StartRecordingScreen, "/session/{sessionId}/appium/start_recording_screen"), - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.StopRecordingScreen, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.StopRecordingScreen, "/session/{sessionId}/appium/stop_recording_screen"), #endregion Recording Screen @@ -221,14 +221,14 @@ public class AppiumCommand #region Compare Images - new AppiumCommand(CommandInfo.PostCommand, AppiumDriverCommand.CompareImages, + new AppiumCommand(HttpCommandInfo.PostCommand, AppiumDriverCommand.CompareImages, "/session/{sessionId}/appium/compare_images"), #endregion - new AppiumCommand(CommandInfo.GetCommand, DriverCommand.GetAvailableLogTypes, + new AppiumCommand(HttpCommandInfo.GetCommand, DriverCommand.GetAvailableLogTypes, "session/{sessionId}/log/types"), - new AppiumCommand(CommandInfo.PostCommand, DriverCommand.GetLog, "session/{sessionId}/log") + new AppiumCommand(HttpCommandInfo.PostCommand, DriverCommand.GetLog, "session/{sessionId}/log") }; /// @@ -241,7 +241,7 @@ internal static CommandInfoRepository Merge(CommandInfoRepository repo) { foreach (AppiumCommand entry in CommandList) { - var commandInfo = new CommandInfo(entry.CommandType, entry.ApiEndpoint); + var commandInfo = new HttpCommandInfo(entry.CommandType, entry.ApiEndpoint); repo.TryAddCommand(entry.CommandName, commandInfo); } diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index bdcdb5853..6370d592e 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -30,8 +30,7 @@ namespace OpenQA.Selenium.Appium { - public abstract class AppiumDriver : RemoteWebDriver, IFindsById, IFindsByClassName, IFindsByName, - IFindsByTagName, IFindsByImage, IExecuteMethod, + public abstract class AppiumDriver : RemoteWebDriver, IFindsByImage, IExecuteMethod, IHasSessionDetails, IHasLocation, IFindByAccessibilityId, @@ -49,7 +48,7 @@ public AppiumDriver(ICommandExecutor commandExecutor, ICapabilities appiumOption : base(commandExecutor, appiumOptions) { AppiumCommand.Merge(commandExecutor.CommandInfoRepository); - ElementFactory = CreateElementFactory(); + // ElementFactory = CreateElementFactory(); } public AppiumDriver(ICapabilities appiumOptions) @@ -94,34 +93,6 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim #endregion Constructors - #region Overrides to fix "css selector" issue - - IWebElement IFindsByClassName.FindElementByClassName(string className) => - base.FindElement(MobileSelector.ClassName, className); - - ReadOnlyCollection IFindsByClassName.FindElementsByClassName(string className) => - base.FindElements(MobileSelector.ClassName, className); - - IWebElement IFindsById.FindElementById(string id) => - base.FindElement(MobileSelector.Id, id); - - ReadOnlyCollection IFindsById.FindElementsById(string id) => - base.FindElements(MobileSelector.Id, id); - - IWebElement IFindsByName.FindElementByName(string name) => - base.FindElement(MobileSelector.Name, name); - - ReadOnlyCollection IFindsByName.FindElementsByName(string name) => - base.FindElements(MobileSelector.Name, name); - - IWebElement IFindsByTagName.FindElementByTagName(string tagName) => - base.FindElement(MobileSelector.TagName, tagName); - - ReadOnlyCollection IFindsByTagName.FindElementsByTagName(string tagName) => - base.FindElements(MobileSelector.TagName, tagName); - - #endregion Overrides to fix "css selector" issue - #region Generic FindMethods public new W FindElement(By by) => @@ -505,7 +476,7 @@ public void PerformTouchAction(ITouchAction touchAction) #region W3C Actions - // Replace or hide the original RemoteWebElement.PerformActions base method so that it does not require + // Replace or hide the original WebElement.PerformActions base method so that it does not require // AppiumDriver to be fully compliant with W3CWireProtocol specification to execute W3C actions command. public new void PerformActions(IList actionSequenceList) { @@ -688,11 +659,11 @@ public SimilarityMatchingResult GetImagesSimilarity(string base64Image1, string #region Support methods - protected abstract RemoteWebElementFactory CreateElementFactory(); + protected abstract WebElementFactory CreateElementFactory(); internal static ICapabilities SetPlatformToCapabilities(DriverOptions dc, string desiredPlatform) { - dc.AddAdditionalCapability(MobileCapabilityType.PlatformName, desiredPlatform); + dc.AddAdditionalOption(MobileCapabilityType.PlatformName, desiredPlatform); return dc.ToCapabilities(); } diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index 432819a1a..c2638fff6 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -25,7 +25,8 @@ public override void AddAdditionalCapability(string capabilityName, object capab throw new ArgumentException("Capability name may not be null an empty string.", "capabilityName"); } - this.capabilities[capabilityName] = capabilityValue; + var writeable = this.GenerateDesiredCapabilities(true); + writeable.SetCapability(capabilityName, capabilityValue); } /// @@ -34,7 +35,8 @@ public override void AddAdditionalCapability(string capabilityName, object capab /// A desired capability public override ICapabilities ToCapabilities() { - return this.capabilities; + var writeable = this.GenerateDesiredCapabilities(true); + return writeable.AsReadOnly(); } public Dictionary ToDictionary() diff --git a/src/Appium.Net/Appium/AppiumWebElement.cs b/src/Appium.Net/Appium/AppiumWebElement.cs index f2fa2b485..011a3a952 100644 --- a/src/Appium.Net/Appium/AppiumWebElement.cs +++ b/src/Appium.Net/Appium/AppiumWebElement.cs @@ -40,9 +40,8 @@ namespace OpenQA.Selenium.Appium /// } /// /// - public abstract class AppiumWebElement : RemoteWebElement, - IMobileElement, IWebElementCached, - IFindsById, IFindsByClassName, IFindsByName, IFindsByTagName + public abstract class AppiumWebElement : WebElement, + IMobileElement, IWebElementCached { /// /// Initializes a new instance of the AppiumWebElement class. @@ -203,38 +202,8 @@ public void Rotate(Dictionary opts) #endregion - - #region FindMethods - #region Overrides to fix "css selector" issue - - IWebElement IFindsByClassName.FindElementByClassName(string className) => - base.FindElement(MobileSelector.ClassName, className); - - ReadOnlyCollection IFindsByClassName.FindElementsByClassName(string className) => - base.FindElements(MobileSelector.ClassName, className); - - IWebElement IFindsById.FindElementById(string id) => - base.FindElement(MobileSelector.Id, id); - - ReadOnlyCollection IFindsById.FindElementsById(string id) => - base.FindElements(MobileSelector.Id, id); - - IWebElement IFindsByName.FindElementByName(string name) => - base.FindElement(MobileSelector.Name, name); - - ReadOnlyCollection IFindsByName.FindElementsByName(string name) => - base.FindElements(MobileSelector.Name, name); - - IWebElement IFindsByTagName.FindElementByTagName(string tagName) => - base.FindElement(MobileSelector.TagName, tagName); - - ReadOnlyCollection IFindsByTagName.FindElementsByTagName(string tagName) => - base.FindElements(MobileSelector.TagName, tagName); - - #endregion Overrides to fix "css selector" issue - #region IFindByAccessibilityId Members public AppiumWebElement FindElementByAccessibilityId(string selector) => @@ -271,7 +240,7 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// CSS class name on the element /// first element found + public AppiumWebElement FindElementByClassName(string className) => (AppiumWebElement) base.FindElement(MobileSelector.ClassName, className); /// @@ -279,7 +248,7 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// CSS class name on the element /// ReadOnlyCollection of elements found FindElementsByClassName(string className) => + public ReadOnlyCollection FindElementsByClassName(string className) => ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); /// @@ -287,7 +256,7 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// ID of the element /// First element found - public new AppiumWebElement FindElementById(string id) => + public AppiumWebElement FindElementById(string id) => (AppiumWebElement) base.FindElement(MobileSelector.Id, id); /// @@ -295,7 +264,7 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// ID of the element /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsById(string id) => + public ReadOnlyCollection FindElementsById(string id) => ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); /// @@ -303,39 +272,39 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// The CSS selector to match /// First element found - public new AppiumWebElement FindElementByCssSelector(string cssSelector) => - (AppiumWebElement) base.FindElementByCssSelector(cssSelector); + public AppiumWebElement FindElementByCssSelector(string cssSelector) => + (AppiumWebElement) base.FindElement(By.CssSelector(cssSelector)); /// /// Finds a list of elements that match the CSS selector /// /// The CSS selector to match /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => - ConvertToExtendedWebElementCollection(base.FindElementsByCssSelector(cssSelector)); + public ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => + ConvertToExtendedWebElementCollection(base.FindElements(By.CssSelector(cssSelector))); /// /// Finds the first of elements that match the link text supplied /// /// Link text of element /// First element found - public new AppiumWebElement FindElementByLinkText(string linkText) => - (AppiumWebElement) base.FindElementByLinkText(linkText); + public AppiumWebElement FindElementByLinkText(string linkText) => + (AppiumWebElement) base.FindElement(By.LinkText(linkText)); /// /// Finds a list of elements that match the link text supplied /// /// Link text of element /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsByLinkText(string linkText) => - ConvertToExtendedWebElementCollection(base.FindElementsByLinkText(linkText)); + public ReadOnlyCollection FindElementsByLinkText(string linkText) => + ConvertToExtendedWebElementCollection(base.FindElements(By.LinkText(linkText))); /// /// Finds the first of elements that match the name supplied /// /// Name of the element on the page /// First element found - public new AppiumWebElement FindElementByName(string name) => + public AppiumWebElement FindElementByName(string name) => (AppiumWebElement) base.FindElement(MobileSelector.Name, name); /// @@ -343,7 +312,7 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// Name of the element on the page /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsByName(string name) => + public ReadOnlyCollection FindElementsByName(string name) => ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); /// @@ -351,23 +320,23 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// Part of the link text /// First element found - public new AppiumWebElement FindElementByPartialLinkText(string partialLinkText) => - (AppiumWebElement) base.FindElementByPartialLinkText(partialLinkText); + public AppiumWebElement FindElementByPartialLinkText(string partialLinkText) => + (AppiumWebElement) base.FindElement(By.PartialLinkText(partialLinkText)); /// /// Finds a list of elements that match the part of the link text supplied /// /// Part of the link text /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => - ConvertToExtendedWebElementCollection(base.FindElementsByPartialLinkText(partialLinkText)); + public ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => + ConvertToExtendedWebElementCollection(base.FindElements(By.PartialLinkText(partialLinkText))); /// /// Finds the first of elements that match the DOM Tag supplied /// /// DOM tag name of the element being searched /// First element found - public new AppiumWebElement FindElementByTagName(string tagName) => + public AppiumWebElement FindElementByTagName(string tagName) => (AppiumWebElement) base.FindElement(MobileSelector.TagName, tagName); /// @@ -375,7 +344,7 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// DOM tag name of the element being searched /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsByTagName(string tagName) => + public ReadOnlyCollection FindElementsByTagName(string tagName) => ConvertToExtendedWebElementCollection(FindElements(MobileSelector.TagName, tagName)); /// @@ -383,16 +352,16 @@ public IReadOnlyCollection FindElementsByAccessibilityId(strin /// /// xpath to the element /// First element found - public new AppiumWebElement FindElementByXPath(string xpath) => - (AppiumWebElement) base.FindElementByXPath(xpath); + public AppiumWebElement FindElementByXPath(string xpath) => + (AppiumWebElement) base.FindElement(By.XPath(xpath)); /// /// Finds a list of elements that match the XPath supplied /// /// xpath to the element /// ReadOnlyCollection of elements found - public new ReadOnlyCollection FindElementsByXPath(string xpath) => - ConvertToExtendedWebElementCollection(base.FindElementsByXPath(xpath)); + public ReadOnlyCollection FindElementsByXPath(string xpath) => + ConvertToExtendedWebElementCollection(base.FindElements(By.XPath(xpath))); #endregion diff --git a/src/Appium.Net/Appium/CachedElementFactory.cs b/src/Appium.Net/Appium/CachedElementFactory.cs index 6ed463808..750b215c7 100644 --- a/src/Appium.Net/Appium/CachedElementFactory.cs +++ b/src/Appium.Net/Appium/CachedElementFactory.cs @@ -5,7 +5,7 @@ namespace OpenQA.Selenium.Appium { - public abstract class CachedElementFactory : RemoteWebElementFactory where T : RemoteWebElement, IWebElementCached + public abstract class CachedElementFactory : WebElementFactory where T : WebElement, IWebElementCached { public CachedElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) { @@ -22,10 +22,10 @@ public virtual bool CacheElementAttributes } } - public override RemoteWebElement CreateElement(Dictionary elementDictionary) + public override WebElement CreateElement(Dictionary elementDictionary) { string elementId = GetElementId(elementDictionary); - T cachedElement = CreateCachedElement(ParentDriver, elementId); + T cachedElement = CreateCachedElement(ParentDriver as RemoteWebDriver, elementId); if (CacheElementAttributes) { cachedElement.SetCacheValues(elementDictionary); diff --git a/src/Appium.Net/Appium/Mac/MacDriver.cs b/src/Appium.Net/Appium/Mac/MacDriver.cs index c56d64b7b..8d389b793 100644 --- a/src/Appium.Net/Appium/Mac/MacDriver.cs +++ b/src/Appium.Net/Appium/Mac/MacDriver.cs @@ -116,6 +116,6 @@ public MacDriver(AppiumLocalService service, AppiumOptions AppiumOptions, TimeSp } - protected override RemoteWebElementFactory CreateElementFactory() => new MacElementFactory(this); + protected override WebElementFactory CreateElementFactory() => new MacElementFactory(this); } } diff --git a/src/Appium.Net/Appium/MultiAction/TouchAction.cs b/src/Appium.Net/Appium/MultiAction/TouchAction.cs index e0479107e..dbf8cc827 100644 --- a/src/Appium.Net/Appium/MultiAction/TouchAction.cs +++ b/src/Appium.Net/Appium/MultiAction/TouchAction.cs @@ -28,9 +28,9 @@ internal class Step private string GetIdForElement(IWebElement el) { - RemoteWebElement remoteWebElement = el as RemoteWebElement; - if (remoteWebElement != null) - return (string) typeof(OpenQA.Selenium.Remote.RemoteWebElement).GetProperty("Id", + WebElement WebElement = el as WebElement; + if (WebElement != null) + return (string) typeof(WebElement).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(el, null); diff --git a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs index f656dcd63..fd738e130 100644 --- a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs +++ b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs @@ -44,7 +44,7 @@ internal static List ListOfAvailableElementTypes { listAvailableElementTypes = new List(); listAvailableElementTypes.Add(typeof(IWebElement)); - listAvailableElementTypes.Add(typeof(RemoteWebElement)); + listAvailableElementTypes.Add(typeof(WebElement)); listAvailableElementTypes.Add(typeof(AppiumWebElement)); listAvailableElementTypes.Add(typeof(AndroidElement)); listAvailableElementTypes.Add(typeof(IOSElement)); diff --git a/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs b/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs index 37fccd1e1..6190d6935 100644 --- a/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs +++ b/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs @@ -30,7 +30,7 @@ internal static IWebDriver UnpackWebdriver(ISearchContext context) // Search context it is not only Webdriver. Webelement is search context // too. - // RemoteWebElement and AppiumWebElement implement IWrapsDriver + // WebElement and AppiumWebElement implement IWrapsDriver if ((context as IWrapsDriver) != null) return UnpackWebdriver(((IWrapsDriver) context) .WrappedDriver); diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index d148379ca..8178f3842 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -60,8 +60,6 @@ internal AppiumCommandExecutor(AppiumLocalService service, TimeSpan timeForTheSe Service = service; } - public CommandInfoRepository CommandInfoRepository => RealExecutor.CommandInfoRepository; - public Response Execute(Command commandToExecute) { Response result = null; @@ -125,5 +123,10 @@ protected void Dispose(bool disposing) isDisposed = true; } } + + public bool TryAddCommand(string commandName, CommandInfo info) + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/Service/Options/OptionCollector.cs b/src/Appium.Net/Appium/Service/Options/OptionCollector.cs index 29c0abf27..5f53822bd 100644 --- a/src/Appium.Net/Appium/Service/Options/OptionCollector.cs +++ b/src/Appium.Net/Appium/Service/Options/OptionCollector.cs @@ -68,7 +68,7 @@ public OptionCollector AddCapabilities(AppiumOptions options) foreach (var item in result) { - this.options.AddAdditionalCapability(item.Key, item.Value); + this.options.AddAdditionalOption(item.Key, item.Value); } } diff --git a/src/Appium.Net/Appium/Tizen/TizenDriver.cs b/src/Appium.Net/Appium/Tizen/TizenDriver.cs index 009f2efcc..f57059658 100644 --- a/src/Appium.Net/Appium/Tizen/TizenDriver.cs +++ b/src/Appium.Net/Appium/Tizen/TizenDriver.cs @@ -138,6 +138,6 @@ public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) = #endregion IFindByTizenUIAutomation Members - protected override RemoteWebElementFactory CreateElementFactory() => new TizenElementFactory(this); + protected override WebElementFactory CreateElementFactory() => new TizenElementFactory(this); } } diff --git a/src/Appium.Net/Appium/Windows/WindowsDriver.cs b/src/Appium.Net/Appium/Windows/WindowsDriver.cs index a2b5a0fbe..bec10bab3 100644 --- a/src/Appium.Net/Appium/Windows/WindowsDriver.cs +++ b/src/Appium.Net/Appium/Windows/WindowsDriver.cs @@ -154,7 +154,7 @@ public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) public void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); - protected override RemoteWebElementFactory CreateElementFactory() => new WindowsElementFactory(this); + protected override WebElementFactory CreateElementFactory() => new WindowsElementFactory(this); public void PressKeyCode(KeyEvent keyEvent) => throw new NotImplementedException(); diff --git a/src/Appium.Net/Appium/iOS/IOSDriver.cs b/src/Appium.Net/Appium/iOS/IOSDriver.cs index 662a2794a..e655f55c8 100644 --- a/src/Appium.Net/Appium/iOS/IOSDriver.cs +++ b/src/Appium.Net/Appium/iOS/IOSDriver.cs @@ -154,7 +154,7 @@ public IReadOnlyCollection FindElementsByIosNsPredicate(string selector) => public void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); - protected override RemoteWebElementFactory CreateElementFactory() => new IOSElementFactory(this); + protected override WebElementFactory CreateElementFactory() => new IOSElementFactory(this); /// /// Locks the device. diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index 6ed22301d..54c3c26fb 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -11,11 +11,10 @@ - - - + + diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs index 2af44d160..6a2abf926 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs @@ -114,7 +114,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement _matchedToAllLocatorsElement; @@ -123,7 +123,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList _matchedToAllLocatorsElements; @@ -135,7 +135,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } @@ -146,7 +146,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList TestMatchedToAllLocatorsElementsProperty { set; get; } diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs index dba2c5310..5fb4333a7 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs @@ -146,7 +146,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[2]", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement _matchedToAllLocatorsElement; @@ -159,7 +159,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[2]", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList _matchedToAllLocatorsElements; @@ -175,7 +175,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[2]", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } @@ -189,7 +189,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[2]", Priority = 3)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList TestMatchedToAllLocatorsElementsProperty { set; get; } diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs index be14a70f4..a52c705bb 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs @@ -102,13 +102,13 @@ private IList TestFoundByChainedSearchElementsProperty [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList _matchedToAllLocatorsElements; @@ -121,7 +121,7 @@ private IList TestFoundByChainedSearchElementsProperty [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement TestMatchedToAllLocatorsElementProperty { @@ -132,7 +132,7 @@ private IMobileElement TestMatchedToAllLocatorsElementProperty [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList TestMatchedToAllLocatorsElementsProperty { diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs index e2da8514b..46f79c109 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs @@ -92,14 +92,14 @@ public class AndroidPageObjectChecksSelendroidModeOnNativeApp [MobileFindsByAll(Selendroid = true)] [FindsBySelendroid(LinkText = "Press to throw unhandled exception", Priority = 1)] //[FindsByAndroidUIAutomator(ID = "waitingButtonTest", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(Selendroid = true)] [FindsBySelendroid(LinkText = "Press to throw unhandled exception", Priority = 1)] //[FindsByAndroidUIAutomator(ID = "waitingButtonTest", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList _matchedToAllLocatorsElements; @@ -108,14 +108,14 @@ public class AndroidPageObjectChecksSelendroidModeOnNativeApp [MobileFindsByAll(Selendroid = true)] [FindsBySelendroid(LinkText = "Press to throw unhandled exception", Priority = 1)] //[FindsByAndroidUIAutomator(ID = "waitingButtonTest", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } [MobileFindsByAll(Selendroid = true)] [FindsBySelendroid(LinkText = "Press to throw unhandled exception", Priority = 1)] //[FindsByAndroidUIAutomator(ID = "waitingButtonTest", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList TestMatchedToAllLocatorsElementsProperty { set; get; } diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs index 6f20c3542..835e07e6c 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs @@ -83,13 +83,13 @@ [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList _matchedToAllLocatorsElements; @@ -97,14 +97,14 @@ [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out private IList TestMatchedToAllLocatorsElementsProperty { set; get; } diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs index 5b9a064b2..7b6be887e 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs @@ -83,7 +83,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] @@ -94,7 +94,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] @@ -107,7 +107,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] @@ -119,7 +119,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] [FindsBy(How = How.XPath, Using = ".//fakeTag", Priority = 3)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs index b658e8ecc..fea7aad3f 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs @@ -43,12 +43,12 @@ public class IosPageObjectChecksAttributesForNativeIosApp private IList MultipleFindByElementsProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out private IList _matchedToAllLocatorsElements; @@ -56,13 +56,13 @@ public class IosPageObjectChecksAttributesForNativeIosApp [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] - //Equals method of RemoteWebElement is not consistent for mobile apps + //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out private IList TestMatchedToAllLocatorsElementsProperty { set; get; } diff --git a/test/integration/Windows/ClickElementTest.cs b/test/integration/Windows/ClickElementTest.cs index 7e6a8f852..058b28565 100644 --- a/test/integration/Windows/ClickElementTest.cs +++ b/test/integration/Windows/ClickElementTest.cs @@ -23,7 +23,7 @@ namespace Appium.Net.Integration.Tests.Windows public class ClickElementTest { private WindowsDriver _calculatorSession; - protected static RemoteWebElement CalculatorResult; + protected static WebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() @@ -40,7 +40,7 @@ public void BeforeAll() _calculatorSession.FindElementByName("Clear").Click(); _calculatorSession.FindElementByName("Seven").Click(); - CalculatorResult = _calculatorSession.FindElementByName("Display is 7") as RemoteWebElement; + CalculatorResult = _calculatorSession.FindElementByName("Display is 7") as WebElement; Assert.IsNotNull(CalculatorResult); } diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index e5779cc78..aa8d984ab 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -10,7 +10,7 @@ namespace Appium.Net.Integration.Tests.Windows public class ImagesComparisonTest { private WindowsDriver _calculatorSession; - protected static RemoteWebElement CalculatorResult; + protected static WebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() From 6e0af666eb94c6f394324df9b2713d5b34536c03 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Wed, 8 Sep 2021 16:29:54 -0500 Subject: [PATCH 02/21] Get proect to build --- src/Appium.Net/Appium.Net.csproj | 1 + src/Appium.Net/Appium.Net.xml | 2 +- src/Appium.Net/Appium/AppiumCommand.cs | 3 ++- src/Appium.Net/Appium/AppiumDriver.cs | 10 ++++----- src/Appium.Net/Appium/AppiumOptions.cs | 20 ++++++++++++----- .../Appium/PageObjects/ByFactory.cs | 1 - .../Appium/Service/AppiumCommandExecutor.cs | 8 ++++--- .../Appium/Service/Options/OptionCollector.cs | 10 ++++----- test/integration/Android/ClipboardTest.cs | 2 +- .../Android/Device/AuthenticationTest.cs | 2 +- test/integration/Android/WebviewTest.cs | 4 ++-- test/integration/IOS/ClipboardTest.cs | 2 +- test/integration/IOS/SearchingTest.cs | 8 +++---- test/integration/IOS/TouchActionTest.cs | 8 +++---- test/integration/IOS/WebviewTest.cs | 8 +++---- test/integration/Mac/AlertTest.cs | 2 +- .../IOS/NativeAppAttributesTest.cs | 8 +++---- .../Windows/WindowsAlarmAppTest.cs | 6 ++--- .../PageObjects/WindowsAlarmApp.cs | 2 +- .../AppiumLocalServerLaunchingTest.cs | 20 ++++++++--------- .../ServerTests/StartingAppLocallyTest.cs | 8 +++---- test/integration/Windows/ClickElementTest.cs | 8 +++---- .../Windows/ImagesComparisonTest.cs | 8 +++---- .../Windows/MultiSelectControlTest.cs | 12 +++++----- test/integration/Windows/PentTest.cs | 6 ++--- test/integration/Windows/StickyNotesTest.cs | 16 +++++++------- test/integration/helpers/Caps.cs | 22 +++++++++---------- 27 files changed, 110 insertions(+), 97 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index f22b48cb8..bba1977b9 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -48,6 +48,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/Appium.Net/Appium.Net.xml b/src/Appium.Net/Appium.Net.xml index a42393a2b..00827c3db 100644 --- a/src/Appium.Net/Appium.Net.xml +++ b/src/Appium.Net/Appium.Net.xml @@ -3317,7 +3317,7 @@ The dictionary of capabilities - + Add new capabilities diff --git a/src/Appium.Net/Appium/AppiumCommand.cs b/src/Appium.Net/Appium/AppiumCommand.cs index c2338d9ba..575980b52 100644 --- a/src/Appium.Net/Appium/AppiumCommand.cs +++ b/src/Appium.Net/Appium/AppiumCommand.cs @@ -12,6 +12,7 @@ //See the License for the specific language governing permissions and //limitations under the License. +using OpenQA.Selenium.Appium.Service; using OpenQA.Selenium.Remote; using System.Collections.Generic; @@ -237,7 +238,7 @@ public class AppiumCommand /// /// is a CommandInfoRepository instance which is used /// The given CommandInfoRepository instance with added Appium-specific commands - internal static CommandInfoRepository Merge(CommandInfoRepository repo) + internal static ICommandExecutor Merge(ICommandExecutor repo) { foreach (AppiumCommand entry in CommandList) { diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index 6370d592e..98dda29a0 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -16,7 +16,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Internal; using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Remote; using System; @@ -30,7 +29,7 @@ namespace OpenQA.Selenium.Appium { - public abstract class AppiumDriver : RemoteWebDriver, IFindsByImage, IExecuteMethod, + public abstract class AppiumDriver : RemoteWebDriver, IFindsByImage, IHasSessionDetails, IHasLocation, IFindByAccessibilityId, @@ -47,8 +46,9 @@ public abstract class AppiumDriver : RemoteWebDriver, IFindsByImage, IExec public AppiumDriver(ICommandExecutor commandExecutor, ICapabilities appiumOptions) : base(commandExecutor, appiumOptions) { - AppiumCommand.Merge(commandExecutor.CommandInfoRepository); - // ElementFactory = CreateElementFactory(); + // TODO: Laolu - Suspect this will an issue + AppiumCommand.Merge(commandExecutor); + //ElementFactory = CreateElementFactory(); } public AppiumDriver(ICapabilities appiumOptions) @@ -663,7 +663,7 @@ public SimilarityMatchingResult GetImagesSimilarity(string base64Image1, string internal static ICapabilities SetPlatformToCapabilities(DriverOptions dc, string desiredPlatform) { - dc.AddAdditionalOption(MobileCapabilityType.PlatformName, desiredPlatform); + dc.PlatformName = desiredPlatform; return dc.ToCapabilities(); } diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index c2638fff6..40c7d1a33 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -1,5 +1,8 @@ -using System; +using Newtonsoft.Json; +using OpenQA.Selenium.Remote; +using System; using System.Collections.Generic; +using System.Reflection; namespace OpenQA.Selenium.Appium { @@ -35,13 +38,20 @@ public override void AddAdditionalCapability(string capabilityName, object capab /// A desired capability public override ICapabilities ToCapabilities() { - var writeable = this.GenerateDesiredCapabilities(true); - return writeable.AsReadOnly(); + RemoteSessionSettings remote = new RemoteSessionSettings(); + + foreach(var keyVal in this.ToDictionary()) + { + remote.AddMetadataSetting(keyVal.Key, keyVal.Value); + } + + return remote; } - public Dictionary ToDictionary() + public IDictionary ToDictionary() { - return this.capabilities.ToDictionary(); + var writeable = this.GenerateDesiredCapabilities(true); + return (writeable.AsReadOnly() as ReadOnlyDesiredCapabilities).ToDictionary(); } } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/PageObjects/ByFactory.cs b/src/Appium.Net/Appium/PageObjects/ByFactory.cs index f524cada6..e6e2a2299 100644 --- a/src/Appium.Net/Appium/PageObjects/ByFactory.cs +++ b/src/Appium.Net/Appium/PageObjects/ByFactory.cs @@ -18,7 +18,6 @@ using OpenQA.Selenium.Appium.PageObjects.Attributes; using OpenQA.Selenium.Appium.PageObjects.Attributes.Abstract; using OpenQA.Selenium.Appium.Windows; -using OpenQA.Selenium.Remote; using SeleniumExtras.PageObjects; using System; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index 8178f3842..15592f8d5 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -103,9 +103,11 @@ private ICommandExecutor ModifyNewSessionHttpRequestHeader(ICommandExecutor comm { if (commandExecutor == null) throw new ArgumentNullException(nameof(commandExecutor)); var modifiedCommandExecutor = commandExecutor as HttpCommandExecutor; - if (modifiedCommandExecutor != null) - modifiedCommandExecutor.SendingRemoteHttpRequest += (sender, args) => - args.Request.Headers.Add(IdempotencyHeader, Guid.NewGuid().ToString()); + + // TODO: Laolu, this may be pretty big breaking change for us + //if (modifiedCommandExecutor != null) + // modifiedCommandExecutor.SendingRemoteHttpRequest += (sender, args) => + // args.Request.Headers.Add(IdempotencyHeader, Guid.NewGuid().ToString()); return modifiedCommandExecutor; } diff --git a/src/Appium.Net/Appium/Service/Options/OptionCollector.cs b/src/Appium.Net/Appium/Service/Options/OptionCollector.cs index 5f53822bd..41fcd247b 100644 --- a/src/Appium.Net/Appium/Service/Options/OptionCollector.cs +++ b/src/Appium.Net/Appium/Service/Options/OptionCollector.cs @@ -48,9 +48,9 @@ public OptionCollector AddCapabilities(AppiumOptions options) } else { - Dictionary originalDictionary = this.options.ToDictionary(); - Dictionary givenDictionary = options.ToDictionary(); - Dictionary result = new Dictionary(originalDictionary); + IDictionary originalDictionary = this.options.ToDictionary(); + IDictionary givenDictionary = options.ToDictionary(); + IDictionary result = new Dictionary(originalDictionary); foreach (var item in givenDictionary) { @@ -81,7 +81,7 @@ private string ParseCapabilitiesIfWindows() if (options != null) { - Dictionary capabilitiesDictionary = options.ToDictionary(); + IDictionary capabilitiesDictionary = options.ToDictionary(); foreach (var item in capabilitiesDictionary) { @@ -132,7 +132,7 @@ private string ParseCapabilitiesIfUNIX() if (options != null) { - Dictionary capabilitiesDictionary = options.ToDictionary(); + IDictionary capabilitiesDictionary = options.ToDictionary(); foreach (var item in capabilitiesDictionary) { diff --git a/test/integration/Android/ClipboardTest.cs b/test/integration/Android/ClipboardTest.cs index 300709432..1075c115c 100644 --- a/test/integration/Android/ClipboardTest.cs +++ b/test/integration/Android/ClipboardTest.cs @@ -21,7 +21,7 @@ public void BeforeAll() var capabilities = Env.ServerIsRemote() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.AddAdditionalCapability(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/Android/Device/AuthenticationTest.cs b/test/integration/Android/Device/AuthenticationTest.cs index 0f8bb7dc0..9831db3f4 100644 --- a/test/integration/Android/Device/AuthenticationTest.cs +++ b/test/integration/Android/Device/AuthenticationTest.cs @@ -14,7 +14,7 @@ public class AuthenticationTest public void BeforeAll() { var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.AddAdditionalCapability(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/Android/WebviewTest.cs b/test/integration/Android/WebviewTest.cs index 04c50db3c..7193eede4 100644 --- a/test/integration/Android/WebviewTest.cs +++ b/test/integration/Android/WebviewTest.cs @@ -20,8 +20,8 @@ public void BeforeAll() var capabilities = Env.ServerIsRemote() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); - capabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppPackage, "io.selendroid.testapp"); - capabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppActivity, ".WebViewActivity"); + capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.selendroid.testapp"); + capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".WebViewActivity"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/IOS/ClipboardTest.cs b/test/integration/IOS/ClipboardTest.cs index 1f582a7fc..91ac8b9b8 100644 --- a/test/integration/IOS/ClipboardTest.cs +++ b/test/integration/IOS/ClipboardTest.cs @@ -22,7 +22,7 @@ public class ClipboardTest public void Setup() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); - capabilities.AddAdditionalCapability(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/IOS/SearchingTest.cs b/test/integration/IOS/SearchingTest.cs index 7a1bd1156..034aaf6b5 100644 --- a/test/integration/IOS/SearchingTest.cs +++ b/test/integration/IOS/SearchingTest.cs @@ -16,10 +16,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalCapability("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalCapability("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalCapability("name", "ios - simple"); - capabilities.AddAdditionalCapability("tags", new[] {"sample"}); + capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalOption("name", "ios - simple"); + capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/IOS/TouchActionTest.cs b/test/integration/IOS/TouchActionTest.cs index 82dd65fb6..478234f02 100644 --- a/test/integration/IOS/TouchActionTest.cs +++ b/test/integration/IOS/TouchActionTest.cs @@ -19,10 +19,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalCapability("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalCapability("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalCapability("name", "ios - actions"); - capabilities.AddAdditionalCapability("tags", new[] {"sample"}); + capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalOption("name", "ios - actions"); + capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/IOS/WebviewTest.cs b/test/integration/IOS/WebviewTest.cs index d47a306d2..851469972 100644 --- a/test/integration/IOS/WebviewTest.cs +++ b/test/integration/IOS/WebviewTest.cs @@ -18,10 +18,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosWebviewApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalCapability("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalCapability("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalCapability("name", "ios - webview"); - capabilities.AddAdditionalCapability("tags", new[] {"sample"}); + capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalOption("name", "ios - webview"); + capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/Mac/AlertTest.cs b/test/integration/Mac/AlertTest.cs index 91c4f1caa..c4c5b3dc1 100644 --- a/test/integration/Mac/AlertTest.cs +++ b/test/integration/Mac/AlertTest.cs @@ -14,7 +14,7 @@ public class FindElementTest public void BeforeAll() { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalCapability(MobileCapabilityType.DeviceName, "Mac"); // Requires until Appium 1.15.1 + capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Mac"); // Requires until Appium 1.15.1 var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new MacDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs index 39caa357a..852ea0dc1 100644 --- a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs +++ b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs @@ -21,10 +21,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalCapability("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalCapability("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalCapability("name", "ios - actions"); - capabilities.AddAdditionalCapability("tags", new[] {"sample"}); + capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalOption("name", "ios - actions"); + capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index 699c59e9e..703453438 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -16,9 +16,9 @@ public class WindowsAlarmAppTest public void Setup() { var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalCapability("platformName", "Windows"); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); + appCapabilities.AddAdditionalOption("platformName", "Windows"); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; diff --git a/test/integration/PageObjects/WindowsAlarmApp.cs b/test/integration/PageObjects/WindowsAlarmApp.cs index 5978563e0..dc69dc541 100644 --- a/test/integration/PageObjects/WindowsAlarmApp.cs +++ b/test/integration/PageObjects/WindowsAlarmApp.cs @@ -119,7 +119,7 @@ public void DeleteAlarmWithName(string alarmName) { var alarmEntry = _driver.FindElementByName(alarmName); - _driver.Mouse.ContextClick(alarmEntry.Coordinates); + // _driver.Mouse.ContextClick(alarmEntry.Coordinates); _driver.FindElementByName("Delete").Click(); } } diff --git a/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs b/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs index 69de0a94c..edf2a0b80 100644 --- a/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs +++ b/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs @@ -188,11 +188,11 @@ public void CheckAbilityToStartServiceUsingFlags() public void CheckAbilityToStartServiceUsingCapabilities() { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalCapability(MobileCapabilityType.PlatformName, "Android"); - capabilities.AddAdditionalCapability(MobileCapabilityType.FullReset, true); - capabilities.AddAdditionalCapability(MobileCapabilityType.NewCommandTimeout, 60); - capabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); - capabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); + capabilities.AddAdditionalOption(MobileCapabilityType.PlatformName, "Android"); + capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalOption(MobileCapabilityType.NewCommandTimeout, 60); + capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); + capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); var args = new OptionCollector().AddCapabilities(capabilities); AppiumLocalService service = null; @@ -212,11 +212,11 @@ public void CheckAbilityToStartServiceUsingCapabilities() public void CheckAbilityToStartServiceUsingCapabilitiesAndFlags() { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalCapability(MobileCapabilityType.PlatformName, "Android"); - capabilities.AddAdditionalCapability(MobileCapabilityType.FullReset, true); - capabilities.AddAdditionalCapability(MobileCapabilityType.NewCommandTimeout, 60); - capabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); - capabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); + capabilities.AddAdditionalOption(MobileCapabilityType.PlatformName, "Android"); + capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalOption(MobileCapabilityType.NewCommandTimeout, 60); + capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); + capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); var args = new OptionCollector().AddCapabilities(capabilities) .AddArguments(GeneralOptionList.CallbackAddress(_testIp)) diff --git a/test/integration/ServerTests/StartingAppLocallyTest.cs b/test/integration/ServerTests/StartingAppLocallyTest.cs index 3ff161d55..72b9b513b 100644 --- a/test/integration/ServerTests/StartingAppLocallyTest.cs +++ b/test/integration/ServerTests/StartingAppLocallyTest.cs @@ -66,8 +66,8 @@ public void StartingAndroidAppWithCapabilitiesOnTheServerSideTest() : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var clientCapabilities = new AppiumOptions(); - clientCapabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); - clientCapabilities.AddAdditionalCapability(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); + clientCapabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); + clientCapabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); var argCollector = new OptionCollector().AddCapabilities(serverCapabilities); var builder = new AppiumServiceBuilder().WithArguments(argCollector); @@ -133,8 +133,8 @@ public void CheckThatServiseIsNotRunWhenTheCreatingOfANewSessionIsFailed() ? //it will be a cause of error Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.AddAdditionalCapability(MobileCapabilityType.DeviceName, "iPhone Simulator"); - capabilities.AddAdditionalCapability(MobileCapabilityType.PlatformName, MobilePlatform.IOS); + capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "iPhone Simulator"); + capabilities.AddAdditionalOption(MobileCapabilityType.PlatformName, MobilePlatform.IOS); var builder = new AppiumServiceBuilder(); var service = builder.Build(); diff --git a/test/integration/Windows/ClickElementTest.cs b/test/integration/Windows/ClickElementTest.cs index 058b28565..ce50abfd1 100644 --- a/test/integration/Windows/ClickElementTest.cs +++ b/test/integration/Windows/ClickElementTest.cs @@ -14,9 +14,9 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Windows; -using OpenQA.Selenium.Remote; namespace Appium.Net.Integration.Tests.Windows { @@ -29,9 +29,9 @@ public class ClickElementTest public void BeforeAll() { var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); - appCapabilities.AddAdditionalCapability("platformName", "Windows"); + appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + appCapabilities.PlatformName = "Windows"; var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _calculatorSession = new WindowsDriver(serverUri, appCapabilities, diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index aa8d984ab..f20de554e 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -1,9 +1,9 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.ImageComparison; using OpenQA.Selenium.Appium.Windows; -using OpenQA.Selenium.Remote; namespace Appium.Net.Integration.Tests.Windows { @@ -16,9 +16,9 @@ public class ImagesComparisonTest public void BeforeAll() { var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); - appCapabilities.AddAdditionalCapability("platformName", "Windows"); + appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("platformName", "Windows"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _calculatorSession = new WindowsDriver(serverUri, appCapabilities, diff --git a/test/integration/Windows/MultiSelectControlTest.cs b/test/integration/Windows/MultiSelectControlTest.cs index b6562913c..92c018869 100644 --- a/test/integration/Windows/MultiSelectControlTest.cs +++ b/test/integration/Windows/MultiSelectControlTest.cs @@ -35,9 +35,9 @@ public void Setup() { // Launch the AlarmClock app var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalCapability("platformName", "Windows"); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); + appCapabilities.AddAdditionalOption("platformName", "Windows"); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; @@ -49,8 +49,8 @@ public void Setup() // Create a session for Desktop var desktopCapabilities = new AppiumOptions(); - desktopCapabilities.AddAdditionalCapability("app", "Root"); - desktopCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + desktopCapabilities.AddAdditionalOption("app", "Root"); + desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); DesktopSession = new WindowsDriver(serverUri, desktopCapabilities); @@ -70,7 +70,7 @@ public void OneTimeTearDown() var alarmEntries = AlarmClockSession.FindElementsByName("Windows Application Driver Test Alarm"); foreach (var alarmEntry in alarmEntries) { - AlarmClockSession.Mouse.ContextClick(alarmEntry.Coordinates); + // AlarmClockSession.Mouse.ContextClick(alarmEntry.Coordinates); AlarmClockSession.FindElementByName("Delete").Click(); } diff --git a/test/integration/Windows/PentTest.cs b/test/integration/Windows/PentTest.cs index 3029426f5..120be5a5f 100644 --- a/test/integration/Windows/PentTest.cs +++ b/test/integration/Windows/PentTest.cs @@ -236,8 +236,8 @@ public void CreateNewStickyNote() var newStickyNoteWindowHandle = openedStickyNotes[0].GetAttribute("NativeWindowHandle"); newStickyNoteWindowHandle = (int.Parse(newStickyNoteWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("appTopLevelWindow", newStickyNoteWindowHandle); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(newStickyNoteSession); @@ -259,7 +259,7 @@ public void DeleteStickyNote() if (newStickyNoteSession != null) { // Create a new Sticky Note by pressing Ctrl + N - newStickyNoteSession.Keyboard.SendKeys(Keys.Control + "d" + Keys.Control); + /// newStickyNoteSession.Keyboard.SendKeys(Keys.Control + "d" + Keys.Control); Thread.Sleep(TimeSpan.FromSeconds(2)); try diff --git a/test/integration/Windows/StickyNotesTest.cs b/test/integration/Windows/StickyNotesTest.cs index 1ab55f2c7..da943e487 100644 --- a/test/integration/Windows/StickyNotesTest.cs +++ b/test/integration/Windows/StickyNotesTest.cs @@ -41,8 +41,8 @@ public void BeforeAll() // Create a new session to launch or bring up Sticky Notes application // Note: All sticky note windows are parented to Modern_Sticky_Top_Window pane AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("app", StickyNotesAppId); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("app", StickyNotesAppId); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); session = new WindowsDriver(serverUri, appCapabilities); } catch @@ -51,8 +51,8 @@ public void BeforeAll() // In such failure, simply look for the Modern_Sticky_Top_Window pane using the Desktop // session and create a new session based on the located top window pane. AppiumOptions desktopCapabilities = new AppiumOptions(); - desktopCapabilities.AddAdditionalCapability("app", "Root"); - desktopCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + desktopCapabilities.AddAdditionalOption("app", "Root"); + desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); var StickyNotesTopLevelWindow = desktopSession.FindElementByClassName("Modern_Sticky_Top_Window"); @@ -60,8 +60,8 @@ public void BeforeAll() StickyNotesTopLevelWindowHandle = (int.Parse(StickyNotesTopLevelWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("appTopLevelWindow", StickyNotesTopLevelWindowHandle); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); session = new WindowsDriver(serverUri, appCapabilities); } Assert.IsNotNull(session); @@ -90,8 +90,8 @@ public void AfterAll() newStickyNoteWindowHandle = (int.Parse(newStickyNoteWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalCapability("appTopLevelWindow", newStickyNoteWindowHandle); - appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); stickyNoteSession.Close(); } diff --git a/test/integration/helpers/Caps.cs b/test/integration/helpers/Caps.cs index f2da11ef5..c700962e9 100644 --- a/test/integration/helpers/Caps.cs +++ b/test/integration/helpers/Caps.cs @@ -8,11 +8,11 @@ public class Caps public static AppiumOptions GetIosCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalCapability(MobileCapabilityType.AutomationName, AutomationName.iOSXcuiTest); - capabilities.AddAdditionalCapability(MobileCapabilityType.DeviceName, "iPhone X"); - capabilities.AddAdditionalCapability(MobileCapabilityType.PlatformVersion, "12.0"); - capabilities.AddAdditionalCapability(MobileCapabilityType.App, app); - capabilities.AddAdditionalCapability(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); + capabilities.AddAdditionalOption(MobileCapabilityType.AutomationName, AutomationName.iOSXcuiTest); + capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "iPhone X"); + capabilities.AddAdditionalOption(MobileCapabilityType.PlatformVersion, "12.0"); + capabilities.AddAdditionalOption(MobileCapabilityType.App, app); + capabilities.AddAdditionalOption(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); return capabilities; } @@ -20,18 +20,18 @@ public static AppiumOptions GetIosCaps(string app) public static AppiumOptions GetAndroidUIAutomatorCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalCapability(MobileCapabilityType.AutomationName, AutomationName.AndroidUIAutomator2); - capabilities.AddAdditionalCapability(MobileCapabilityType.DeviceName, "Android Emulator"); - capabilities.AddAdditionalCapability(MobileCapabilityType.App, app); + capabilities.AddAdditionalOption(MobileCapabilityType.AutomationName, AutomationName.AndroidUIAutomator2); + capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Android Emulator"); + capabilities.AddAdditionalOption(MobileCapabilityType.App, app); return capabilities; } public static AppiumOptions GetAndroidEspressoCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalCapability(MobileCapabilityType.AutomationName, AutomationName.AndroidEspresso); - capabilities.AddAdditionalCapability(MobileCapabilityType.DeviceName, "Android Emulator"); - capabilities.AddAdditionalCapability(MobileCapabilityType.App, app); + capabilities.AddAdditionalOption(MobileCapabilityType.AutomationName, AutomationName.AndroidEspresso); + capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Android Emulator"); + capabilities.AddAdditionalOption(MobileCapabilityType.App, app); return capabilities; } } From c9b612cb4f2a0a3122b23befdc5d3bebf18da48c Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 10 Sep 2021 07:49:10 -0500 Subject: [PATCH 03/21] Use new platform setting more consistantly --- test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs | 2 +- test/integration/Windows/ImagesComparisonTest.cs | 2 +- test/integration/Windows/MultiSelectControlTest.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index 703453438..906d86e3d 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -17,7 +17,7 @@ public void Setup() { var appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalOption("platformName", "Windows"); + appCapabilities.PlatformName = "Windows"; appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index f20de554e..48bed6ec2 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -18,7 +18,7 @@ public void BeforeAll() var appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - appCapabilities.AddAdditionalOption("platformName", "Windows"); + appCapabilities.PlatformName = "Windows"; var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _calculatorSession = new WindowsDriver(serverUri, appCapabilities, diff --git a/test/integration/Windows/MultiSelectControlTest.cs b/test/integration/Windows/MultiSelectControlTest.cs index 92c018869..c004b08fb 100644 --- a/test/integration/Windows/MultiSelectControlTest.cs +++ b/test/integration/Windows/MultiSelectControlTest.cs @@ -36,7 +36,7 @@ public void Setup() // Launch the AlarmClock app var appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalOption("platformName", "Windows"); + appCapabilities.PlatformName = "Windows"; appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; From d04122fb7e6878537d7e638fcf97a51480a372b1 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 1 Oct 2021 17:04:08 -0500 Subject: [PATCH 04/21] Get WinAppTests kind of working --- src/Appium.Net/Appium.Net.csproj | 4 +- src/Appium.Net/Appium.Net.xml | 18 +- .../Appium/Android/AndroidElement.cs | 2 +- .../Appium/Android/AndroidElementFactory.cs | 4 +- src/Appium.Net/Appium/AppiumDriver.cs | 34 ++-- src/Appium.Net/Appium/AppiumOptions.cs | 186 ++++++++++++++++-- src/Appium.Net/Appium/AppiumWebElement.cs | 5 +- src/Appium.Net/Appium/CachedElementFactory.cs | 6 +- .../Interfaces/IFindByAndroidDataMatcher.cs | 4 +- .../Interfaces/IFindByAndroidUIAutomator.cs | 4 +- .../Interfaces/IFindByAndroidViewMatcher.cs | 4 +- src/Appium.Net/Appium/Mac/MacElement.cs | 2 +- .../Appium/Mac/MacElementFactory.cs | 4 +- .../AppiumPageObjectMemberDecorator.cs | 2 +- .../Appium/Service/AppiumCommandExecutor.cs | 34 +++- src/Appium.Net/Appium/Tizen/TizenElement.cs | 2 +- .../Appium/Tizen/TizenElementFactory.cs | 4 +- .../Appium/Windows/WindowsDriver.cs | 28 ++- .../Appium/Windows/WindowsElement.cs | 39 ---- .../Appium/Windows/WindowsElementFactory.cs | 16 -- .../Appium/Windows/WindowsOptions.cs | 54 +++++ src/Appium.Net/Appium/iOS/IOSElement.cs | 2 +- .../Appium/iOS/IOSElementFactory.cs | 4 +- .../Appium.Net.Integration.Tests.csproj | 2 - .../Windows/WindowsAlarmAppTest.cs | 2 - test/integration/Windows/ClickElementTest.cs | 14 +- .../Windows/ImagesComparisonTest.cs | 12 +- .../Windows/MultiSelectControlTest.cs | 111 ++++++----- test/integration/Windows/PentTest.cs | 8 +- test/integration/Windows/StickyNotesTest.cs | 11 +- 30 files changed, 411 insertions(+), 211 deletions(-) delete mode 100644 src/Appium.Net/Appium/Windows/WindowsElement.cs delete mode 100644 src/Appium.Net/Appium/Windows/WindowsElementFactory.cs create mode 100644 src/Appium.Net/Appium/Windows/WindowsOptions.cs diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index bba1977b9..1d1e793e4 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -49,8 +49,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/Appium.Net/Appium.Net.xml b/src/Appium.Net/Appium.Net.xml index 00827c3db..3641bdb2e 100644 --- a/src/Appium.Net/Appium.Net.xml +++ b/src/Appium.Net/Appium.Net.xml @@ -159,7 +159,7 @@ The image content of the clipboard as base64-encoded string or null if there is no image on the clipboard - + Initializes a new instance of the AndroidElement class. @@ -3348,7 +3348,7 @@ - + Initializes a new instance of the AppiumWebElement class. @@ -4265,7 +4265,7 @@ IWebElement object so that you can interact that object - IWebDriver driver = new RemoteWebDriver(new DriverOptions()); + IWebDriver driver = new WebDriver(new DriverOptions()); IWebElement elem = driver.FindElementByAndroidDataMatcher('elements()')) @@ -4278,7 +4278,7 @@ ReadOnlyCollection of IWebElement object so that you can interact with those objects - IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + IWebDriver driver = new WebDriver(new FirefoxOptions()); ReadOnlyCollection]]> elem = driver.FindElementsByAndroidDataMatcher(elements()) @@ -4291,7 +4291,7 @@ IWebElement object so that you can interact that object - IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + IWebDriver driver = new WebDriver(new FirefoxOptions()); IWebElement elem = driver.FindElementByAndroidUIAutomator('elements()')) @@ -4311,7 +4311,7 @@ ReadOnlyCollection of IWebElement object so that you can interact with those objects - IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + IWebDriver driver = new WebDriver(new FirefoxOptions()); ReadOnlyCollection]]> elem = driver.FindElementsByAndroidUIAutomator(elements()) @@ -5035,7 +5035,7 @@ The image content of the clipboard as an Image object or null if there is no image on the clipboard - + Initializes a new instance of the IOSElement class. @@ -5182,7 +5182,7 @@ An object containing the Appium options. The maximum amount of time to wait for each command. - + Initializes a new instance of the MacElement class. @@ -6230,7 +6230,7 @@ a Tizen UIAutomation selector ReadOnlyCollection of IWebElement objects so that you can interact with those objects - + Initializes a new instance of the TizenElement class. diff --git a/src/Appium.Net/Appium/Android/AndroidElement.cs b/src/Appium.Net/Appium/Android/AndroidElement.cs index c04e7973c..20fea24db 100644 --- a/src/Appium.Net/Appium/Android/AndroidElement.cs +++ b/src/Appium.Net/Appium/Android/AndroidElement.cs @@ -26,7 +26,7 @@ public class AndroidElement : AppiumWebElement, IFindByAndroidUIAutomator /// Driver in use. /// ID of the element. - public AndroidElement(RemoteWebDriver parent, string id) + public AndroidElement(WebDriver parent, string id) : base(parent, id) { } diff --git a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs index 6319e790c..ef7f4f9b3 100644 --- a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs +++ b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs @@ -4,11 +4,11 @@ namespace OpenQA.Selenium.Appium.Android { public class AndroidElementFactory : CachedElementFactory { - public AndroidElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) + public AndroidElementFactory(WebDriver parentDriver) : base(parentDriver) { } - protected override AndroidElement CreateCachedElement(RemoteWebDriver parentDriver, string elementId) + protected override AndroidElement CreateCachedElement(WebDriver parentDriver, string elementId) { return new AndroidElement(parentDriver, elementId); } diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index 98dda29a0..7750540ba 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -29,7 +29,7 @@ namespace OpenQA.Selenium.Appium { - public abstract class AppiumDriver : RemoteWebDriver, IFindsByImage, + public abstract class AppiumDriver : WebDriver, IFindsByImage, IHasSessionDetails, IHasLocation, IFindByAccessibilityId, @@ -118,17 +118,17 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim public new ReadOnlyCollection FindElementsById(string id) => ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); - public new W FindElementByCssSelector(string cssSelector) => - (W) base.FindElementByCssSelector(cssSelector); + public new W FindElementByCssSelector(string cssSelector) => throw new NotImplementedException(); + //(W) base.FindElementByCssSelector(cssSelector); - public new ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => - ConvertToExtendedWebElementCollection(base.FindElementsByCssSelector(cssSelector)); + public new ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => throw new NotImplementedException(); + //ConvertToExtendedWebElementCollection(base.FindElementsByCssSelector(cssSelector)); - public new W FindElementByLinkText(string linkText) => - (W) base.FindElementByLinkText(linkText); + public new W FindElementByLinkText(string linkText) => throw new NotImplementedException(); + //(W) base.FindElementByLinkText(linkText); - public new ReadOnlyCollection FindElementsByLinkText(string linkText) => - ConvertToExtendedWebElementCollection(base.FindElementsByLinkText(linkText)); + public new ReadOnlyCollection FindElementsByLinkText(string linkText) => throw new NotImplementedException(); + //ConvertToExtendedWebElementCollection(base.FindElementsByLinkText(linkText)); public new W FindElementByName(string name) => (W) base.FindElement(MobileSelector.Name, name); @@ -136,11 +136,11 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim public new ReadOnlyCollection FindElementsByName(string name) => ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); - public new W FindElementByPartialLinkText(string partialLinkText) => - (W) base.FindElementByPartialLinkText(partialLinkText); + public new W FindElementByPartialLinkText(string partialLinkText) => throw new NotImplementedException(); + //(W) base.FindElementByPartialLinkText(partialLinkText); - public new ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => - ConvertToExtendedWebElementCollection(base.FindElementsByPartialLinkText(partialLinkText)); + public new ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => throw new NotImplementedException(); + //ConvertToExtendedWebElementCollection(base.FindElementsByPartialLinkText(partialLinkText)); public new W FindElementByTagName(string tagName) => (W) base.FindElement(MobileSelector.TagName, tagName); @@ -148,11 +148,11 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim public new ReadOnlyCollection FindElementsByTagName(string tagName) => ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.TagName, tagName)); - public new W FindElementByXPath(string xpath) => - (W) base.FindElementByXPath(xpath); + public new W FindElementByXPath(string xpath) => throw new NotImplementedException(); + //(W) base.FindElementByXPath(xpath); - public new ReadOnlyCollection FindElementsByXPath(string xpath) => - ConvertToExtendedWebElementCollection(base.FindElementsByXPath(xpath)); + public new ReadOnlyCollection FindElementsByXPath(string xpath) => throw new NotImplementedException(); + // ConvertToExtendedWebElementCollection(base.FindElementsByXPath(xpath)); #region IFindByAccessibilityId Members diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index 40c7d1a33..e3da1d64f 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -1,35 +1,135 @@ -using Newtonsoft.Json; -using OpenQA.Selenium.Remote; +using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; -using System.Reflection; namespace OpenQA.Selenium.Appium { + /// - /// Generic browser options + /// Abstract class to manage options specific to Appium-based browsers. /// public class AppiumOptions : DriverOptions { + + // private const string AutomationAppiumOption = "appium:automationName"; + // private const string DeviceAppiumOption = "appium:deviceName"; + // private const string AppAppiumOption = "appium:app"; + private const string PlatformVersionAppiumOption = "appium:platformVersion"; + + // private string automationName; + // private string deviceName; + // private string app; + private string platformVersion; + + private Dictionary additionalAppiumOptions = new Dictionary(); + + + /// + /// Initializes a new instance of the class. + /// + /// + + public AppiumOptions() : base() + { + // this.AddKnownCapabilityName(this.CapabilityName, "current AppiumOptions class instance"); + // this.AddKnownCapabilityName(AppiumOptions.AutomationAppiumOption, "AutomationName property"); + // this.AddKnownCapabilityName(AppiumOptions.DeviceAppiumOption, "DeviceName property"); + // this.AddKnownCapabilityName(AppiumOptions.AppAppiumOption, "App property"); + this.AddKnownCapabilityName(AppiumOptions.PlatformVersionAppiumOption, "PlatformVersion property"); + } + /// - /// The dictionary of capabilities + /// Gets the vendor prefix to apply to Appium-specific capability names. /// - private readonly AppiumCapabilities capabilities = new AppiumCapabilities(); + protected virtual string VendorPrefix { get; } + + /// + /// Gets the name of the capability used to store Appium options in + /// an object. + /// + public virtual string CapabilityName { get; } + + + /// + /// Gets or sets the AutoamtionName of the Appium browser's (e.g. Appium, Selendroid and so on) setting. + /// + //public string AutomationName + //{ + // get { return this.automationName; } + // set { this.automationName = value; } + //} + + /// + /// Gets or sets the DeviceName of the Appium browser's (e.g. Pixel 3XL, Galaxy S20 and so on) setting. + /// + //public string DeviceName + //{ + // get { return this.deviceName; } + // set { this.deviceName = value; } + //} + + /// + /// Gets or sets the Capability name used for the apllication setting. + /// + //public string App + //{ + // get { return this.app; } + // set { this.app = value; } + //} + + /// + /// Gets or sets the PlatformVersion of the Appium browser's (e.g. 10, 11 and so on) setting. + /// + public string PlatformVersion + { + get { return this.platformVersion; } + set { this.platformVersion = value; } + } + + /// + /// Provides a means to add additional capabilities not yet added as type safe options + /// for the Appium driver. + /// + /// The name of the capability to add. + /// The value of the capability to add. + /// + /// thrown when attempting to add a capability for which there is already a type safe option, or + /// when is or the empty string. + /// + /// Calling + /// where has already been added will overwrite the + /// existing value with the new value in . + /// Calling this method adds capabilities to the Appium-specific options object passed to + /// webdriver executable. + public void AddAdditionalAppiumOption(string optionName, object optionValue) + { + this.ValidateCapabilityName(optionName); + this.additionalAppiumOptions[optionName] = optionValue; + } /// /// Add new capabilities /// /// Capability name /// Capabilities value, which cannot be null or empty + [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalChromeOption method for adding additional options")] public override void AddAdditionalCapability(string capabilityName, object capabilityValue) { - if (string.IsNullOrEmpty(capabilityName)) + + this.AddAdditionalCapability(capabilityName, capabilityValue, false); + } + + [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalChromeOption method for adding additional options")] + public void AddAdditionalCapability(string capabilityName, object capabilityValue, bool isGlobalCapability) + { + if (isGlobalCapability) { - throw new ArgumentException("Capability name may not be null an empty string.", "capabilityName"); + this.AddAdditionalOption(capabilityName, capabilityValue); + } + else + { + this.AddAdditionalAppiumOption(capabilityName, capabilityValue); } - - var writeable = this.GenerateDesiredCapabilities(true); - writeable.SetCapability(capabilityName, capabilityValue); } /// @@ -38,20 +138,76 @@ public override void AddAdditionalCapability(string capabilityName, object capab /// A desired capability public override ICapabilities ToCapabilities() { - RemoteSessionSettings remote = new RemoteSessionSettings(); - foreach(var keyVal in this.ToDictionary()) + Dictionary appiumOptions = this.BuildAppiumOptionsDictionary(); + + IWritableCapabilities capabilities = this.GenerateDesiredCapabilities(false); + capabilities.SetCapability(this.CapabilityName, appiumOptions); + + AddVendorSpecificAppiumCapabilities(capabilities); + + return capabilities.AsReadOnly(); + + //RemoteSessionSettings remote = new RemoteSessionSettings(); + + //foreach (var keyVal in this.ToDictionary()) + //{ + // remote.AddMetadataSetting(keyVal.Key, keyVal.Value); + //} + + //return remote; + } + + /// + /// Adds vendor-specific capabilities for Appium-based browsers. + /// + /// The capabilities to add. + protected virtual void AddVendorSpecificAppiumCapabilities(IWritableCapabilities capabilities) + { + } + + + protected virtual Dictionary BuildAppiumOptionsDictionary() + { + Dictionary appiumOptions = new Dictionary(); + + + //if (!string.IsNullOrEmpty(this.automationName)) + //{ + // appiumOptions[AutomationAppiumOption] = this.automationName; + //} + + //if (!string.IsNullOrEmpty(this.deviceName)) + //{ + // appiumOptions[DeviceAppiumOption] = this.deviceName; + //} + //if (!string.IsNullOrEmpty(this.app)) + //{ + // appiumOptions[AppAppiumOption] = this.app; + //} + if (!string.IsNullOrEmpty(this.platformVersion)) { - remote.AddMetadataSetting(keyVal.Key, keyVal.Value); + appiumOptions[PlatformVersionAppiumOption] = this.platformVersion; } - return remote; + + + + foreach (KeyValuePair pair in this.additionalAppiumOptions) + { + appiumOptions.Add(pair.Key, pair.Value); + } + + return appiumOptions; } + public IDictionary ToDictionary() { var writeable = this.GenerateDesiredCapabilities(true); return (writeable.AsReadOnly() as ReadOnlyDesiredCapabilities).ToDictionary(); } + + } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/AppiumWebElement.cs b/src/Appium.Net/Appium/AppiumWebElement.cs index 011a3a952..7ba1c1bca 100644 --- a/src/Appium.Net/Appium/AppiumWebElement.cs +++ b/src/Appium.Net/Appium/AppiumWebElement.cs @@ -40,15 +40,14 @@ namespace OpenQA.Selenium.Appium /// } /// /// - public abstract class AppiumWebElement : WebElement, - IMobileElement, IWebElementCached + public abstract class AppiumWebElement : WebElement , IMobileElement, IWebElementCached { /// /// Initializes a new instance of the AppiumWebElement class. /// /// Driver in use. /// ID of the element. - public AppiumWebElement(RemoteWebDriver parent, string id) + public AppiumWebElement(WebDriver parent, string id) : base(parent, id) { } diff --git a/src/Appium.Net/Appium/CachedElementFactory.cs b/src/Appium.Net/Appium/CachedElementFactory.cs index 750b215c7..ce47e514e 100644 --- a/src/Appium.Net/Appium/CachedElementFactory.cs +++ b/src/Appium.Net/Appium/CachedElementFactory.cs @@ -7,11 +7,11 @@ namespace OpenQA.Selenium.Appium { public abstract class CachedElementFactory : WebElementFactory where T : WebElement, IWebElementCached { - public CachedElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) + public CachedElementFactory(WebDriver parentDriver) : base(parentDriver) { } - protected abstract T CreateCachedElement(RemoteWebDriver parentDriver, string elementId); + protected abstract T CreateCachedElement(WebDriver parentDriver, string elementId); public virtual bool CacheElementAttributes { @@ -25,7 +25,7 @@ public virtual bool CacheElementAttributes public override WebElement CreateElement(Dictionary elementDictionary) { string elementId = GetElementId(elementDictionary); - T cachedElement = CreateCachedElement(ParentDriver as RemoteWebDriver, elementId); + T cachedElement = CreateCachedElement(ParentDriver as WebDriver, elementId); if (CacheElementAttributes) { cachedElement.SetCacheValues(elementDictionary); diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs index 8a66b98bc..bda8ee662 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidDataMatcher : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new RemoteWebDriver(new DriverOptions()); + /// IWebDriver driver = new WebDriver(new DriverOptions()); /// IWebElement elem = driver.FindElementByAndroidDataMatcher('elements()')) /// /// @@ -38,7 +38,7 @@ public interface IFindByAndroidDataMatcher : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidDataMatcher(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs index 6e4eb0b2d..1d8cbf411 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidUIAutomator : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// IWebElement elem = driver.FindElementByAndroidUIAutomator('elements()')) /// /// @@ -46,7 +46,7 @@ public interface IFindByAndroidUIAutomator : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidUIAutomator(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs index a32b9b5d1..7cdfd17a0 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidViewMatcher : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new RemoteWebDriver(new DriverOptions()); + /// IWebDriver driver = new WebDriver(new DriverOptions()); /// IWebElement elem = driver.FindElementByAndroidViewMatcher('elements()')) /// /// @@ -38,7 +38,7 @@ public interface IFindByAndroidViewMatcher : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidViewMatcher(elements()) /// /// diff --git a/src/Appium.Net/Appium/Mac/MacElement.cs b/src/Appium.Net/Appium/Mac/MacElement.cs index 9474b2202..c2865b5ae 100644 --- a/src/Appium.Net/Appium/Mac/MacElement.cs +++ b/src/Appium.Net/Appium/Mac/MacElement.cs @@ -23,7 +23,7 @@ public class MacElement : AppiumWebElement /// /// Driver in use. /// ID of the element. - public MacElement(RemoteWebDriver parent, string id) + public MacElement(WebDriver parent, string id) : base(parent, id) { } diff --git a/src/Appium.Net/Appium/Mac/MacElementFactory.cs b/src/Appium.Net/Appium/Mac/MacElementFactory.cs index 454e8f474..1f65a0b6c 100644 --- a/src/Appium.Net/Appium/Mac/MacElementFactory.cs +++ b/src/Appium.Net/Appium/Mac/MacElementFactory.cs @@ -4,11 +4,11 @@ namespace OpenQA.Selenium.Appium.Mac { public class MacElementFactory : CachedElementFactory { - public MacElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) + public MacElementFactory(WebDriver parentDriver) : base(parentDriver) { } - protected override MacElement CreateCachedElement(RemoteWebDriver parentDriver, string elementId) + protected override MacElement CreateCachedElement(WebDriver parentDriver, string elementId) { return new MacElement(parentDriver, elementId); } diff --git a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs index fd738e130..ab168cf00 100644 --- a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs +++ b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs @@ -48,7 +48,7 @@ internal static List ListOfAvailableElementTypes listAvailableElementTypes.Add(typeof(AppiumWebElement)); listAvailableElementTypes.Add(typeof(AndroidElement)); listAvailableElementTypes.Add(typeof(IOSElement)); - listAvailableElementTypes.Add(typeof(WindowsElement)); + // listAvailableElementTypes.Add(typeof(WindowsElement)); } return listAvailableElementTypes; diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index 15592f8d5..aa2f11809 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -12,8 +12,10 @@ //See the License for the specific language governing permissions and //limitations under the License. +using OpenQA.Selenium.Appium.Windows; using OpenQA.Selenium.Remote; using System; +using System.Collections.Generic; using System.Reflection; namespace OpenQA.Selenium.Appium.Service @@ -21,13 +23,17 @@ namespace OpenQA.Selenium.Appium.Service internal class AppiumCommandExecutor : ICommandExecutor { private readonly AppiumLocalService Service; - private readonly Uri URL; + private static Uri URL; + private static TimeSpan CommandTimeout; + private ICommandExecutor RealExecutor; private bool isDisposed; - private const string IdempotencyHeader = "X-Idempotency-Key"; private static ICommandExecutor CreateRealExecutor(Uri remoteAddress, TimeSpan commandTimeout) { + URL = remoteAddress; + CommandTimeout = commandTimeout; + var seleniumAssembly = Assembly.Load("WebDriver"); var commandType = seleniumAssembly.GetType("OpenQA.Selenium.Remote.HttpCommandExecutor"); ICommandExecutor commandExecutor = null; @@ -66,12 +72,34 @@ public Response Execute(Command commandToExecute) try { + object value; + if (commandToExecute.Name == DriverCommand.NewSession) { Service?.Start(); RealExecutor = ModifyNewSessionHttpRequestHeader(RealExecutor); } + if (commandToExecute.Parameters.TryGetValue("capabilities", out value) && ((Dictionary)commandToExecute.Parameters["capabilities"]).TryGetValue("platformName", out value) && value.ToString().Equals("Windows")) + { + var desiredCapabilities = new Dictionary(); + + if (((Dictionary)(commandToExecute.Parameters["capabilities"])).ContainsKey("app")) + { + desiredCapabilities.Add("app", ((Dictionary)(commandToExecute.Parameters["capabilities"]))["app"]); + } + + if (((Dictionary)(commandToExecute.Parameters["capabilities"])).ContainsKey("appTopLevelWindow")) + { + desiredCapabilities.Add("appTopLevelWindow", ((Dictionary)(commandToExecute.Parameters["capabilities"]))["appTopLevelWindow"]); + } + + if (desiredCapabilities.Count > 0) + { + commandToExecute.Parameters.Add("desiredCapabilities", desiredCapabilities); + } + } + result = RealExecutor.Execute(commandToExecute); return result; } @@ -128,7 +156,7 @@ protected void Dispose(bool disposing) public bool TryAddCommand(string commandName, CommandInfo info) { - throw new NotImplementedException(); + return this.RealExecutor.TryAddCommand(commandName, info); } } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/Tizen/TizenElement.cs b/src/Appium.Net/Appium/Tizen/TizenElement.cs index e1f4efc22..81a3b5e0e 100644 --- a/src/Appium.Net/Appium/Tizen/TizenElement.cs +++ b/src/Appium.Net/Appium/Tizen/TizenElement.cs @@ -25,7 +25,7 @@ public class TizenElement : AppiumWebElement, IFindByTizenUIAutomation /// Driver in use. /// ID of the element. - public TizenElement(RemoteWebDriver parent, string id) + public TizenElement(WebDriver parent, string id) : base(parent, id) { } diff --git a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs index 6f05b6e48..f9091e164 100644 --- a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs +++ b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs @@ -4,11 +4,11 @@ namespace OpenQA.Selenium.Appium.Tizen { public class TizenElementFactory : CachedElementFactory { - public TizenElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) + public TizenElementFactory(WebDriver parentDriver) : base(parentDriver) { } - protected override TizenElement CreateCachedElement(RemoteWebDriver parentDriver, string elementId) + protected override TizenElement CreateCachedElement(WebDriver parentDriver, string elementId) { return new TizenElement(parentDriver, elementId); } diff --git a/src/Appium.Net/Appium/Windows/WindowsDriver.cs b/src/Appium.Net/Appium/Windows/WindowsDriver.cs index bec10bab3..397b8b9d1 100644 --- a/src/Appium.Net/Appium/Windows/WindowsDriver.cs +++ b/src/Appium.Net/Appium/Windows/WindowsDriver.cs @@ -19,12 +19,10 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; - namespace OpenQA.Selenium.Appium.Windows { - public class WindowsDriver : AppiumDriver, ISendsKeyEvents, IHidesKeyboardWithKeyName, - IFindByWindowsUIAutomation where W : IWebElement + public class WindowsDriver : AppiumDriver, ISendsKeyEvents, IHidesKeyboardWithKeyName //, IFindByWindowsUIAutomation + where W : IWebElement { private static readonly string Platform = MobilePlatform.Windows; @@ -131,6 +129,25 @@ public override ReadOnlyCollection Contexts #endregion Context + + + + + + + + internal static new ICapabilities SetPlatformToCapabilities(DriverOptions dc, string desiredPlatform) + { + dc.PlatformName = desiredPlatform; + return dc.ToCapabilities(); + } + + + + + + + #region IFindByWindowsUIAutomation Members /// @@ -154,7 +171,8 @@ public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) public void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); - protected override WebElementFactory CreateElementFactory() => new WindowsElementFactory(this); + // protected override WebElementFactory CreateElementFactory() => new WindowsElementFactory(this); + protected override WebElementFactory CreateElementFactory() => new WebElementFactory(this); public void PressKeyCode(KeyEvent keyEvent) => throw new NotImplementedException(); diff --git a/src/Appium.Net/Appium/Windows/WindowsElement.cs b/src/Appium.Net/Appium/Windows/WindowsElement.cs deleted file mode 100644 index 6438abc39..000000000 --- a/src/Appium.Net/Appium/Windows/WindowsElement.cs +++ /dev/null @@ -1,39 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. - -using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; -using OpenQA.Selenium.Appium.Enums; -using System.Collections.Generic; - -namespace OpenQA.Selenium.Appium.Windows -{ - public class WindowsElement : AppiumWebElement, IFindByWindowsUIAutomation - { - public WindowsElement(RemoteWebDriver parent, string id) - : base(parent, id) - { - } - - #region IFindByWindowsUIAutomation Members - - public AppiumWebElement FindElementByWindowsUIAutomation(string selector) => - FindElement(MobileSelector.WindowsUIAutomation, selector); - - public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) => - FindElements(MobileSelector.WindowsUIAutomation, selector); - - #endregion IFindByWindowsUIAutomation Members - } -} \ No newline at end of file diff --git a/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs b/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs deleted file mode 100644 index 24d3adb60..000000000 --- a/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs +++ /dev/null @@ -1,16 +0,0 @@ -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium.Windows -{ - public class WindowsElementFactory : CachedElementFactory - { - public WindowsElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) - { - } - - protected override WindowsElement CreateCachedElement(RemoteWebDriver parentDriver, string elementId) - { - return new WindowsElement(parentDriver, elementId); - } - } -} diff --git a/src/Appium.Net/Appium/Windows/WindowsOptions.cs b/src/Appium.Net/Appium/Windows/WindowsOptions.cs new file mode 100644 index 000000000..7aa2c963a --- /dev/null +++ b/src/Appium.Net/Appium/Windows/WindowsOptions.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace OpenQA.Selenium.Appium.Windows +{ + public class WindowsOptions : AppiumOptions + { + private const string AndroidOptionsCapabilityName = "windowsOptions"; + private const string PlatformNameValue = "windows"; + + /// + /// Initializes a new instance of the class. + /// + public WindowsOptions() + { + this.PlatformName = PlatformNameValue; + } + + /// + /// Turn the capabilities into an desired capability + /// + /// A desired capability + public override ICapabilities ToCapabilities() + { + RemoteSessionSettings remote = new RemoteSessionSettings(); + + foreach (var keyVal in this.ToDictionary()) + { + remote.AddMetadataSetting(keyVal.Key, keyVal.Value); + } + + return remote; + } + + /// + /// Gets the vendor prefix to apply to Chromium-specific capability names. + /// + protected override string VendorPrefix + { + get { return "appium"; } + } + + /// + /// Gets the name of the capability used to store Appium options in + /// an object. + /// + public override string CapabilityName + { + get { return string.Format(CultureInfo.InvariantCulture, "{0}:{1}", this.VendorPrefix, AndroidOptionsCapabilityName); } + } + } +} diff --git a/src/Appium.Net/Appium/iOS/IOSElement.cs b/src/Appium.Net/Appium/iOS/IOSElement.cs index faf3e5241..733f767c2 100644 --- a/src/Appium.Net/Appium/iOS/IOSElement.cs +++ b/src/Appium.Net/Appium/iOS/IOSElement.cs @@ -27,7 +27,7 @@ public class IOSElement : AppiumWebElement, /// /// Driver in use. /// ID of the element. - public IOSElement(RemoteWebDriver parent, string id) + public IOSElement(WebDriver parent, string id) : base(parent, id) { } diff --git a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs index ba77ba196..a9653e47c 100644 --- a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs +++ b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs @@ -4,11 +4,11 @@ namespace OpenQA.Selenium.Appium.iOS { public class IOSElementFactory : CachedElementFactory { - public IOSElementFactory(RemoteWebDriver parentDriver) : base(parentDriver) + public IOSElementFactory(WebDriver parentDriver) : base(parentDriver) { } - protected override IOSElement CreateCachedElement(RemoteWebDriver parentDriver, string elementId) + protected override IOSElement CreateCachedElement(WebDriver parentDriver, string elementId) { return new IOSElement(parentDriver, elementId); } diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index 54c3c26fb..41f3cc844 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -13,8 +13,6 @@ - - diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index 906d86e3d..7d452a47c 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -17,8 +17,6 @@ public void Setup() { var appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - appCapabilities.PlatformName = "Windows"; - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; diff --git a/test/integration/Windows/ClickElementTest.cs b/test/integration/Windows/ClickElementTest.cs index ce50abfd1..efed69a96 100644 --- a/test/integration/Windows/ClickElementTest.cs +++ b/test/integration/Windows/ClickElementTest.cs @@ -17,30 +17,30 @@ using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Windows; +using System; namespace Appium.Net.Integration.Tests.Windows { public class ClickElementTest { - private WindowsDriver _calculatorSession; + private WindowsDriver _calculatorSession; protected static WebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() { - var appCapabilities = new AppiumOptions(); + var appCapabilities = new WindowsOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - appCapabilities.PlatformName = "Windows"; - var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _calculatorSession = new WindowsDriver(serverUri, appCapabilities, + var serverUri = new Uri("http://127.0.0.1:4723"); + //var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); _calculatorSession.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _calculatorSession.FindElementByName("Clear").Click(); _calculatorSession.FindElementByName("Seven").Click(); - CalculatorResult = _calculatorSession.FindElementByName("Display is 7") as WebElement; + CalculatorResult = _calculatorSession.FindElementByName("Display is 7"); Assert.IsNotNull(CalculatorResult); } diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index 48bed6ec2..f7a22d19b 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -4,24 +4,24 @@ using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.ImageComparison; using OpenQA.Selenium.Appium.Windows; +using System; namespace Appium.Net.Integration.Tests.Windows { public class ImagesComparisonTest { - private WindowsDriver _calculatorSession; + private WindowsDriver _calculatorSession; protected static WebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() { - var appCapabilities = new AppiumOptions(); + var appCapabilities = new WindowsOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - appCapabilities.PlatformName = "Windows"; - var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _calculatorSession = new WindowsDriver(serverUri, appCapabilities, + var serverUri = new Uri("http://127.0.0.1:4723"); + //var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); _calculatorSession.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Windows/MultiSelectControlTest.cs b/test/integration/Windows/MultiSelectControlTest.cs index c004b08fb..03c45c7d8 100644 --- a/test/integration/Windows/MultiSelectControlTest.cs +++ b/test/integration/Windows/MultiSelectControlTest.cs @@ -26,9 +26,9 @@ namespace Appium.Net.Integration.Tests.Windows { public class MultiSelectControlTest { - private WindowsDriver _driver; - protected static WindowsDriver AlarmClockSession; - protected static WindowsDriver DesktopSession; + private WindowsDriver _driver; + protected static WindowsDriver AlarmClockSession; + protected static WindowsDriver DesktopSession; [OneTimeSetUp] public void Setup() @@ -36,13 +36,11 @@ public void Setup() // Launch the AlarmClock app var appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - appCapabilities.PlatformName = "Windows"; - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; AlarmClockSession = - new WindowsDriver(serverUri, appCapabilities); + new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(AlarmClockSession); AlarmClockSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2); @@ -53,7 +51,7 @@ public void Setup() desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); DesktopSession = - new WindowsDriver(serverUri, desktopCapabilities); + new WindowsDriver(serverUri, desktopCapabilities); Assert.IsNotNull(DesktopSession); // Ensure app is started in the default main page @@ -105,24 +103,25 @@ public void SwitchToWorldClockTab() public string ReadLocalTime() { + // TODO: get working var localTimeText = ""; - AppiumWebElement worldClockPivotItem = - AlarmClockSession.FindElementByAccessibilityId("ClockButton"); - if (worldClockPivotItem != null) - { - localTimeText = AlarmClockSession.FindElementByAccessibilityId("WorldClockItemGrid").Text; - var timeStrings = localTimeText.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); - - foreach (var timeString in timeStrings) - { - // Get the time. E.g. "11:32 AM" from "Local time, Monday, February 22, 2016, 11:32 AM, " - if (timeString.Contains(":")) - { - localTimeText = new string(timeString.Trim().Where(c => c < 128).ToArray()); // Remove 8206 character, see https://stackoverflow.com/questions/18298208/strange-error-when-parsing-string-to-date - break; - } - } - } + //AppiumWebElement worldClockPivotItem = + // AlarmClockSession.FindElementByAccessibilityId("ClockButton"); + //if (worldClockPivotItem != null) + //{ + // localTimeText = AlarmClockSession.FindElementByAccessibilityId("WorldClockItemGrid").Text; + // var timeStrings = localTimeText.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); + + // foreach (var timeString in timeStrings) + // { + // // Get the time. E.g. "11:32 AM" from "Local time, Monday, February 22, 2016, 11:32 AM, " + // if (timeString.Contains(":")) + // { + // localTimeText = new string(timeString.Trim().Where(c => c < 128).ToArray()); // Remove 8206 character, see https://stackoverflow.com/questions/18298208/strange-error-when-parsing-string-to-date + // break; + // } + // } + //} return localTimeText; } @@ -143,7 +142,7 @@ public void AddAlarm(string timeText) AlarmClockSession.FindElementByAccessibilityId("AlarmNameTextBox").Clear(); AlarmClockSession.FindElementByAccessibilityId("AlarmNameTextBox") .SendKeys("Windows Application Driver Test Alarm"); - WindowsElement periodSelector = null; + IWebElement periodSelector = null; try { periodSelector = AlarmClockSession.FindElementByAccessibilityId("PeriodLoopingSelector"); @@ -152,44 +151,48 @@ public void AddAlarm(string timeText) { hourString = alarmTime.ToString("HH", fi); } - periodSelector?.FindElementByName(period).Click(); - AlarmClockSession.FindElementByAccessibilityId("HourLoopingSelector").FindElementByName(hourString).Click(); - AlarmClockSession.FindElementByAccessibilityId("MinuteLoopingSelector").FindElementByName(minuteString) - .Click(); - Thread.Sleep(500); - AlarmClockSession.FindElementByAccessibilityId("AlarmSaveButton").Click(); + + // TODO: get working + //periodSelector?.FindElementByName(period).Click(); + //AlarmClockSession.FindElementByAccessibilityId("HourLoopingSelector").FindElementByName(hourString).Click(); + //AlarmClockSession.FindElementByAccessibilityId("MinuteLoopingSelector").FindElementByName(minuteString) + // .Click(); + //Thread.Sleep(500); + //AlarmClockSession.FindElementByAccessibilityId("AlarmSaveButton").Click(); } } public void DismissNotification() { - try - { - AppiumWebElement newNotification = DesktopSession.FindElementByName("New notification"); - Assert.IsTrue(newNotification.FindElementByAccessibilityId("MessageText").Text - .Contains("Windows Application Driver Test Alarm")); - newNotification.FindElementByName("Dismiss").Click(); - } - catch - { - } + // TODO: get working + //try + //{ + // WebElement newNotification = DesktopSession.FindElementByName("New notification"); + // Assert.IsTrue(newNotification.("MessageText").Text + // .Contains("Windows Application Driver Test Alarm")); + // newNotification.FindElementByName("Dismiss").Click(); + //} + //catch + //{ + //} } private static void ReturnToMainPage() { - // Try to return to main page in case application is started in nested view - try - { - AppiumWebElement backButton = null; - do - { - backButton = AlarmClockSession.FindElementByAccessibilityId("Back"); - backButton.Click(); - } while (backButton != null); - } - catch - { - } + // TODO: get working + //// Try to return to main page in case application is started in nested view + //try + //{ + // AppiumWebElement backButton = null; + // do + // { + // backButton = AlarmClockSession.FindElementByAccessibilityId("Back"); + // backButton.Click(); + // } while (backButton != null); + //} + //catch + //{ + //} } } } \ No newline at end of file diff --git a/test/integration/Windows/PentTest.cs b/test/integration/Windows/PentTest.cs index 120be5a5f..e772a7154 100644 --- a/test/integration/Windows/PentTest.cs +++ b/test/integration/Windows/PentTest.cs @@ -36,8 +36,8 @@ namespace Appium.Net.Integration.Tests.Windows { public class PenTest : StickyNotesTest { - private WindowsDriver newStickyNoteSession; - private WindowsElement inkCanvas; + private WindowsDriver newStickyNoteSession; + private WebElement inkCanvas; [Test] public void DrawBasicSquare() @@ -225,7 +225,7 @@ public void CreateNewStickyNote() Assert.AreEqual(openedStickyNotesWindowsBefore.Count + 1, openedStickyNotesWindowsAfter.Count); // Identify the newly opened Sticky Note by removing the previously opened ones from the list - List openedStickyNotes = new List(openedStickyNotesWindowsAfter); + List openedStickyNotes = new List(openedStickyNotesWindowsAfter); foreach (var preExistingStickyNote in openedStickyNotesWindowsBefore) { openedStickyNotes.Remove(preExistingStickyNote); @@ -238,7 +238,7 @@ public void CreateNewStickyNote() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); + newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(newStickyNoteSession); // Resize and re-position the Sticky Notes window we are working with diff --git a/test/integration/Windows/StickyNotesTest.cs b/test/integration/Windows/StickyNotesTest.cs index da943e487..167f73b71 100644 --- a/test/integration/Windows/StickyNotesTest.cs +++ b/test/integration/Windows/StickyNotesTest.cs @@ -16,6 +16,7 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Windows; using System; @@ -26,7 +27,7 @@ public class StickyNotesTest { private const string StickyNotesAppId = @"Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App"; - protected WindowsDriver session; + protected WindowsDriver session; [OneTimeSetUp] public void BeforeAll() @@ -43,7 +44,7 @@ public void BeforeAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("app", StickyNotesAppId); appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - session = new WindowsDriver(serverUri, appCapabilities); + session = new WindowsDriver(serverUri, appCapabilities); } catch { @@ -53,7 +54,7 @@ public void BeforeAll() AppiumOptions desktopCapabilities = new AppiumOptions(); desktopCapabilities.AddAdditionalOption("app", "Root"); desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); + var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); var StickyNotesTopLevelWindow = desktopSession.FindElementByClassName("Modern_Sticky_Top_Window"); var StickyNotesTopLevelWindowHandle = StickyNotesTopLevelWindow.GetAttribute("NativeWindowHandle"); @@ -62,7 +63,7 @@ public void BeforeAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - session = new WindowsDriver(serverUri, appCapabilities); + session = new WindowsDriver(serverUri, appCapabilities); } Assert.IsNotNull(session); @@ -92,7 +93,7 @@ public void AfterAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); + var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); stickyNoteSession.Close(); } } From e3c1ef292153d3a8a4bca31ee665ba519cca18f4 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Thu, 7 Oct 2021 07:56:30 -0500 Subject: [PATCH 05/21] Drop one off web elements Add 'App' as a known capablity Transition from AddAdditionalCapability to AddAdditionalOption --- src/Appium.Net/Appium.Net.csproj | 2 +- src/Appium.Net/Appium.Net.xml | 20 +- .../Appium/Android/AndroidDriver.cs | 35 +- .../Appium/Android/AndroidElement.cs | 72 ---- .../Appium/Android/AndroidElementFactory.cs | 16 - src/Appium.Net/Appium/AppiumCapabilities.cs | 22 - src/Appium.Net/Appium/AppiumCommand.cs | 1 - .../Appium/AppiumCommandExecutionHelper.cs | 4 +- src/Appium.Net/Appium/AppiumDriver.cs | 118 +++--- src/Appium.Net/Appium/AppiumOptions.cs | 183 ++++----- src/Appium.Net/Appium/AppiumWebElement.cs | 387 ------------------ src/Appium.Net/Appium/CachedElementFactory.cs | 2 +- .../Interfaces/IFindByAndroidDataMatcher.cs | 4 +- .../Interfaces/IFindByAndroidUIAutomator.cs | 4 +- .../Interfaces/IFindByAndroidViewMatcher.cs | 4 +- src/Appium.Net/Appium/Mac/MacDriver.cs | 6 +- src/Appium.Net/Appium/Mac/MacElement.cs | 31 -- .../Appium/Mac/MacElementFactory.cs | 16 - src/Appium.Net/Appium/MobileBy.cs | 42 +- src/Appium.Net/Appium/MobileSelectors.cs | 96 +++++ .../Appium/MultiAction/TouchAction.cs | 6 +- .../AppiumPageObjectMemberDecorator.cs | 6 +- .../Appium/PageObjects/ByFactory.cs | 7 +- .../PageObjects/WebDriverUnpackUtility.cs | 2 +- .../Appium/Service/AppiumCommandExecutor.cs | 27 -- .../Appium/Service/Options/OptionCollector.cs | 2 +- src/Appium.Net/Appium/Tizen/TizenDriver.cs | 10 +- src/Appium.Net/Appium/Tizen/TizenElement.cs | 47 --- .../Appium/Tizen/TizenElementFactory.cs | 16 - .../Appium/Windows/WindowsDriver.cs | 51 +-- .../Appium/Windows/WindowsOptions.cs | 54 --- .../Appium/iOS/IOSCommandExecutionHelper.cs | 12 + src/Appium.Net/Appium/iOS/IOSDriver.cs | 44 +- src/Appium.Net/Appium/iOS/IOSElement.cs | 46 --- .../Appium/iOS/IOSElementFactory.cs | 16 - .../Appium/iOS/Interfaces/IHasSettings.cs | 36 ++ test/integration/Android/ActivityTest.cs | 7 +- test/integration/Android/AppStringsTest.cs | 4 +- test/integration/Android/ClipboardTest.cs | 4 +- test/integration/Android/ConnectionTest.cs | 12 +- .../integration/Android/CurrentPackageTest.cs | 4 +- test/integration/Android/Device/AppTests.cs | 4 +- .../Android/Device/AuthenticationTest.cs | 4 +- .../Android/Device/HideKeyboardTestCase.cs | 6 +- .../Android/Device/KeyPressTest.cs | 5 +- .../Android/Device/NetworkTests.cs | 18 +- .../Android/Device/PerformanceDataTests.cs | 8 +- .../integration/Android/Device/SystemTests.cs | 9 +- test/integration/Android/ElementTest.cs | 13 +- .../Android/ElementTestEspresso.cs | 4 +- .../integration/Android/EmulatorDeviceTime.cs | 4 +- .../Android/FileInteractionTest.cs | 4 +- test/integration/Android/IntentAndroidTest.cs | 6 +- test/integration/Android/LockDeviceTest.cs | 6 +- test/integration/Android/OrientationTest.cs | 2 +- .../Android/ScreenRecordingTest.cs | 5 +- test/integration/Android/SearchingTest.cs | 4 +- .../Android/Session/GeolocationTests.cs | 5 +- test/integration/Android/Session/LogTests.cs | 13 +- test/integration/Android/SessionDetailTest.cs | 4 +- test/integration/Android/SessionTest.cs | 4 +- test/integration/Android/SettingTest.cs | 6 +- test/integration/Android/TouchActionTest.cs | 14 +- test/integration/Android/WebviewTest.cs | 2 +- .../Appium.Net.Integration.Tests.csproj | 3 + test/integration/IOS/AlertTest.cs | 5 +- test/integration/IOS/AppStringsTest.cs | 5 +- test/integration/IOS/ClipboardTest.cs | 4 +- test/integration/IOS/Device/AppTests.cs | 4 +- test/integration/IOS/ElementTest.cs | 6 +- test/integration/IOS/LockDeviceTest.cs | 4 +- test/integration/IOS/OrientationTest.cs | 2 +- test/integration/IOS/ScreenRecordingTest.cs | 6 +- .../integration/IOS/ScrollingSearchingTest.cs | 5 +- .../IOS/SearchingClassChainTest.cs | 5 +- test/integration/IOS/SearchingTest.cs | 4 +- test/integration/IOS/Session/LogTests.cs | 3 +- test/integration/IOS/SettingTest.cs | 47 +++ test/integration/IOS/TouchActionTest.cs | 4 +- test/integration/IOS/WebviewTest.cs | 4 +- test/integration/Mac/AlertTest.cs | 4 +- .../Android/NativeAppAttributesTest.cs | 5 +- .../SeleniumAttributesCompatibilityTest.cs | 5 +- .../Android/TestThatChecksAttributeMix1.cs | 5 +- .../Android/TestThatChecksAttributeMix2.cs | 5 +- .../PageObjectTests/Android/WebViewTest.cs | 5 +- .../IOS/NativeAppAttributesTest.cs | 5 +- .../IOS/TestThatChecksAttributeMix.cs | 5 +- .../NoSuchElementTestOnAndroid.cs | 5 +- .../Other/AndroidJSWebViewTest.cs | 5 +- .../Other/AndroidTouchActionTest.cs | 5 +- .../Windows/WindowsAlarmAppTest.cs | 9 +- ...ageObjectChecksAttributeMixOnNativeApp1.cs | 33 +- ...ageObjectChecksAttributeMixOnNativeApp2.cs | 34 +- ...jectChecksAttributesForNativeAndroidApp.cs | 45 +- ...bjectChecksSeleniumFindsByCompatibility.cs | 32 +- ...PageObjectChecksAttributeMixOnNativeApp.cs | 25 +- ...geObjectChecksAttributesForNativeIOSApp.cs | 25 +- .../PageObjects/WindowsAlarmApp.cs | 30 +- .../Properties/Resources.Designer.cs | 5 +- .../ServerTests/StartingAppLocallyTest.cs | 24 +- test/integration/Windows/ClickElementTest.cs | 16 +- .../Windows/ImagesComparisonTest.cs | 13 +- .../Windows/MultiSelectControlTest.cs | 122 +++--- test/integration/Windows/PentTest.cs | 16 +- test/integration/Windows/StickyNotesTest.cs | 22 +- test/integration/helpers/Caps.cs | 20 +- 107 files changed, 820 insertions(+), 1444 deletions(-) delete mode 100644 src/Appium.Net/Appium/Android/AndroidElement.cs delete mode 100644 src/Appium.Net/Appium/Android/AndroidElementFactory.cs delete mode 100644 src/Appium.Net/Appium/AppiumCapabilities.cs delete mode 100644 src/Appium.Net/Appium/AppiumWebElement.cs delete mode 100644 src/Appium.Net/Appium/Mac/MacElement.cs delete mode 100644 src/Appium.Net/Appium/Mac/MacElementFactory.cs create mode 100644 src/Appium.Net/Appium/MobileSelectors.cs delete mode 100644 src/Appium.Net/Appium/Tizen/TizenElement.cs delete mode 100644 src/Appium.Net/Appium/Tizen/TizenElementFactory.cs delete mode 100644 src/Appium.Net/Appium/Windows/WindowsOptions.cs delete mode 100644 src/Appium.Net/Appium/iOS/IOSElement.cs delete mode 100644 src/Appium.Net/Appium/iOS/IOSElementFactory.cs create mode 100644 src/Appium.Net/Appium/iOS/Interfaces/IHasSettings.cs create mode 100644 test/integration/IOS/SettingTest.cs diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index 1d1e793e4..5882c6980 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -48,7 +48,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Appium.Net/Appium.Net.xml b/src/Appium.Net/Appium.Net.xml index 3641bdb2e..a42393a2b 100644 --- a/src/Appium.Net/Appium.Net.xml +++ b/src/Appium.Net/Appium.Net.xml @@ -159,7 +159,7 @@ The image content of the clipboard as base64-encoded string or null if there is no image on the clipboard - + Initializes a new instance of the AndroidElement class. @@ -3317,7 +3317,7 @@ The dictionary of capabilities - + Add new capabilities @@ -3348,7 +3348,7 @@ - + Initializes a new instance of the AppiumWebElement class. @@ -4265,7 +4265,7 @@ IWebElement object so that you can interact that object - IWebDriver driver = new WebDriver(new DriverOptions()); + IWebDriver driver = new RemoteWebDriver(new DriverOptions()); IWebElement elem = driver.FindElementByAndroidDataMatcher('elements()')) @@ -4278,7 +4278,7 @@ ReadOnlyCollection of IWebElement object so that you can interact with those objects - IWebDriver driver = new WebDriver(new FirefoxOptions()); + IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); ReadOnlyCollection]]> elem = driver.FindElementsByAndroidDataMatcher(elements()) @@ -4291,7 +4291,7 @@ IWebElement object so that you can interact that object - IWebDriver driver = new WebDriver(new FirefoxOptions()); + IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); IWebElement elem = driver.FindElementByAndroidUIAutomator('elements()')) @@ -4311,7 +4311,7 @@ ReadOnlyCollection of IWebElement object so that you can interact with those objects - IWebDriver driver = new WebDriver(new FirefoxOptions()); + IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); ReadOnlyCollection]]> elem = driver.FindElementsByAndroidUIAutomator(elements()) @@ -5035,7 +5035,7 @@ The image content of the clipboard as an Image object or null if there is no image on the clipboard - + Initializes a new instance of the IOSElement class. @@ -5182,7 +5182,7 @@ An object containing the Appium options. The maximum amount of time to wait for each command. - + Initializes a new instance of the MacElement class. @@ -6230,7 +6230,7 @@ a Tizen UIAutomation selector ReadOnlyCollection of IWebElement objects so that you can interact with those objects - + Initializes a new instance of the TizenElement class. diff --git a/src/Appium.Net/Appium/Android/AndroidDriver.cs b/src/Appium.Net/Appium/Android/AndroidDriver.cs index cfd64b5c7..5f1c0dd3e 100644 --- a/src/Appium.Net/Appium/Android/AndroidDriver.cs +++ b/src/Appium.Net/Appium/Android/AndroidDriver.cs @@ -25,11 +25,11 @@ namespace OpenQA.Selenium.Appium.Android { - public class AndroidDriver : AppiumDriver, IFindByAndroidUIAutomator, IFindByAndroidDataMatcher, + public class AndroidDriver : AppiumDriver, IFindByAndroidUIAutomator, IFindByAndroidDataMatcher, IStartsActivity, IHasNetworkConnection, INetworkActions, IHasClipboard, IHasPerformanceData, ISendsKeyEvents, - IPushesFiles, IHasSettings where W : IWebElement + IPushesFiles, IHasSettings { private static readonly string Platform = MobilePlatform.Android; @@ -130,37 +130,37 @@ public AndroidDriver(AppiumLocalService service, DriverOptions driverOptions, #region IFindByAndroidUIAutomator Members - public W FindElementByAndroidUIAutomator(string selector) => + public IWebElement FindElementByAndroidUIAutomator(string selector) => FindElement(MobileSelector.AndroidUIAutomator, selector); - public W FindElementByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => + public IWebElement FindElementByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); - public IReadOnlyCollection FindElementsByAndroidUIAutomator(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector)); + public IReadOnlyCollection FindElementsByAndroidUIAutomator(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector)); - public IReadOnlyCollection FindElementsByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector.Build())); + public IReadOnlyCollection FindElementsByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector.Build())); #endregion IFindByAndroidUIAutomator Members #region IFindByAndroidDataMatcher Members - public W FindElementByAndroidDataMatcher(string selector) => + public IWebElement FindElementByAndroidDataMatcher(string selector) => FindElement(MobileSelector.AndroidDataMatcher, selector); - public IReadOnlyCollection FindElementsByAndroidDataMatcher(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidDataMatcher, selector)); + public IReadOnlyCollection FindElementsByAndroidDataMatcher(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidDataMatcher, selector)); #endregion IFindByAndroidDataMatcher Members #region IFindByAndroidViewMatcher Members - public W FindElementByAndroidViewMatcher(string selector) => + public IWebElement FindElementByAndroidViewMatcher(string selector) => FindElement(MobileSelector.AndroidViewMatcher, selector); - public IReadOnlyCollection FindElementsByAndroidViewMatcher(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidViewMatcher, selector)); + public IReadOnlyCollection FindElementsByAndroidViewMatcher(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidViewMatcher, selector)); #endregion IFindByAndroidViewMatcher Members @@ -195,11 +195,12 @@ public ConnectionType ConnectionType public void PressKeyCode(int keyCode, int metastate = -1) => AppiumCommandExecutionHelper.PressKeyCode(this, keyCode, metastate); + public void PressKeyCode(KeyEvent keyEvent) => + AppiumCommandExecutionHelper.PressKeyCode(this, keyEvent); + public void LongPressKeyCode(int keyCode, int metastate = -1) => AppiumCommandExecutionHelper.LongPressKeyCode(this, keyCode, metastate); - public void PressKeyCode(KeyEvent keyEvent) => - AppiumCommandExecutionHelper.PressKeyCode(this, keyEvent); public void LongPressKeyCode(KeyEvent keyEvent) => AppiumCommandExecutionHelper.LongPressKeyCode(this, keyEvent); @@ -303,8 +304,6 @@ public IList GetPerformanceDataTypes() => public string EndTestCoverage(string intent, string path) => AndroidCommandExecutionHelper.EndTestCoverage(this, intent, path); - protected override WebElementFactory CreateElementFactory() => new AndroidElementFactory(this); - public void SetSetting(string setting, object value) => AndroidCommandExecutionHelper.SetSetting(this, setting, value); diff --git a/src/Appium.Net/Appium/Android/AndroidElement.cs b/src/Appium.Net/Appium/Android/AndroidElement.cs deleted file mode 100644 index 20fea24db..000000000 --- a/src/Appium.Net/Appium/Android/AndroidElement.cs +++ /dev/null @@ -1,72 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. - -using OpenQA.Selenium.Appium.Enums; -using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; -using System.Collections.Generic; - -namespace OpenQA.Selenium.Appium.Android -{ - public class AndroidElement : AppiumWebElement, IFindByAndroidUIAutomator, IFindByAndroidDataMatcher - { - /// - /// Initializes a new instance of the AndroidElement class. - /// - /// Driver in use. - /// ID of the element. - public AndroidElement(WebDriver parent, string id) - : base(parent, id) - { - } - - #region IFindByAndroidUIAutomator Members - - public AppiumWebElement FindElementByAndroidUIAutomator(string selector) => - FindElement(MobileSelector.AndroidUIAutomator, selector); - - public AppiumWebElement FindElementByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => - FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); - - public IReadOnlyCollection FindElementsByAndroidUIAutomator(string selector) => - FindElements(MobileSelector.AndroidUIAutomator, selector); - - public IReadOnlyCollection FindElementsByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => - FindElements(MobileSelector.AndroidUIAutomator, selector.Build()); - - #endregion IFindByAndroidUIAutomator Members - - #region IFindByAndroidDataMatcher Members - - public AppiumWebElement FindElementByAndroidDataMatcher(string selector) => - FindElement(MobileSelector.AndroidDataMatcher, selector); - - public IReadOnlyCollection FindElementsByAndroidDataMatcher(string selector) => - FindElements(MobileSelector.AndroidDataMatcher, selector); - - #endregion IFindByAndroidDataMatcher Members - - #region IFindByAndroidViewMatcher Members - - public AppiumWebElement FindElementByAndroidViewMatcher(string selector) => - FindElement(MobileSelector.AndroidViewMatcher, selector); - - public IReadOnlyCollection FindElementsByAndroidViewMatcher(string selector) => - FindElements(MobileSelector.AndroidViewMatcher, selector); - - #endregion IFindByAndroidViewMatcher Members - - public void ReplaceValue(string value) => AndroidCommandExecutionHelper.ReplaceValue(this, Id, value); - } -} \ No newline at end of file diff --git a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs deleted file mode 100644 index ef7f4f9b3..000000000 --- a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs +++ /dev/null @@ -1,16 +0,0 @@ -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium.Android -{ - public class AndroidElementFactory : CachedElementFactory - { - public AndroidElementFactory(WebDriver parentDriver) : base(parentDriver) - { - } - - protected override AndroidElement CreateCachedElement(WebDriver parentDriver, string elementId) - { - return new AndroidElement(parentDriver, elementId); - } - } -} diff --git a/src/Appium.Net/Appium/AppiumCapabilities.cs b/src/Appium.Net/Appium/AppiumCapabilities.cs deleted file mode 100644 index ff1516491..000000000 --- a/src/Appium.Net/Appium/AppiumCapabilities.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium -{ - /// - /// Appium capabilities - /// - public class AppiumCapabilities : DriverOptions - { - public override void AddAdditionalCapability(string capabilityName, object capabilityValue) - { - this.AddAdditionalOption(capabilityName, capabilityValue); - } - - public override ICapabilities ToCapabilities() - { - return GenerateDesiredCapabilities(true).AsReadOnly(); - } - } -} \ No newline at end of file diff --git a/src/Appium.Net/Appium/AppiumCommand.cs b/src/Appium.Net/Appium/AppiumCommand.cs index 575980b52..d85db13f9 100644 --- a/src/Appium.Net/Appium/AppiumCommand.cs +++ b/src/Appium.Net/Appium/AppiumCommand.cs @@ -12,7 +12,6 @@ //See the License for the specific language governing permissions and //limitations under the License. -using OpenQA.Selenium.Appium.Service; using OpenQA.Selenium.Remote; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs b/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs index a3a56730f..a8f459d35 100644 --- a/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs +++ b/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs @@ -94,7 +94,7 @@ public static void SetClipboard(IExecuteMethod executeMethod, ClipboardContentTy { case ClipboardContentType.Image: case ClipboardContentType.Url: - if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver<>)) + if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) { throw new NotImplementedException( $"Android only supports contentType: {nameof(ClipboardContentType.PlainText)}"); @@ -118,7 +118,7 @@ public static string GetClipboard(IExecuteMethod executeMethod, ClipboardContent { case ClipboardContentType.Image: case ClipboardContentType.Url: - if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver<>)) + if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) { throw new NotImplementedException( $"Android only supports contentType: {nameof(ClipboardContentType.PlainText)}"); diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index 7750540ba..06b74c27a 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -17,7 +17,6 @@ using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; using OpenQA.Selenium.Interactions; -using OpenQA.Selenium.Remote; using System; using System.Collections; using System.Collections.Generic; @@ -29,15 +28,15 @@ namespace OpenQA.Selenium.Appium { - public abstract class AppiumDriver : WebDriver, IFindsByImage, + public abstract class AppiumDriver : WebDriver, IFindsByImage, IHasSessionDetails, IHasLocation, - IFindByAccessibilityId, + IFindByAccessibilityId, IHidesKeyboard, IInteractsWithFiles, - IInteractsWithApps, IPerformsTouchActions, IRotatable, IContextAware, IGenericSearchContext, - IGenericFindsByClassName, - IGenericFindsById, IGenericFindsByCssSelector, IGenericFindsByLinkText, IGenericFindsByName, - IGenericFindsByPartialLinkText, IGenericFindsByTagName, IGenericFindsByXPath where W : IWebElement + IInteractsWithApps, IPerformsTouchActions, IRotatable, IContextAware, IGenericSearchContext, + IGenericFindsByClassName, + IGenericFindsById, IGenericFindsByCssSelector, IGenericFindsByLinkText, IGenericFindsByName, + IGenericFindsByPartialLinkText, IGenericFindsByTagName, IGenericFindsByXPath { private const string NativeApp = "NATIVE_APP"; @@ -46,9 +45,7 @@ public abstract class AppiumDriver : WebDriver, IFindsByImage, public AppiumDriver(ICommandExecutor commandExecutor, ICapabilities appiumOptions) : base(commandExecutor, appiumOptions) { - // TODO: Laolu - Suspect this will an issue AppiumCommand.Merge(commandExecutor); - //ElementFactory = CreateElementFactory(); } public AppiumDriver(ICapabilities appiumOptions) @@ -95,89 +92,82 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim #region Generic FindMethods - public new W FindElement(By by) => - (W) base.FindElement(by); + public new IWebElement FindElement(By by) => + base.FindElement(by); - public new ReadOnlyCollection FindElements(By by) => - ConvertToExtendedWebElementCollection(base.FindElements(by)); + public new ReadOnlyCollection FindElements(By by) => + ConvertToExtendedWebElementCollection(base.FindElements(by)); - public new W FindElement(string by, string value) => (W) base.FindElement(by, value); + public new IWebElement FindElement(string by, string value) => base.FindElement(by, value); - public new IReadOnlyCollection FindElements(string selector, string value) => - ConvertToExtendedWebElementCollection(base.FindElements(selector, value)); + public new IReadOnlyCollection FindElements(string selector, string value) => + ConvertToExtendedWebElementCollection(base.FindElements(selector, value)); - public new W FindElementByClassName(string className) => - (W) base.FindElement(MobileSelector.ClassName, className); + public IWebElement FindElementByClassName(string className) => + base.FindElement(MobileSelector.ClassName, className); - public new ReadOnlyCollection FindElementsByClassName(string className) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); + public ReadOnlyCollection FindElementsByClassName(string className) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); - public new W FindElementById(string id) => - (W) base.FindElement(MobileSelector.Id, id); + public IWebElement FindElementById(string id) => + base.FindElement(MobileSelector.Id, id); - public new ReadOnlyCollection FindElementsById(string id) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); + public ReadOnlyCollection FindElementsById(string id) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); - public new W FindElementByCssSelector(string cssSelector) => throw new NotImplementedException(); - //(W) base.FindElementByCssSelector(cssSelector); + public IWebElement FindElementByCssSelector(string cssSelector) => + base.FindElement(By.CssSelector(cssSelector)); - public new ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => throw new NotImplementedException(); - //ConvertToExtendedWebElementCollection(base.FindElementsByCssSelector(cssSelector)); + public ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => + ConvertToExtendedWebElementCollection(base.FindElements(By.CssSelector(cssSelector))); - public new W FindElementByLinkText(string linkText) => throw new NotImplementedException(); - //(W) base.FindElementByLinkText(linkText); + public IWebElement FindElementByLinkText(string linkText) => + base.FindElement(By.LinkText(linkText)); - public new ReadOnlyCollection FindElementsByLinkText(string linkText) => throw new NotImplementedException(); - //ConvertToExtendedWebElementCollection(base.FindElementsByLinkText(linkText)); + public ReadOnlyCollection FindElementsByLinkText(string linkText) => + ConvertToExtendedWebElementCollection(base.FindElements(By.LinkText(linkText))); - public new W FindElementByName(string name) => - (W) base.FindElement(MobileSelector.Name, name); + public IWebElement FindElementByName(string name) => + base.FindElement(MobileSelector.Name, name); - public new ReadOnlyCollection FindElementsByName(string name) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); + public ReadOnlyCollection FindElementsByName(string name) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); - public new W FindElementByPartialLinkText(string partialLinkText) => throw new NotImplementedException(); - //(W) base.FindElementByPartialLinkText(partialLinkText); + public IWebElement FindElementByPartialLinkText(string partialLinkText) => + base.FindElement(By.PartialLinkText(partialLinkText)); - public new ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => throw new NotImplementedException(); - //ConvertToExtendedWebElementCollection(base.FindElementsByPartialLinkText(partialLinkText)); + public ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => + ConvertToExtendedWebElementCollection(base.FindElements(By.PartialLinkText(partialLinkText))); - public new W FindElementByTagName(string tagName) => - (W) base.FindElement(MobileSelector.TagName, tagName); + public IWebElement FindElementByTagName(string tagName) => + base.FindElement(MobileSelector.TagName, tagName); - public new ReadOnlyCollection FindElementsByTagName(string tagName) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.TagName, tagName)); + public ReadOnlyCollection FindElementsByTagName(string tagName) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.TagName, tagName)); - public new W FindElementByXPath(string xpath) => throw new NotImplementedException(); - //(W) base.FindElementByXPath(xpath); + public IWebElement FindElementByXPath(string xpath) => + base.FindElement(By.XPath(xpath)); - public new ReadOnlyCollection FindElementsByXPath(string xpath) => throw new NotImplementedException(); - // ConvertToExtendedWebElementCollection(base.FindElementsByXPath(xpath)); + public ReadOnlyCollection FindElementsByXPath(string xpath) => + ConvertToExtendedWebElementCollection(base.FindElements(By.XPath(xpath))); + + #endregion #region IFindByAccessibilityId Members - public W FindElementByAccessibilityId(string selector) => FindElement(MobileSelector.Accessibility, selector); + public IWebElement FindElementByAccessibilityId(string selector) => FindElement(MobileSelector.Accessibility, selector); - public IReadOnlyCollection FindElementsByAccessibilityId(string selector) => + public IReadOnlyCollection FindElementsByAccessibilityId(string selector) => FindElements(MobileSelector.Accessibility, selector); #endregion IFindByAccessibilityId Members #region IFindsByImage Members - public W FindElementByImage(string base64Template) => FindElement(MobileSelector.Image, base64Template); + public IWebElement FindElementByImage(string base64Template) => FindElement(MobileSelector.Image, base64Template); - public IReadOnlyCollection FindElementsByImage(string base64Template) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.Image, base64Template)); - - #endregion - - #endregion - - #region Public Methods - - protected override Response Execute(string driverCommandToExecute, Dictionary parameters) => - base.Execute(driverCommandToExecute, parameters); + public IReadOnlyCollection FindElementsByImage(string base64Template) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.Image, base64Template)); Response IExecuteMethod.Execute(string commandName, Dictionary parameters) => base.Execute(commandName, parameters); @@ -476,7 +466,7 @@ public void PerformTouchAction(ITouchAction touchAction) #region W3C Actions - // Replace or hide the original WebElement.PerformActions base method so that it does not require + // Replace or hide the original RemoteWebElement.PerformActions base method so that it does not require // AppiumDriver to be fully compliant with W3CWireProtocol specification to execute W3C actions command. public new void PerformActions(IList actionSequenceList) { @@ -659,8 +649,6 @@ public SimilarityMatchingResult GetImagesSimilarity(string base64Image1, string #region Support methods - protected abstract WebElementFactory CreateElementFactory(); - internal static ICapabilities SetPlatformToCapabilities(DriverOptions dc, string desiredPlatform) { dc.PlatformName = desiredPlatform; diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index e3da1d64f..7529bc2f1 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -1,90 +1,64 @@ -using OpenQA.Selenium.Remote; +using OpenQA.Selenium.Appium.Enums; +using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; +using System.Globalization; namespace OpenQA.Selenium.Appium { - /// - /// Abstract class to manage options specific to Appium-based browsers. + /// Generic browser options /// public class AppiumOptions : DriverOptions { - - // private const string AutomationAppiumOption = "appium:automationName"; - // private const string DeviceAppiumOption = "appium:deviceName"; - // private const string AppAppiumOption = "appium:app"; - private const string PlatformVersionAppiumOption = "appium:platformVersion"; - - // private string automationName; - // private string deviceName; - // private string app; - private string platformVersion; - - private Dictionary additionalAppiumOptions = new Dictionary(); + private const string AutomationNameOption = "appium:automationName"; + private const string DeviceNameOption = "appium:deviceName"; + private const string AppOption = "appium:app"; + private const string PlatformVersionOption = "appium:platformVersion"; + + private readonly Dictionary additionalAppiumOptions = new Dictionary(); /// /// Initializes a new instance of the class. /// - /// - public AppiumOptions() : base() { - // this.AddKnownCapabilityName(this.CapabilityName, "current AppiumOptions class instance"); - // this.AddKnownCapabilityName(AppiumOptions.AutomationAppiumOption, "AutomationName property"); - // this.AddKnownCapabilityName(AppiumOptions.DeviceAppiumOption, "DeviceName property"); - // this.AddKnownCapabilityName(AppiumOptions.AppAppiumOption, "App property"); - this.AddKnownCapabilityName(AppiumOptions.PlatformVersionAppiumOption, "PlatformVersion property"); + this.AddKnownCapabilityName(AppiumOptions.AutomationNameOption, "AutomationName property"); + this.AddKnownCapabilityName(AppiumOptions.DeviceNameOption, "DeviceName property"); + this.AddKnownCapabilityName(AppiumOptions.AppOption, "Application property"); + this.AddKnownCapabilityName("app", "Application property"); + this.AddKnownCapabilityName(AppiumOptions.PlatformVersionOption, "PlatformVersion property"); } /// - /// Gets the vendor prefix to apply to Appium-specific capability names. - /// - protected virtual string VendorPrefix { get; } - - /// - /// Gets the name of the capability used to store Appium options in - /// an object. + /// Gets the vendor prefix to apply to Chromium-specific capability names. /// - public virtual string CapabilityName { get; } - + protected string VendorPrefix + { + get { return "appium"; } + } /// /// Gets or sets the AutoamtionName of the Appium browser's (e.g. Appium, Selendroid and so on) setting. /// - //public string AutomationName - //{ - // get { return this.automationName; } - // set { this.automationName = value; } - //} + public string AutomationName {get; set;} + /// /// Gets or sets the DeviceName of the Appium browser's (e.g. Pixel 3XL, Galaxy S20 and so on) setting. /// - //public string DeviceName - //{ - // get { return this.deviceName; } - // set { this.deviceName = value; } - //} + public string DeviceName {get; set;} /// /// Gets or sets the Capability name used for the apllication setting. /// - //public string App - //{ - // get { return this.app; } - // set { this.app = value; } - //} + public string App {get; set;} /// /// Gets or sets the PlatformVersion of the Appium browser's (e.g. 10, 11 and so on) setting. /// - public string PlatformVersion - { - get { return this.platformVersion; } - set { this.platformVersion = value; } - } + public string PlatformVersion { get; set; } /// /// Provides a means to add additional capabilities not yet added as type safe options @@ -104,7 +78,20 @@ public string PlatformVersion public void AddAdditionalAppiumOption(string optionName, object optionValue) { this.ValidateCapabilityName(optionName); - this.additionalAppiumOptions[optionName] = optionValue; + + string name; + + if (optionName.Contains(":")) + { + name = optionName; + } + else + { + name = $"{this.VendorPrefix}:{optionName}"; + } + + this.ValidateCapabilityName(name); + this.additionalAppiumOptions[name] = optionValue; } /// @@ -115,83 +102,56 @@ public void AddAdditionalAppiumOption(string optionName, object optionValue) [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalChromeOption method for adding additional options")] public override void AddAdditionalCapability(string capabilityName, object capabilityValue) { - - this.AddAdditionalCapability(capabilityName, capabilityValue, false); + this.AddAdditionalAppiumOption(capabilityName, capabilityValue); } - [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalChromeOption method for adding additional options")] - public void AddAdditionalCapability(string capabilityName, object capabilityValue, bool isGlobalCapability) - { - if (isGlobalCapability) - { - this.AddAdditionalOption(capabilityName, capabilityValue); - } - else - { - this.AddAdditionalAppiumOption(capabilityName, capabilityValue); - } - } - - /// + /// /// A desired capability public override ICapabilities ToCapabilities() { + var capabilities = this.GenerateDesiredCapabilities(true); - Dictionary appiumOptions = this.BuildAppiumOptionsDictionary(); - - IWritableCapabilities capabilities = this.GenerateDesiredCapabilities(false); - capabilities.SetCapability(this.CapabilityName, appiumOptions); - - AddVendorSpecificAppiumCapabilities(capabilities); - - return capabilities.AsReadOnly(); - - //RemoteSessionSettings remote = new RemoteSessionSettings(); - - //foreach (var keyVal in this.ToDictionary()) - //{ - // remote.AddMetadataSetting(keyVal.Key, keyVal.Value); - //} + foreach(var option in this.BuildAppiumOptionsDictionary()) + { + capabilities.SetCapability(option.Key, option.Value); + } - //return remote; + return capabilities; } - /// - /// Adds vendor-specific capabilities for Appium-based browsers. - /// - /// The capabilities to add. - protected virtual void AddVendorSpecificAppiumCapabilities(IWritableCapabilities capabilities) + protected virtual Dictionary BuildAppiumKnownOptionsDictionary() { - } + Dictionary knownOptions = new Dictionary(); + if (!string.IsNullOrEmpty(this.App)) + { + knownOptions[AppOption] = this.App; + } - protected virtual Dictionary BuildAppiumOptionsDictionary() - { - Dictionary appiumOptions = new Dictionary(); - - - //if (!string.IsNullOrEmpty(this.automationName)) - //{ - // appiumOptions[AutomationAppiumOption] = this.automationName; - //} - - //if (!string.IsNullOrEmpty(this.deviceName)) - //{ - // appiumOptions[DeviceAppiumOption] = this.deviceName; - //} - //if (!string.IsNullOrEmpty(this.app)) - //{ - // appiumOptions[AppAppiumOption] = this.app; - //} - if (!string.IsNullOrEmpty(this.platformVersion)) + if (!string.IsNullOrEmpty(this.AutomationName)) + { + knownOptions[AutomationNameOption] = this.AutomationName; + } + + if (!string.IsNullOrEmpty(this.DeviceName)) + { + knownOptions[DeviceNameOption] = this.DeviceName; + } + + if (!string.IsNullOrEmpty(this.PlatformVersion)) { - appiumOptions[PlatformVersionAppiumOption] = this.platformVersion; + knownOptions[PlatformVersionOption] = this.PlatformVersion; } + return knownOptions; + } + private Dictionary BuildAppiumOptionsDictionary() + { + var appiumOptions = BuildAppiumKnownOptionsDictionary(); foreach (KeyValuePair pair in this.additionalAppiumOptions) { @@ -201,13 +161,10 @@ protected virtual Dictionary BuildAppiumOptionsDictionary() return appiumOptions; } - public IDictionary ToDictionary() { var writeable = this.GenerateDesiredCapabilities(true); return (writeable.AsReadOnly() as ReadOnlyDesiredCapabilities).ToDictionary(); } - - } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/AppiumWebElement.cs b/src/Appium.Net/Appium/AppiumWebElement.cs deleted file mode 100644 index 7ba1c1bca..000000000 --- a/src/Appium.Net/Appium/AppiumWebElement.cs +++ /dev/null @@ -1,387 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. - -using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Internal; -using OpenQA.Selenium.Remote; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Collections; -using OpenQA.Selenium.Appium.Enums; -using System; -using System.Drawing; - -namespace OpenQA.Selenium.Appium -{ - /// - /// AppiumWebElement allows you to have access to specific items that are found on the page. - /// - /// - /// - /// - /// - /// [Test] - /// public void TestGoogle() - /// { - /// driver = new AppiumDriver(); - /// AppiumWebElement elem = driver.FindElement(By.Name("q")); - /// elem.SendKeys("Cheese please!"); - /// } - /// - /// - public abstract class AppiumWebElement : WebElement , IMobileElement, IWebElementCached - { - /// - /// Initializes a new instance of the AppiumWebElement class. - /// - /// Driver in use. - /// ID of the element. - public AppiumWebElement(WebDriver parent, string id) - : base(parent, id) - { - } - - #region Cache - - protected Dictionary cache = null; - - public virtual void SetCacheValues(Dictionary cacheValues) - { - cache = new Dictionary(cacheValues); - } - - public virtual void ClearCache() - { - if (cache != null) - { - cache.Clear(); - } - } - - public virtual void DisableCache() - { - cache = null; - } - - public override string TagName => CacheValue("name", () => base.TagName)?.ToString(); - - public override string Text => CacheValue("text", () => base.Text)?.ToString(); - - public override bool Displayed => Convert.ToBoolean(CacheValue("displayed", () => Execute(DriverCommand.IsElementDisplayed, new Dictionary{{"id", Id}}).Value)); - - public override bool Enabled => Convert.ToBoolean(CacheValue("enabled", () => base.Enabled)); - - public override bool Selected => Convert.ToBoolean(CacheValue("selected", () => base.Selected)); - - public override Point Location => cache == null ? base.Location : Rect.Location; - - public override Size Size => cache == null ? base.Size : Rect.Size; - - public virtual Rectangle Rect - { - get - { - Dictionary rect = null; - object value; - if (cache != null && cache.TryGetValue("rect", out value)) - { - rect = value as Dictionary; - } - if (rect == null) - { - Point location = base.Location; - Size size = base.Size; - rect = new Dictionary { - {"x", location.X }, - {"y", location.Y }, - {"width", size.Width }, - {"height", size.Height }, - }; - if (cache != null) - { - cache["rect"] = rect; - } - } - return new Rectangle( - Convert.ToInt32(rect["x"]), - Convert.ToInt32(rect["y"]), - Convert.ToInt32(rect["width"]), - Convert.ToInt32(rect["height"])); - } - } - - public override string GetAttribute(string attributeName) => CacheValue( - "attribute/" + attributeName, - () => _GetAttribute(attributeName) - )?.ToString(); - - private string _GetAttribute(string attributeName) - { - Response commandResponse = null; - string attributeValue = string.Empty; - Dictionary parameters = new Dictionary(); - - parameters.Add("id", Id); - parameters.Add("name", attributeName); - commandResponse = Execute(DriverCommand.GetElementAttribute, parameters); - - if (commandResponse.Value == null) - { - return null; - } - - attributeValue = commandResponse.Value.ToString(); - - // Normalize string values of boolean results as lowercase. - if (commandResponse.Value is bool) - { - attributeValue = attributeValue.ToLowerInvariant(); - } - - return attributeValue; - } - - public override string GetCssValue(string propertyName) => CacheValue( - "css/" + propertyName, - () => base.GetCssValue(propertyName) - )?.ToString(); - - public override string GetProperty(string propertyName) => CacheValue( - "property/" + propertyName, - () => base.GetProperty(propertyName) - )?.ToString(); - - protected virtual object CacheValue(string key, Func getter) - { - if (cache == null) - { - return getter(); - } - object value; - if (!cache.TryGetValue(key, out value)) - { - value = getter(); - cache.Add(key, value); - } - return value; - } - - #endregion - - #region MJSonMethods - - /// - /// Rotates Device. - /// - /// rotations options like the following: - /// new Dictionary {{"x", 114}, {"y", 198}, {"duration", 5}, - /// {"radius", 3}, {"rotation", 220}, {"touchCount", 2}} - /// - public void Rotate(Dictionary opts) - { - Dictionary parameters = new Dictionary(); - foreach (KeyValuePair opt in opts) - { - parameters.Add(opt.Key, opt.Value); - } - parameters.Add("element", Id); - Execute(AppiumDriverCommand.Rotate, parameters); - } - - #endregion - - #region FindMethods - - #region IFindByAccessibilityId Members - - public AppiumWebElement FindElementByAccessibilityId(string selector) => - FindElement(MobileSelector.Accessibility, selector); - - public IReadOnlyCollection FindElementsByAccessibilityId(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.Accessibility, selector)); - - #endregion IFindByAccessibilityId Members - - /// - /// Finds the first element in the page that matches the OpenQA.Selenium.By object - /// - /// Mechanism to find element - /// first element found - public new AppiumWebElement FindElement(By by) => (AppiumWebElement) base.FindElement(by); - - /// - /// Find the elements on the page by using the object and returns a ReadonlyCollection of the Elements on the page - /// - /// Mechanism to find element - /// ReadOnlyCollection of elements found FindElements(By by) => - ConvertToExtendedWebElementCollection(base.FindElements(by)); - - public new AppiumWebElement FindElement(string by, string value) => - (AppiumWebElement) base.FindElement(by, value); - - public new IReadOnlyCollection FindElements(string selector, string value) => - ConvertToExtendedWebElementCollection(base.FindElements(selector, value)); - - /// - /// Finds the first element in the page that matches the class name supplied - /// - /// CSS class name on the element - /// first element found - (AppiumWebElement) base.FindElement(MobileSelector.ClassName, className); - - /// - /// Finds a list of elements that match the class name supplied - /// - /// CSS class name on the element - /// ReadOnlyCollection of elements found FindElementsByClassName(string className) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); - - /// - /// Finds the first element in the page that matches the ID supplied - /// - /// ID of the element - /// First element found - public AppiumWebElement FindElementById(string id) => - (AppiumWebElement) base.FindElement(MobileSelector.Id, id); - - /// - /// Finds a list of elements that match the ID supplied - /// - /// ID of the element - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsById(string id) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); - - /// - /// Finds the first element matching the specified CSS selector - /// - /// The CSS selector to match - /// First element found - public AppiumWebElement FindElementByCssSelector(string cssSelector) => - (AppiumWebElement) base.FindElement(By.CssSelector(cssSelector)); - - /// - /// Finds a list of elements that match the CSS selector - /// - /// The CSS selector to match - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => - ConvertToExtendedWebElementCollection(base.FindElements(By.CssSelector(cssSelector))); - - /// - /// Finds the first of elements that match the link text supplied - /// - /// Link text of element - /// First element found - public AppiumWebElement FindElementByLinkText(string linkText) => - (AppiumWebElement) base.FindElement(By.LinkText(linkText)); - - /// - /// Finds a list of elements that match the link text supplied - /// - /// Link text of element - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsByLinkText(string linkText) => - ConvertToExtendedWebElementCollection(base.FindElements(By.LinkText(linkText))); - - /// - /// Finds the first of elements that match the name supplied - /// - /// Name of the element on the page - /// First element found - public AppiumWebElement FindElementByName(string name) => - (AppiumWebElement) base.FindElement(MobileSelector.Name, name); - - /// - /// Finds a list of elements that match the name supplied - /// - /// Name of the element on the page - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsByName(string name) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); - - /// - /// Finds the first of elements that match the part of the link text supplied - /// - /// Part of the link text - /// First element found - public AppiumWebElement FindElementByPartialLinkText(string partialLinkText) => - (AppiumWebElement) base.FindElement(By.PartialLinkText(partialLinkText)); - - /// - /// Finds a list of elements that match the part of the link text supplied - /// - /// Part of the link text - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => - ConvertToExtendedWebElementCollection(base.FindElements(By.PartialLinkText(partialLinkText))); - - /// - /// Finds the first of elements that match the DOM Tag supplied - /// - /// DOM tag name of the element being searched - /// First element found - public AppiumWebElement FindElementByTagName(string tagName) => - (AppiumWebElement) base.FindElement(MobileSelector.TagName, tagName); - - /// - /// Finds a list of elements that match the DOM Tag supplied - /// - /// DOM tag name of the element being searched - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsByTagName(string tagName) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.TagName, tagName)); - - /// - /// Finds the first of elements that match the XPath supplied - /// - /// xpath to the element - /// First element found - public AppiumWebElement FindElementByXPath(string xpath) => - (AppiumWebElement) base.FindElement(By.XPath(xpath)); - - /// - /// Finds a list of elements that match the XPath supplied - /// - /// xpath to the element - /// ReadOnlyCollection of elements found - public ReadOnlyCollection FindElementsByXPath(string xpath) => - ConvertToExtendedWebElementCollection(base.FindElements(By.XPath(xpath))); - - #endregion - - public void SetImmediateValue(string value) => Execute(AppiumDriverCommand.SetValue, - new Dictionary() {["id"] = Id, ["value"] = value}); - - private ReadOnlyCollection ConvertToExtendedWebElementCollection(IEnumerable list) - { - List result = new List(); - foreach (var element in list) - { - result.Add((AppiumWebElement) element); - } - return result.AsReadOnly(); - } - - public new Response Execute(string commandName, Dictionary parameters) => - base.Execute(commandName, parameters); - - public Response Execute(string driverCommand) => Execute(driverCommand, null); - - public new string Id => base.Id; - } -} \ No newline at end of file diff --git a/src/Appium.Net/Appium/CachedElementFactory.cs b/src/Appium.Net/Appium/CachedElementFactory.cs index ce47e514e..dd16b9ce0 100644 --- a/src/Appium.Net/Appium/CachedElementFactory.cs +++ b/src/Appium.Net/Appium/CachedElementFactory.cs @@ -25,7 +25,7 @@ public virtual bool CacheElementAttributes public override WebElement CreateElement(Dictionary elementDictionary) { string elementId = GetElementId(elementDictionary); - T cachedElement = CreateCachedElement(ParentDriver as WebDriver, elementId); + T cachedElement = CreateCachedElement(ParentDriver, elementId); if (CacheElementAttributes) { cachedElement.SetCacheValues(elementDictionary); diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs index bda8ee662..8a66b98bc 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidDataMatcher : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new WebDriver(new DriverOptions()); + /// IWebDriver driver = new RemoteWebDriver(new DriverOptions()); /// IWebElement elem = driver.FindElementByAndroidDataMatcher('elements()')) /// /// @@ -38,7 +38,7 @@ public interface IFindByAndroidDataMatcher : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new WebDriver(new FirefoxOptions()); + /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidDataMatcher(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs index 1d8cbf411..6e4eb0b2d 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidUIAutomator : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new WebDriver(new FirefoxOptions()); + /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); /// IWebElement elem = driver.FindElementByAndroidUIAutomator('elements()')) /// /// @@ -46,7 +46,7 @@ public interface IFindByAndroidUIAutomator : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new WebDriver(new FirefoxOptions()); + /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidUIAutomator(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs index 7cdfd17a0..a32b9b5d1 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidViewMatcher : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new WebDriver(new DriverOptions()); + /// IWebDriver driver = new RemoteWebDriver(new DriverOptions()); /// IWebElement elem = driver.FindElementByAndroidViewMatcher('elements()')) /// /// @@ -38,7 +38,7 @@ public interface IFindByAndroidViewMatcher : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new WebDriver(new FirefoxOptions()); + /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidViewMatcher(elements()) /// /// diff --git a/src/Appium.Net/Appium/Mac/MacDriver.cs b/src/Appium.Net/Appium/Mac/MacDriver.cs index 8d389b793..cfaec4efc 100644 --- a/src/Appium.Net/Appium/Mac/MacDriver.cs +++ b/src/Appium.Net/Appium/Mac/MacDriver.cs @@ -14,12 +14,11 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; namespace OpenQA.Selenium.Appium.Mac { - public class MacDriver : AppiumDriver where W : IWebElement + public class MacDriver : AppiumDriver { private static readonly string Platform = MobilePlatform.MacOS; @@ -114,8 +113,5 @@ public MacDriver(AppiumLocalService service, AppiumOptions AppiumOptions, TimeSp : base(service, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) { } - - - protected override WebElementFactory CreateElementFactory() => new MacElementFactory(this); } } diff --git a/src/Appium.Net/Appium/Mac/MacElement.cs b/src/Appium.Net/Appium/Mac/MacElement.cs deleted file mode 100644 index c2865b5ae..000000000 --- a/src/Appium.Net/Appium/Mac/MacElement.cs +++ /dev/null @@ -1,31 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. - -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium.Mac -{ - public class MacElement : AppiumWebElement - { - /// - /// Initializes a new instance of the MacElement class. - /// - /// Driver in use. - /// ID of the element. - public MacElement(WebDriver parent, string id) - : base(parent, id) - { - } - } -} diff --git a/src/Appium.Net/Appium/Mac/MacElementFactory.cs b/src/Appium.Net/Appium/Mac/MacElementFactory.cs deleted file mode 100644 index 1f65a0b6c..000000000 --- a/src/Appium.Net/Appium/Mac/MacElementFactory.cs +++ /dev/null @@ -1,16 +0,0 @@ -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium.Mac -{ - public class MacElementFactory : CachedElementFactory - { - public MacElementFactory(WebDriver parentDriver) : base(parentDriver) - { - } - - protected override MacElement CreateCachedElement(WebDriver parentDriver, string elementId) - { - return new MacElement(parentDriver, elementId); - } - } -} diff --git a/src/Appium.Net/Appium/MobileBy.cs b/src/Appium.Net/Appium/MobileBy.cs index 3c54724bc..f488d336f 100644 --- a/src/Appium.Net/Appium/MobileBy.cs +++ b/src/Appium.Net/Appium/MobileBy.cs @@ -27,7 +27,7 @@ public abstract class MobileBy : By private readonly string _searchingCriteriaName; - internal MobileBy(string selector, string searchingCriteriaName) + internal MobileBy(string selector, string searchingCriteriaName) : base(selector, searchingCriteriaName) { if (string.IsNullOrEmpty(selector)) { @@ -38,18 +38,21 @@ internal MobileBy(string selector, string searchingCriteriaName) _searchingCriteriaName = searchingCriteriaName; } - /// - /// Find a single element. - /// - /// Context used to find the element. - /// The element that matches - public override IWebElement FindElement(ISearchContext context) - { - if (context is IFindsByFluentSelector finder) - return finder.FindElement(_searchingCriteriaName, selector); - throw new InvalidCastException($"Unable to cast {context.GetType().FullName} " + - $"to {nameof(IFindsByFluentSelector)}"); - } + ///// + ///// Find a single element. + ///// + ///// Context used to find the element. + ///// The element that matches + //public override IWebElement FindElement(ISearchContext context) + //{ + // var by = new By(_searchingCriteriaName, selector); + // return context.FindElement(new By(_searchingCriteriaName, selector)); + + // //////////if (context is IFindsByFluentSelector finder) + // ////////// return finder.FindElement(_searchingCriteriaName, selector); + // //////////throw new InvalidCastException($"Unable to cast {context.GetType().FullName} " + + // ////////// $"to {nameof(IFindsByFluentSelector)}"); + //} /// /// Finds many elements @@ -191,19 +194,6 @@ public ByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) : base(select { } - public override IWebElement FindElement(ISearchContext context) - { - if (context is IFindByAndroidUIAutomator finder) - return finder.FindElementByAndroidUIAutomator(selector); - return base.FindElement(context); - } - - public override ReadOnlyCollection FindElements(ISearchContext context) - { - if (context is IFindByAndroidUIAutomator finder) - return finder.FindElementsByAndroidUIAutomator(selector).ToList().AsReadOnly(); - return base.FindElements(context); - } public override string ToString() => $"ByAndroidUIAutomator({selector})"; diff --git a/src/Appium.Net/Appium/MobileSelectors.cs b/src/Appium.Net/Appium/MobileSelectors.cs new file mode 100644 index 000000000..afcaf6e65 --- /dev/null +++ b/src/Appium.Net/Appium/MobileSelectors.cs @@ -0,0 +1,96 @@ +using OpenQA.Selenium.Appium.Enums; +using OpenQA.Selenium.Appium.Interfaces; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace OpenQA.Selenium.Appium +{ + public static class MobileSelectors + { + public static IWebElement FindElementByAccessibilityId(this IWebElement searchContext, string selector) + { + return (searchContext as WebDriver).FindElement(MobileSelector.Accessibility, selector); + } + + public static ReadOnlyCollection FindElementsByAccessibilityId(this IWebElement searchContext, string selector) + { + return (searchContext as WebDriver).FindElements(MobileSelector.Accessibility, selector); + } + + public static IWebElement FindElementByName(this IWebElement searchContext, string selector) + { + return (searchContext as WebDriver).FindElement(MobileSelector.Name, selector); + } + + public static ReadOnlyCollection FindElementsByName(this IWebElement searchContext, string selector) + { + return (searchContext as WebDriver).FindElements(MobileSelector.Name, selector); + } + + #region IFindByIosUIAutomation Members + + public static IWebElement FindElementByIosUIAutomation(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElement(MobileSelector.iOSAutomatoion, selector); + + public static IReadOnlyCollection FindElementsByIosUIAutomation(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElements(MobileSelector.iOSAutomatoion, selector); + + #endregion IFindByIosUIAutomation Members + + #region IFindByAndroidUIAutomator Members + + public static IWebElement FindElementByAndroidUIAutomator(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElement(MobileSelector.AndroidUIAutomator, selector); + + public static IWebElement FindElementByAndroidUIAutomator(this IWebElement searchContext, IUiAutomatorStatementBuilder selector) => + (searchContext as WebDriver).FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); + + public static IReadOnlyCollection FindElementsByAndroidUIAutomator(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElements(MobileSelector.AndroidUIAutomator, selector); + + public static IReadOnlyCollection FindElementsByAndroidUIAutomator(this IWebElement searchContext, IUiAutomatorStatementBuilder selector) => + (searchContext as WebDriver).FindElements(MobileSelector.AndroidUIAutomator, selector.Build()); + + #endregion IFindByAndroidUIAutomator Members + + #region IFindByAndroidDataMatcher Members + + public static IWebElement FindElementByAndroidDataMatcher(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElement(MobileSelector.AndroidDataMatcher, selector); + + public static IReadOnlyCollection FindElementsByAndroidDataMatcher(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElements(MobileSelector.AndroidDataMatcher, selector); + + #endregion IFindByAndroidDataMatcher Members + + #region IFindByAndroidViewMatcher Members + + public static IWebElement FindElementByAndroidViewMatcher(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElement(MobileSelector.AndroidViewMatcher, selector); + + public static IReadOnlyCollection FindElementsByAndroidViewMatcher(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElements(MobileSelector.AndroidViewMatcher, selector); + + #endregion IFindByAndroidViewMatcher Members + + #region IFindByTizenUIAutomation Members + + public static IWebElement FindElementByTizenUIAutomation(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElement(MobileSelector.TizenUIAutomation, selector); + + public static IReadOnlyCollection FindElementsByTizenUIAutomation(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElements(MobileSelector.TizenUIAutomation, selector); + + #endregion IFindByTizenUIAutomation Members + + #region IFindByWindowsUIAutomation Members + + public static IWebElement FindElementByWindowsUIAutomation(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElement(MobileSelector.WindowsUIAutomation, selector); + + public static IReadOnlyCollection FindElementsByWindowsUIAutomation(this IWebElement searchContext, string selector) => + (searchContext as WebDriver).FindElements(MobileSelector.WindowsUIAutomation, selector); + + #endregion IFindByWindowsUIAutomation Members + } +} diff --git a/src/Appium.Net/Appium/MultiAction/TouchAction.cs b/src/Appium.Net/Appium/MultiAction/TouchAction.cs index dbf8cc827..e0479107e 100644 --- a/src/Appium.Net/Appium/MultiAction/TouchAction.cs +++ b/src/Appium.Net/Appium/MultiAction/TouchAction.cs @@ -28,9 +28,9 @@ internal class Step private string GetIdForElement(IWebElement el) { - WebElement WebElement = el as WebElement; - if (WebElement != null) - return (string) typeof(WebElement).GetProperty("Id", + RemoteWebElement remoteWebElement = el as RemoteWebElement; + if (remoteWebElement != null) + return (string) typeof(OpenQA.Selenium.Remote.RemoteWebElement).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(el, null); diff --git a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs index ab168cf00..68b68de39 100644 --- a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs +++ b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs @@ -45,10 +45,6 @@ internal static List ListOfAvailableElementTypes listAvailableElementTypes = new List(); listAvailableElementTypes.Add(typeof(IWebElement)); listAvailableElementTypes.Add(typeof(WebElement)); - listAvailableElementTypes.Add(typeof(AppiumWebElement)); - listAvailableElementTypes.Add(typeof(AndroidElement)); - listAvailableElementTypes.Add(typeof(IOSElement)); - // listAvailableElementTypes.Add(typeof(WindowsElement)); } return listAvailableElementTypes; @@ -70,7 +66,7 @@ private static Type GetTypeOfASingleElement(Type targetType, MemberInfo member) { if (typeof(IWebElement).Equals(targetType)) return targetType; - else if (GenericsUtility.MatchGenerics(typeof(IMobileElement<>), ListOfAvailableElementTypes, targetType)) + else if (GenericsUtility.MatchGenerics(typeof(IWebElement), ListOfAvailableElementTypes, targetType)) return targetType; return null; diff --git a/src/Appium.Net/Appium/PageObjects/ByFactory.cs b/src/Appium.Net/Appium/PageObjects/ByFactory.cs index e6e2a2299..fe9922b8c 100644 --- a/src/Appium.Net/Appium/PageObjects/ByFactory.cs +++ b/src/Appium.Net/Appium/PageObjects/ByFactory.cs @@ -18,6 +18,7 @@ using OpenQA.Selenium.Appium.PageObjects.Attributes; using OpenQA.Selenium.Appium.PageObjects.Attributes.Abstract; using OpenQA.Selenium.Appium.Windows; +using OpenQA.Selenium.Remote; using SeleniumExtras.PageObjects; using System; using System.Collections.Generic; @@ -221,15 +222,15 @@ private static string GetPlatform(ISearchContext context) Type driverType = driver.GetType(); - if (GenericsUtility.MatchGenerics(typeof(AndroidDriver<>), + if (GenericsUtility.MatchGenerics(typeof(AndroidDriver), AppiumPageObjectMemberDecorator.ListOfAvailableElementTypes, driverType)) return MobilePlatform.Android; - if (GenericsUtility.MatchGenerics(typeof(IOSDriver<>), + if (GenericsUtility.MatchGenerics(typeof(IOSDriver), AppiumPageObjectMemberDecorator.ListOfAvailableElementTypes, driverType)) return MobilePlatform.IOS; - if (GenericsUtility.MatchGenerics(typeof(WindowsDriver<>), + if (GenericsUtility.MatchGenerics(typeof(WindowsDriver), AppiumPageObjectMemberDecorator.ListOfAvailableElementTypes, driverType)) return MobilePlatform.Windows; diff --git a/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs b/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs index 6190d6935..37fccd1e1 100644 --- a/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs +++ b/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs @@ -30,7 +30,7 @@ internal static IWebDriver UnpackWebdriver(ISearchContext context) // Search context it is not only Webdriver. Webelement is search context // too. - // WebElement and AppiumWebElement implement IWrapsDriver + // RemoteWebElement and AppiumWebElement implement IWrapsDriver if ((context as IWrapsDriver) != null) return UnpackWebdriver(((IWrapsDriver) context) .WrappedDriver); diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index aa2f11809..a371941e1 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -72,34 +72,12 @@ public Response Execute(Command commandToExecute) try { - object value; - if (commandToExecute.Name == DriverCommand.NewSession) { Service?.Start(); RealExecutor = ModifyNewSessionHttpRequestHeader(RealExecutor); } - if (commandToExecute.Parameters.TryGetValue("capabilities", out value) && ((Dictionary)commandToExecute.Parameters["capabilities"]).TryGetValue("platformName", out value) && value.ToString().Equals("Windows")) - { - var desiredCapabilities = new Dictionary(); - - if (((Dictionary)(commandToExecute.Parameters["capabilities"])).ContainsKey("app")) - { - desiredCapabilities.Add("app", ((Dictionary)(commandToExecute.Parameters["capabilities"]))["app"]); - } - - if (((Dictionary)(commandToExecute.Parameters["capabilities"])).ContainsKey("appTopLevelWindow")) - { - desiredCapabilities.Add("appTopLevelWindow", ((Dictionary)(commandToExecute.Parameters["capabilities"]))["appTopLevelWindow"]); - } - - if (desiredCapabilities.Count > 0) - { - commandToExecute.Parameters.Add("desiredCapabilities", desiredCapabilities); - } - } - result = RealExecutor.Execute(commandToExecute); return result; } @@ -131,11 +109,6 @@ private ICommandExecutor ModifyNewSessionHttpRequestHeader(ICommandExecutor comm { if (commandExecutor == null) throw new ArgumentNullException(nameof(commandExecutor)); var modifiedCommandExecutor = commandExecutor as HttpCommandExecutor; - - // TODO: Laolu, this may be pretty big breaking change for us - //if (modifiedCommandExecutor != null) - // modifiedCommandExecutor.SendingRemoteHttpRequest += (sender, args) => - // args.Request.Headers.Add(IdempotencyHeader, Guid.NewGuid().ToString()); return modifiedCommandExecutor; } diff --git a/src/Appium.Net/Appium/Service/Options/OptionCollector.cs b/src/Appium.Net/Appium/Service/Options/OptionCollector.cs index 41fcd247b..b64d41102 100644 --- a/src/Appium.Net/Appium/Service/Options/OptionCollector.cs +++ b/src/Appium.Net/Appium/Service/Options/OptionCollector.cs @@ -68,7 +68,7 @@ public OptionCollector AddCapabilities(AppiumOptions options) foreach (var item in result) { - this.options.AddAdditionalOption(item.Key, item.Value); + this.options.AddAdditionalCapability(item.Key, item.Value); } } diff --git a/src/Appium.Net/Appium/Tizen/TizenDriver.cs b/src/Appium.Net/Appium/Tizen/TizenDriver.cs index f57059658..1a30e63a9 100644 --- a/src/Appium.Net/Appium/Tizen/TizenDriver.cs +++ b/src/Appium.Net/Appium/Tizen/TizenDriver.cs @@ -15,14 +15,12 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.Tizen { - public class TizenDriver : AppiumDriver, IFindByTizenUIAutomation - where W : IWebElement + public class TizenDriver: AppiumDriver, IFindByTizenUIAutomation { private static readonly string Platform = MobilePlatform.Tizen; @@ -125,7 +123,7 @@ public TizenDriver(AppiumLocalService service, AppiumOptions AppiumOptions, Time /// /// a Tizen UIAutomation selector /// IWebElement object so that you can interact that object - public W FindElementByTizenUIAutomation(string selector) => + public IWebElement FindElementByTizenUIAutomation(string selector) => FindElement(MobileSelector.TizenUIAutomation, selector); /// @@ -133,11 +131,9 @@ public W FindElementByTizenUIAutomation(string selector) => /// /// a Tizen UIAutomation selector /// ReadOnlyCollection of IWebElement objects so that you can interact with those objects - public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) => + public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) => FindElements(MobileSelector.TizenUIAutomation, selector); #endregion IFindByTizenUIAutomation Members - - protected override WebElementFactory CreateElementFactory() => new TizenElementFactory(this); } } diff --git a/src/Appium.Net/Appium/Tizen/TizenElement.cs b/src/Appium.Net/Appium/Tizen/TizenElement.cs deleted file mode 100644 index 81a3b5e0e..000000000 --- a/src/Appium.Net/Appium/Tizen/TizenElement.cs +++ /dev/null @@ -1,47 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -using OpenQA.Selenium.Appium.Enums; -using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; -using System.Collections.Generic; - -namespace OpenQA.Selenium.Appium.Tizen -{ - public class TizenElement : AppiumWebElement, IFindByTizenUIAutomation - { - /// - /// Initializes a new instance of the TizenElement class. - /// - /// Driver in use. - /// ID of the element. - public TizenElement(WebDriver parent, string id) - : base(parent, id) - { - } - - public void ReplaceValue(string value) => TizenCommandExecutionHelper.ReplaceValue(this, Id, value); - - public void SetAttribute(string name, string value) => TizenCommandExecutionHelper.SetAttribute(this, Id, name, value); - - #region IFindByTizenUIAutomation Members - - public AppiumWebElement FindElementByTizenUIAutomation(string selector) => - FindElement(MobileSelector.TizenUIAutomation, selector); - - public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) => - FindElements(MobileSelector.TizenUIAutomation, selector); - - #endregion IFindByTizenUIAutomation Members - } -} diff --git a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs deleted file mode 100644 index f9091e164..000000000 --- a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs +++ /dev/null @@ -1,16 +0,0 @@ -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium.Tizen -{ - public class TizenElementFactory : CachedElementFactory - { - public TizenElementFactory(WebDriver parentDriver) : base(parentDriver) - { - } - - protected override TizenElement CreateCachedElement(WebDriver parentDriver, string elementId) - { - return new TizenElement(parentDriver, elementId); - } - } -} diff --git a/src/Appium.Net/Appium/Windows/WindowsDriver.cs b/src/Appium.Net/Appium/Windows/WindowsDriver.cs index 397b8b9d1..449d040c0 100644 --- a/src/Appium.Net/Appium/Windows/WindowsDriver.cs +++ b/src/Appium.Net/Appium/Windows/WindowsDriver.cs @@ -19,19 +19,18 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; + namespace OpenQA.Selenium.Appium.Windows { - public class WindowsDriver : AppiumDriver, ISendsKeyEvents, IHidesKeyboardWithKeyName //, IFindByWindowsUIAutomation - where W : IWebElement + public class WindowsDriver : AppiumDriver, ISendsKeyEvents, IHidesKeyboardWithKeyName, + IFindByWindowsUIAutomation { - private static readonly string Platform = MobilePlatform.Windows; - /// /// Initializes a new instance of the WindowsDriver class using Appium options /// /// An object containing the Appium options of the browser. public WindowsDriver(AppiumOptions AppiumOptions) - : base(SetPlatformToCapabilities(AppiumOptions, Platform)) + : base(SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) { } @@ -41,7 +40,7 @@ public WindowsDriver(AppiumOptions AppiumOptions) /// An object containing the Appium options. /// The maximum amount of time to wait for each command. public WindowsDriver(AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) + : base(SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) { } @@ -51,7 +50,7 @@ public WindowsDriver(AppiumOptions AppiumOptions, TimeSpan commandTimeout) /// object containing settings of the Appium local service which is going to be started /// An object containing the Appium options. public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions) - : base(builder, SetPlatformToCapabilities(AppiumOptions, Platform)) + : base(builder, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) { } @@ -63,7 +62,7 @@ public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions) /// The maximum amount of time to wait for each command. public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(builder, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) + : base(builder, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) { } @@ -73,7 +72,7 @@ public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions, /// URI containing the address of the WebDriver remote server (e.g. http://127.0.0.1:4723/wd/hub). /// An object containing the Appium options. public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions) - : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, Platform)) + : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) { } @@ -83,7 +82,7 @@ public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions) /// the specified Appium local service /// An object containing the Appium options of the browser. public WindowsDriver(AppiumLocalService service, AppiumOptions AppiumOptions) - : base(service, SetPlatformToCapabilities(AppiumOptions, Platform)) + : base(service, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) { } @@ -94,7 +93,7 @@ public WindowsDriver(AppiumLocalService service, AppiumOptions AppiumOptions) /// An object containing the Appium options. /// The maximum amount of time to wait for each command. public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) + : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) { } @@ -106,7 +105,7 @@ public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions, TimeSpan co /// The maximum amount of time to wait for each command. public WindowsDriver(AppiumLocalService service, AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(service, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) + : base(service, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) { } @@ -129,25 +128,6 @@ public override ReadOnlyCollection Contexts #endregion Context - - - - - - - - internal static new ICapabilities SetPlatformToCapabilities(DriverOptions dc, string desiredPlatform) - { - dc.PlatformName = desiredPlatform; - return dc.ToCapabilities(); - } - - - - - - - #region IFindByWindowsUIAutomation Members /// @@ -155,7 +135,7 @@ public override ReadOnlyCollection Contexts /// /// a Windows UIAutomation selector /// IWebElement object so that you can interact that object - public W FindElementByWindowsUIAutomation(string selector) => + public IWebElement FindElementByWindowsUIAutomation(string selector) => FindElement(MobileSelector.WindowsUIAutomation, selector); /// @@ -163,17 +143,14 @@ public W FindElementByWindowsUIAutomation(string selector) => /// /// a Windows UIAutomation selector /// ReadOnlyCollection of IWebElement objects so that you can interact with those objects - public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) => + public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) => FindElements(MobileSelector.WindowsUIAutomation, selector); #endregion IFindByWindowsUIAutomation Members - public void HideKeyboard(string key, string strategy = null) => + public new void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); - // protected override WebElementFactory CreateElementFactory() => new WindowsElementFactory(this); - protected override WebElementFactory CreateElementFactory() => new WebElementFactory(this); - public void PressKeyCode(KeyEvent keyEvent) => throw new NotImplementedException(); public void LongPressKeyCode(KeyEvent keyEvent) => throw new NotImplementedException(); diff --git a/src/Appium.Net/Appium/Windows/WindowsOptions.cs b/src/Appium.Net/Appium/Windows/WindowsOptions.cs deleted file mode 100644 index 7aa2c963a..000000000 --- a/src/Appium.Net/Appium/Windows/WindowsOptions.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; - -namespace OpenQA.Selenium.Appium.Windows -{ - public class WindowsOptions : AppiumOptions - { - private const string AndroidOptionsCapabilityName = "windowsOptions"; - private const string PlatformNameValue = "windows"; - - /// - /// Initializes a new instance of the class. - /// - public WindowsOptions() - { - this.PlatformName = PlatformNameValue; - } - - /// - /// Turn the capabilities into an desired capability - /// - /// A desired capability - public override ICapabilities ToCapabilities() - { - RemoteSessionSettings remote = new RemoteSessionSettings(); - - foreach (var keyVal in this.ToDictionary()) - { - remote.AddMetadataSetting(keyVal.Key, keyVal.Value); - } - - return remote; - } - - /// - /// Gets the vendor prefix to apply to Chromium-specific capability names. - /// - protected override string VendorPrefix - { - get { return "appium"; } - } - - /// - /// Gets the name of the capability used to store Appium options in - /// an object. - /// - public override string CapabilityName - { - get { return string.Format(CultureInfo.InvariantCulture, "{0}:{1}", this.VendorPrefix, AndroidOptionsCapabilityName); } - } - } -} diff --git a/src/Appium.Net/Appium/iOS/IOSCommandExecutionHelper.cs b/src/Appium.Net/Appium/iOS/IOSCommandExecutionHelper.cs index bcbdad48c..0eebb4814 100644 --- a/src/Appium.Net/Appium/iOS/IOSCommandExecutionHelper.cs +++ b/src/Appium.Net/Appium/iOS/IOSCommandExecutionHelper.cs @@ -89,5 +89,17 @@ public static Image GetClipboardImage(IExecuteMethod executeMethod) return null; } + + public static Dictionary GetSettings(IExecuteMethod executeMethod) => + (Dictionary)executeMethod.Execute(AppiumDriverCommand.GetSettings).Value; + + public static void SetSetting(IExecuteMethod executeMethod, string setting, object value) + { + var settings = new Dictionary() + { [setting] = value }; + var parameters = new Dictionary() + { ["settings"] = settings }; + executeMethod.Execute(AppiumDriverCommand.UpdateSettings, parameters); + } } } \ No newline at end of file diff --git a/src/Appium.Net/Appium/iOS/IOSDriver.cs b/src/Appium.Net/Appium/iOS/IOSDriver.cs index e655f55c8..db76e89ca 100644 --- a/src/Appium.Net/Appium/iOS/IOSDriver.cs +++ b/src/Appium.Net/Appium/iOS/IOSDriver.cs @@ -15,7 +15,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; using System.Drawing; using OpenQA.Selenium.Appium.iOS.Interfaces; @@ -23,9 +22,9 @@ namespace OpenQA.Selenium.Appium.iOS { - public class IOSDriver : AppiumDriver, IFindByIosUIAutomation, IFindsByIosClassChain, - IFindsByIosNSPredicate, IHidesKeyboardWithKeyName, IHasClipboard, - IShakesDevice, IPerformsTouchID where W : IWebElement + public class IOSDriver : AppiumDriver, IFindByIosUIAutomation, IFindsByIosClassChain, + IFindsByIosNSPredicate, IHidesKeyboardWithKeyName, IHasClipboard, + IShakesDevice, IPerformsTouchID, IHasSettings { private static readonly string Platform = MobilePlatform.IOS; @@ -123,52 +122,67 @@ public IOSDriver(AppiumLocalService service, DriverOptions driverOptions, TimeSp #region IFindByIosUIAutomation Members - public W FindElementByIosUIAutomation(string selector) => FindElement(MobileSelector.iOSAutomatoion, selector); + public IWebElement FindElementByIosUIAutomation(string selector) => FindElement(MobileSelector.iOSAutomatoion, selector); - public IReadOnlyCollection FindElementsByIosUIAutomation(string selector) => + public IReadOnlyCollection FindElementsByIosUIAutomation(string selector) => FindElements(MobileSelector.iOSAutomatoion, selector); #endregion IFindByIosUIAutomation Members #region IFindsByIosClassChain Members - public W FindElementByIosClassChain(string selector) => FindElement(MobileSelector.iOSClassChain, selector); + public IWebElement FindElementByIosClassChain(string selector) => FindElement(MobileSelector.iOSClassChain, selector); - public IReadOnlyCollection FindElementsByIosClassChain(string selector) => + public IReadOnlyCollection FindElementsByIosClassChain(string selector) => FindElements(MobileSelector.iOSClassChain, selector); #endregion IFindsByIosClassChain Members #region IFindsByIosNSPredicate Members - public W FindElementByIosNsPredicate(string selector) => + public IWebElement FindElementByIosNsPredicate(string selector) => FindElement(MobileSelector.iOSPredicateString, selector); - public IReadOnlyCollection FindElementsByIosNsPredicate(string selector) => + public IReadOnlyCollection FindElementsByIosNsPredicate(string selector) => FindElements(MobileSelector.iOSPredicateString, selector); #endregion IFindsByIosNSPredicate Members + + public void SetSetting(string setting, object value) => + IOSCommandExecutionHelper.SetSetting(this, setting, value); + + public Dictionary Settings + { + get => IOSCommandExecutionHelper.GetSettings(this); + + set + { + foreach (var entry in value) + { + SetSetting(entry.Key, entry.Value); + } + } + } + public void ShakeDevice() => IOSCommandExecutionHelper.ShakeDevice(this); - public void HideKeyboard(string key, string strategy = null) => + public new void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); - protected override WebElementFactory CreateElementFactory() => new IOSElementFactory(this); - /// /// Locks the device. /// /// The number of seconds during which the device need to be locked for. public void Lock(int seconds) => AppiumCommandExecutionHelper.Lock(this, seconds); - public void PerformTouchID(bool match) => IOSCommandExecutionHelper.PerformTouchID(this, match); + public void Lock() => IOSCommandExecutionHelper.Lock(this); public bool IsLocked() => IOSCommandExecutionHelper.IsLocked(this); public void Unlock() => IOSCommandExecutionHelper.Unlock(this); - public void Lock() => IOSCommandExecutionHelper.Lock(this); + public void PerformTouchID(bool match) => IOSCommandExecutionHelper.PerformTouchID(this, match); /// /// Sets the content to the clipboard diff --git a/src/Appium.Net/Appium/iOS/IOSElement.cs b/src/Appium.Net/Appium/iOS/IOSElement.cs deleted file mode 100644 index 733f767c2..000000000 --- a/src/Appium.Net/Appium/iOS/IOSElement.cs +++ /dev/null @@ -1,46 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. - -using OpenQA.Selenium.Appium.Enums; -using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; -using System.Collections.Generic; - -namespace OpenQA.Selenium.Appium.iOS -{ - public class IOSElement : AppiumWebElement, - IFindByIosUIAutomation - { - /// - /// Initializes a new instance of the IOSElement class. - /// - /// Driver in use. - /// ID of the element. - public IOSElement(WebDriver parent, string id) - : base(parent, id) - { - } - - - #region IFindByIosUIAutomation Members - - public AppiumWebElement FindElementByIosUIAutomation(string selector) => - FindElement(MobileSelector.iOSAutomatoion, selector); - - public IReadOnlyCollection FindElementsByIosUIAutomation(string selector) => - FindElements(MobileSelector.iOSAutomatoion, selector); - - #endregion IFindByIosUIAutomation Members - } -} \ No newline at end of file diff --git a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs deleted file mode 100644 index a9653e47c..000000000 --- a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs +++ /dev/null @@ -1,16 +0,0 @@ -using OpenQA.Selenium.Remote; - -namespace OpenQA.Selenium.Appium.iOS -{ - public class IOSElementFactory : CachedElementFactory - { - public IOSElementFactory(WebDriver parentDriver) : base(parentDriver) - { - } - - protected override IOSElement CreateCachedElement(WebDriver parentDriver, string elementId) - { - return new IOSElement(parentDriver, elementId); - } - } -} diff --git a/src/Appium.Net/Appium/iOS/Interfaces/IHasSettings.cs b/src/Appium.Net/Appium/iOS/Interfaces/IHasSettings.cs new file mode 100644 index 000000000..23dfeddfc --- /dev/null +++ b/src/Appium.Net/Appium/iOS/Interfaces/IHasSettings.cs @@ -0,0 +1,36 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using OpenQA.Selenium.Appium.Interfaces; +using System.Collections.Generic; + +namespace OpenQA.Selenium.Appium.iOS.Interfaces +{ + public interface IHasSettings : IExecuteMethod + { + /// + /// Set a setting for this test session It's probably better to use a + /// convenience function, rather than use this function directly. Try finding + /// the method for the specific setting you want to change. + /// + /// Setting you wish to set. + /// value of the setting. + void SetSetting(string setting, object value); + + /// + /// Gets/Sets settings stored for this test session. + /// + Dictionary Settings { set; get; } + } +} \ No newline at end of file diff --git a/test/integration/Android/ActivityTest.cs b/test/integration/Android/ActivityTest.cs index d9359c264..ff9659346 100644 --- a/test/integration/Android/ActivityTest.cs +++ b/test/integration/Android/ActivityTest.cs @@ -1,6 +1,7 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class ActivityTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +19,7 @@ public void BeforeAll() : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } diff --git a/test/integration/Android/AppStringsTest.cs b/test/integration/Android/AppStringsTest.cs index 4781a32e6..f8db68a61 100644 --- a/test/integration/Android/AppStringsTest.cs +++ b/test/integration/Android/AppStringsTest.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class AppStringsTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.ImplicitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.ImplicitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/ClipboardTest.cs b/test/integration/Android/ClipboardTest.cs index 1075c115c..b096b198a 100644 --- a/test/integration/Android/ClipboardTest.cs +++ b/test/integration/Android/ClipboardTest.cs @@ -11,7 +11,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture(Category = "Device")] public class ClipboardTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private const string ClipboardTestString = "Hello Clipboard"; private const string Base64RegexPattern = @"^[a-zA-Z0-9\+/]*={0,2}$"; @@ -23,7 +23,7 @@ public void BeforeAll() : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/ConnectionTest.cs b/test/integration/Android/ConnectionTest.cs index 9adce6791..08adcc39d 100644 --- a/test/integration/Android/ConnectionTest.cs +++ b/test/integration/Android/ConnectionTest.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] class ConnectionTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } @@ -35,11 +35,11 @@ public void AfterAll() [Test] public void NetworkConnectionTest() { - ((AndroidDriver) _driver).ConnectionType = ConnectionType.AirplaneMode; - Assert.AreEqual(ConnectionType.AirplaneMode, ((AndroidDriver) _driver).ConnectionType); + ((AndroidDriver) _driver).ConnectionType = ConnectionType.AirplaneMode; + Assert.AreEqual(ConnectionType.AirplaneMode, ((AndroidDriver) _driver).ConnectionType); - ((AndroidDriver) _driver).ConnectionType = ConnectionType.AllNetworkOn; - Assert.AreEqual(ConnectionType.AllNetworkOn, ((AndroidDriver) _driver).ConnectionType); + ((AndroidDriver) _driver).ConnectionType = ConnectionType.AllNetworkOn; + Assert.AreEqual(ConnectionType.AllNetworkOn, ((AndroidDriver) _driver).ConnectionType); } } } \ No newline at end of file diff --git a/test/integration/Android/CurrentPackageTest.cs b/test/integration/Android/CurrentPackageTest.cs index 5ff0aa4ba..c6d41c273 100644 --- a/test/integration/Android/CurrentPackageTest.cs +++ b/test/integration/Android/CurrentPackageTest.cs @@ -8,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class CurrentPackageTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private const string DemoAppPackage = "io.appium.android.apis"; [OneTimeSetUp] @@ -17,7 +17,7 @@ public void BeforeAll() var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } diff --git a/test/integration/Android/Device/AppTests.cs b/test/integration/Android/Device/AppTests.cs index 970de3d34..55841b36e 100644 --- a/test/integration/Android/Device/AppTests.cs +++ b/test/integration/Android/Device/AppTests.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android.Device.App { internal class AppTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; private const string IntentAppPackageName = "com.prgguru.android"; private const string ApiDemosPackageName = "io.appium.android.apis"; @@ -20,7 +20,7 @@ internal class AppTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); diff --git a/test/integration/Android/Device/AuthenticationTest.cs b/test/integration/Android/Device/AuthenticationTest.cs index 9831db3f4..a6c6f07d4 100644 --- a/test/integration/Android/Device/AuthenticationTest.cs +++ b/test/integration/Android/Device/AuthenticationTest.cs @@ -8,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Android.Device { public class AuthenticationTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -16,7 +16,7 @@ public void BeforeAll() var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Device/HideKeyboardTestCase.cs b/test/integration/Android/Device/HideKeyboardTestCase.cs index 621e8638a..204bca86b 100644 --- a/test/integration/Android/Device/HideKeyboardTestCase.cs +++ b/test/integration/Android/Device/HideKeyboardTestCase.cs @@ -1,14 +1,14 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android.Device.Keys { class HideKeyboardTestCase { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +17,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Device/KeyPressTest.cs b/test/integration/Android/Device/KeyPressTest.cs index 4ada42c56..6a2bb2ee2 100644 --- a/test/integration/Android/Device/KeyPressTest.cs +++ b/test/integration/Android/Device/KeyPressTest.cs @@ -1,6 +1,7 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android.Device.Keys { class KeyPressTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Device/NetworkTests.cs b/test/integration/Android/Device/NetworkTests.cs index badaff74f..8122bfacd 100644 --- a/test/integration/Android/Device/NetworkTests.cs +++ b/test/integration/Android/Device/NetworkTests.cs @@ -10,14 +10,14 @@ namespace Appium.Net.Integration.Tests.Android.Device { internal class NetworkTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; [OneTimeSetUp] public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); @@ -32,7 +32,7 @@ public void TearDown() [Test] public void CanToggleDataTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; androidDriver.ToggleData(); androidDriver.ToggleData(); @@ -41,7 +41,7 @@ public void CanToggleDataTest() [Test] public void CanToggleAirplaneModeTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; androidDriver.ToggleAirplaneMode(); @@ -54,7 +54,7 @@ public void CanToggleAirplaneModeTest() [Test] public void CanToggleWifiTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; var beforeToggleConnectionType = androidDriver.ConnectionType; androidDriver.ToggleWifi(); @@ -67,7 +67,7 @@ public void CanToggleWifiTest() [Test] public void CanMakeGsmCallTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.Multiple(() => { @@ -81,7 +81,7 @@ public void CanMakeGsmCallTest() [Test] public void CanSetGsmSignalStrengthTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.Multiple(() => { @@ -96,7 +96,7 @@ public void CanSetGsmSignalStrengthTest() [Test] public void CanSetGsmVoiceStateTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.Multiple(() => { @@ -119,7 +119,7 @@ public void CanSetGsmVoiceStateTest() [Test] public void CanSendSmsTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.DoesNotThrow(() => androidDriver.SendSms("5551234567", "Hey lol")); } diff --git a/test/integration/Android/Device/PerformanceDataTests.cs b/test/integration/Android/Device/PerformanceDataTests.cs index aec54973b..9aa9e711e 100644 --- a/test/integration/Android/Device/PerformanceDataTests.cs +++ b/test/integration/Android/Device/PerformanceDataTests.cs @@ -10,7 +10,7 @@ namespace Appium.Net.Integration.Tests.Android.Device { internal class PerformanceDataTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; @@ -18,7 +18,7 @@ internal class PerformanceDataTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); @@ -33,14 +33,14 @@ public void TearDown() [Test] public void GetPerformanceDataTypesTest() { - var androidDriver = _driver as AndroidDriver; + var androidDriver = _driver as AndroidDriver; Assert.IsNotNull(androidDriver.GetPerformanceDataTypes()); } [Test] public void GetPerformanceDataTest() { - var androidDriver = _driver as AndroidDriver; + var androidDriver = _driver as AndroidDriver; var packageName = androidDriver?.CurrentPackage; Assert.Multiple(() => diff --git a/test/integration/Android/Device/SystemTests.cs b/test/integration/Android/Device/SystemTests.cs index 3f1d89d2b..b629082a5 100644 --- a/test/integration/Android/Device/SystemTests.cs +++ b/test/integration/Android/Device/SystemTests.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -9,14 +10,14 @@ namespace Appium.Net.Integration.Tests.Android.Device { internal class SystemTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; [OneTimeSetUp] public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); @@ -31,14 +32,14 @@ public void TearDown() [Test] public void CanGetSystemBarInfoTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.That(androidDriver.GetSystemBars().Count, Is.EqualTo(2)); } [Test] public void CanGetDisplayDensityTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.That(androidDriver.GetDisplayDensity(), Is.Not.EqualTo(0)); } } diff --git a/test/integration/Android/ElementTest.cs b/test/integration/Android/ElementTest.cs index fc8148ec9..178edabbd 100644 --- a/test/integration/Android/ElementTest.cs +++ b/test/integration/Android/ElementTest.cs @@ -1,6 +1,7 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.UiAutomator; @@ -9,7 +10,7 @@ namespace Appium.Net.Integration.Tests.Android { public class ElementTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,8 +18,10 @@ public void BeforeAll() var capabilities = Env.ServerIsRemote() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + /// var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + + var serverUri = new System.Uri("http://127.0.0.1:4723/wd/hub"); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } @@ -95,7 +98,7 @@ public void ReplaceValueTest() Assert.AreEqual(originalValue, editElement.Text); - editElement.ReplaceValue(replacedValue); + ///// TODO: Implement - editElement.ReplaceValue(replacedValue); Assert.AreEqual(replacedValue, editElement.Text); } @@ -110,7 +113,7 @@ public void SetImmediateValueTest() var editElement = _driver.FindElementByAndroidUIAutomator("resourceId(\"io.appium.android.apis:id/edit\")"); - editElement.SetImmediateValue(value); + ///// TODO: Implement - editElement.SetImmediateValue(value); Assert.AreEqual(value, editElement.Text); } diff --git a/test/integration/Android/ElementTestEspresso.cs b/test/integration/Android/ElementTestEspresso.cs index 80b99d5ad..0e23880d5 100644 --- a/test/integration/Android/ElementTestEspresso.cs +++ b/test/integration/Android/ElementTestEspresso.cs @@ -8,14 +8,14 @@ namespace Appium.Net.Integration.Tests.Android { public class ElementTestEspresso { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetAndroidEspressoCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/EmulatorDeviceTime.cs b/test/integration/Android/EmulatorDeviceTime.cs index 32e4b8e1a..cec25d696 100644 --- a/test/integration/Android/EmulatorDeviceTime.cs +++ b/test/integration/Android/EmulatorDeviceTime.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android { class EmulatorDeviceTime { - private AppiumDriver _driver; + private AppiumDriver _driver; [SetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/FileInteractionTest.cs b/test/integration/Android/FileInteractionTest.cs index a9109276c..865d0406f 100644 --- a/test/integration/Android/FileInteractionTest.cs +++ b/test/integration/Android/FileInteractionTest.cs @@ -10,7 +10,7 @@ namespace Appium.Net.Integration.Tests.Android { class FileInteractionTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -19,7 +19,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/IntentAndroidTest.cs b/test/integration/Android/IntentAndroidTest.cs index 8978d0e23..60f54e421 100644 --- a/test/integration/Android/IntentAndroidTest.cs +++ b/test/integration/Android/IntentAndroidTest.cs @@ -1,13 +1,13 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android { class IntentAndroidTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -16,7 +16,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("intentApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("intentApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/LockDeviceTest.cs b/test/integration/Android/LockDeviceTest.cs index 8a57a4c13..a52ec8af1 100644 --- a/test/integration/Android/LockDeviceTest.cs +++ b/test/integration/Android/LockDeviceTest.cs @@ -1,12 +1,14 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android { class LockDeviceTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [SetUp] public void BeforeAll() @@ -15,7 +17,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/OrientationTest.cs b/test/integration/Android/OrientationTest.cs index bdc13a495..d64403702 100644 --- a/test/integration/Android/OrientationTest.cs +++ b/test/integration/Android/OrientationTest.cs @@ -17,7 +17,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/ScreenRecordingTest.cs b/test/integration/Android/ScreenRecordingTest.cs index f2f99602c..3e95b7b74 100644 --- a/test/integration/Android/ScreenRecordingTest.cs +++ b/test/integration/Android/ScreenRecordingTest.cs @@ -2,6 +2,7 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -10,14 +11,14 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] class ScreenRecordingTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/SearchingTest.cs b/test/integration/Android/SearchingTest.cs index 2bd3d5fc0..125bf73e3 100644 --- a/test/integration/Android/SearchingTest.cs +++ b/test/integration/Android/SearchingTest.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class SearchingTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Session/GeolocationTests.cs b/test/integration/Android/Session/GeolocationTests.cs index 5e5237c47..343fb3fb2 100644 --- a/test/integration/Android/Session/GeolocationTests.cs +++ b/test/integration/Android/Session/GeolocationTests.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android.Session.Geolocation [TestFixture] internal class GeolocationTests { - private AppiumDriver _driver; + private AppiumDriver _driver; [SetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Session/LogTests.cs b/test/integration/Android/Session/LogTests.cs index a865ae682..0dc910bfe 100644 --- a/test/integration/Android/Session/LogTests.cs +++ b/test/integration/Android/Session/LogTests.cs @@ -21,9 +21,14 @@ internal class LogTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - _driver = new AndroidDriver( - Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, - _androidOptions); + //////_driver = new AndroidDriver( + ////// Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, + ////// _androidOptions); + + _driver = new AndroidDriver(new System.Uri("http://127.0.0.1:4723/wd/hub"), _androidOptions); + + + ///var serverUri = new System.Uri("http://127.0.0.1:4723/wd/hub"); } [OneTimeTearDown] @@ -91,7 +96,7 @@ public void CanCaptureBugReportTest() Assert.That(match.Success, Is.True, nameof(match.Success)); bugReportLogPath = match.Value; - var bugReportLogByteArray = ((AndroidDriver) _driver).PullFile(bugReportLogPath); + var bugReportLogByteArray = ((AndroidDriver) _driver).PullFile(bugReportLogPath); Assert.That(bugReportLogByteArray.Length, Is.GreaterThan(1)); } } diff --git a/test/integration/Android/SessionDetailTest.cs b/test/integration/Android/SessionDetailTest.cs index 29dec5a7a..b263e3198 100644 --- a/test/integration/Android/SessionDetailTest.cs +++ b/test/integration/Android/SessionDetailTest.cs @@ -11,7 +11,7 @@ namespace Appium.Net.Integration.Tests.Android public class SessionDetailTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -20,7 +20,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/SessionTest.cs b/test/integration/Android/SessionTest.cs index 81cdd3ff1..b00167153 100644 --- a/test/integration/Android/SessionTest.cs +++ b/test/integration/Android/SessionTest.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android { class SessionTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/SettingTest.cs b/test/integration/Android/SettingTest.cs index d38e2d846..1e7caf3a8 100644 --- a/test/integration/Android/SettingTest.cs +++ b/test/integration/Android/SettingTest.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android { public class SettingTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } diff --git a/test/integration/Android/TouchActionTest.cs b/test/integration/Android/TouchActionTest.cs index d5ed1cd4e..f26cd83d6 100644 --- a/test/integration/Android/TouchActionTest.cs +++ b/test/integration/Android/TouchActionTest.cs @@ -2,7 +2,7 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.MultiTouch; @@ -11,7 +11,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class TouchActionTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -20,7 +20,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } @@ -50,7 +50,7 @@ public void AfterAll() [Test] public void SimpleTouchActionTestCase() { - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var number1 = els.Count; @@ -65,7 +65,7 @@ public void SimpleTouchActionTestCase() [Test] public void ComplexTouchActionTestCase() { - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var loc1 = els[7].Location; var target = els[1]; var loc2 = target.Location; @@ -78,7 +78,7 @@ public void ComplexTouchActionTestCase() [Test] public void SingleMultiActionTestCase() { - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var loc1 = els[7].Location; var target = els[1]; var loc2 = target.Location; @@ -97,7 +97,7 @@ public void SingleMultiActionTestCase() public void SequentalMultiActionTestCase() { var originalActivity = _driver.CurrentActivity; - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var multiTouch = new MultiAction(_driver); var tap1 = new TouchAction(_driver); diff --git a/test/integration/Android/WebviewTest.cs b/test/integration/Android/WebviewTest.cs index 7193eede4..f162f4973 100644 --- a/test/integration/Android/WebviewTest.cs +++ b/test/integration/Android/WebviewTest.cs @@ -23,7 +23,7 @@ public void BeforeAll() capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.selendroid.testapp"); capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".WebViewActivity"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index 41f3cc844..26203da68 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -11,8 +11,11 @@ + + + diff --git a/test/integration/IOS/AlertTest.cs b/test/integration/IOS/AlertTest.cs index d8e8c491c..9699ed356 100644 --- a/test/integration/IOS/AlertTest.cs +++ b/test/integration/IOS/AlertTest.cs @@ -1,6 +1,7 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -8,14 +9,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class AlertTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/AppStringsTest.cs b/test/integration/IOS/AppStringsTest.cs index 53ec4bf9d..49b4983da 100644 --- a/test/integration/IOS/AppStringsTest.cs +++ b/test/integration/IOS/AppStringsTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -8,14 +7,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class AppStringsTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/ClipboardTest.cs b/test/integration/IOS/ClipboardTest.cs index 91ac8b9b8..da5a52cb2 100644 --- a/test/integration/IOS/ClipboardTest.cs +++ b/test/integration/IOS/ClipboardTest.cs @@ -14,7 +14,7 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture(Category = "Device")] public class ClipboardTest { - private IOSDriver _driver; + private IOSDriver _driver; private const string ClipboardTestString = "Hello Clipboard"; private const string Base64RegexPattern = @"^[a-zA-Z0-9\+/]*={0,2}$"; @@ -25,7 +25,7 @@ public void Setup() capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/Device/AppTests.cs b/test/integration/IOS/Device/AppTests.cs index 27ff69fed..fcb366b8d 100644 --- a/test/integration/IOS/Device/AppTests.cs +++ b/test/integration/IOS/Device/AppTests.cs @@ -10,7 +10,7 @@ namespace Appium.Net.Integration.Tests.IOS.Device.App { internal class AppTests { - private IOSDriver _driver; + private IOSDriver _driver; private AppiumOptions _iosOptions; private const string UiCatalogAppTestAppBundleId = "com.example.apple-samplecode.UICatalog"; private const string IosTestAppBundleId = "io.appium.TestApp"; @@ -22,7 +22,7 @@ internal class AppTests public void SetUp() { _iosOptions = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); - _driver = new IOSDriver( + _driver = new IOSDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _iosOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); diff --git a/test/integration/IOS/ElementTest.cs b/test/integration/IOS/ElementTest.cs index b11de68d8..8848b570a 100644 --- a/test/integration/IOS/ElementTest.cs +++ b/test/integration/IOS/ElementTest.cs @@ -8,14 +8,14 @@ namespace Appium.Net.Integration.Tests.IOS { class ElementTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } @@ -52,7 +52,7 @@ public void FindByByIosUiAutomationTest() public void SetImmediateValueTest() { var slider = _driver.FindElementByClassName("UIASlider"); - slider.SetImmediateValue("0%"); + ///// TODO: Implement - slider.SetImmediateValue("0%"); Assert.AreEqual("0%", slider.GetAttribute("value")); } } diff --git a/test/integration/IOS/LockDeviceTest.cs b/test/integration/IOS/LockDeviceTest.cs index 14035505f..45de3a144 100644 --- a/test/integration/IOS/LockDeviceTest.cs +++ b/test/integration/IOS/LockDeviceTest.cs @@ -7,14 +7,14 @@ namespace Appium.Net.Integration.Tests.IOS { internal class LockDeviceTest { - private IOSDriver _driver; + private IOSDriver _driver; [SetUp] public void TestSetup() { var capabilities = Caps.GetIosCaps(Apps.Get("iosWebviewApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/OrientationTest.cs b/test/integration/IOS/OrientationTest.cs index de0c59937..f23d93027 100644 --- a/test/integration/IOS/OrientationTest.cs +++ b/test/integration/IOS/OrientationTest.cs @@ -15,7 +15,7 @@ public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/ScreenRecordingTest.cs b/test/integration/IOS/ScreenRecordingTest.cs index 1cd4db9db..4dda19fd9 100644 --- a/test/integration/IOS/ScreenRecordingTest.cs +++ b/test/integration/IOS/ScreenRecordingTest.cs @@ -2,7 +2,7 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.IOS @@ -10,14 +10,14 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture] class ScreenRecordingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/ScrollingSearchingTest.cs b/test/integration/IOS/ScrollingSearchingTest.cs index 38b28376b..d6d307533 100644 --- a/test/integration/IOS/ScrollingSearchingTest.cs +++ b/test/integration/IOS/ScrollingSearchingTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -7,14 +8,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class ScrollingSearchingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/SearchingClassChainTest.cs b/test/integration/IOS/SearchingClassChainTest.cs index ed99bfa31..268898daa 100644 --- a/test/integration/IOS/SearchingClassChainTest.cs +++ b/test/integration/IOS/SearchingClassChainTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -7,14 +8,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class SearchingClassChainTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/SearchingTest.cs b/test/integration/IOS/SearchingTest.cs index 034aaf6b5..221275cb2 100644 --- a/test/integration/IOS/SearchingTest.cs +++ b/test/integration/IOS/SearchingTest.cs @@ -8,7 +8,7 @@ namespace Appium.Net.Integration.Tests.IOS { class SearchingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -22,7 +22,7 @@ public void BeforeAll() capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/Session/LogTests.cs b/test/integration/IOS/Session/LogTests.cs index c36c138dd..5e5172530 100644 --- a/test/integration/IOS/Session/LogTests.cs +++ b/test/integration/IOS/Session/LogTests.cs @@ -3,6 +3,7 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -20,7 +21,7 @@ internal class LogTests public void SetUp() { _iosOptions = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); - _driver = new IOSDriver( + _driver = new IOSDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _iosOptions); } diff --git a/test/integration/IOS/SettingTest.cs b/test/integration/IOS/SettingTest.cs new file mode 100644 index 000000000..0c74cbbfb --- /dev/null +++ b/test/integration/IOS/SettingTest.cs @@ -0,0 +1,47 @@ +using Appium.Net.Integration.Tests.helpers; +using NUnit.Framework; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium.iOS; + +namespace Appium.Net.Integration.Tests.iOS +{ + public class SettingTest + { + private IOSDriver _driver; + + [OneTimeSetUp] + public void BeforeAll() + { + var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; + } + + [OneTimeTearDown] + public void AfterEach() + { + _driver?.Quit(); + if (!Env.ServerIsRemote()) + { + AppiumServers.StopLocalService(); + } + } + + [Test] + public void SettingsUpdateTest() + { + _driver.SetSetting( + setting: "useJSONSource", + value: true); + + Assert.IsTrue((bool)_driver.Settings["useJSONSource"]); + + _driver.SetSetting( + setting: "useJSONSource", + value: false); + + Assert.IsFalse((bool)_driver.Settings["useJSONSource"]); + } + } +} \ No newline at end of file diff --git a/test/integration/IOS/TouchActionTest.cs b/test/integration/IOS/TouchActionTest.cs index 478234f02..778382fa5 100644 --- a/test/integration/IOS/TouchActionTest.cs +++ b/test/integration/IOS/TouchActionTest.cs @@ -11,7 +11,7 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture] public class TouchActionTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -25,7 +25,7 @@ public void BeforeAll() capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait= Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/WebviewTest.cs b/test/integration/IOS/WebviewTest.cs index 851469972..b2e35ef6d 100644 --- a/test/integration/IOS/WebviewTest.cs +++ b/test/integration/IOS/WebviewTest.cs @@ -10,7 +10,7 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture] public class WebviewTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -24,7 +24,7 @@ public void BeforeAll() capabilities.AddAdditionalOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Mac/AlertTest.cs b/test/integration/Mac/AlertTest.cs index c4c5b3dc1..5c448e651 100644 --- a/test/integration/Mac/AlertTest.cs +++ b/test/integration/Mac/AlertTest.cs @@ -8,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Mac { public class FindElementTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -16,7 +16,7 @@ public void BeforeAll() var capabilities = new AppiumOptions(); capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Mac"); // Requires until Appium 1.15.1 var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new MacDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new MacDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs b/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs index bb69e0d8a..b30efc5f0 100644 --- a/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs +++ b/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class NativeAppAttributesTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksAttributesForNativeAndroidApp _pageObject; [OneTimeSetUp] @@ -22,7 +21,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksAttributesForNativeAndroidApp(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs b/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs index 5c5decd92..9dd27373a 100644 --- a/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs +++ b/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class SeleniumAttributesCompatibilityTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksSeleniumFindsByCompatibility _pageObject; [OneTimeSetUp] @@ -22,7 +21,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksSeleniumFindsByCompatibility(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs index 3b7032224..0bbed35a4 100644 --- a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs +++ b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class TestThatChecksAttributeMix1 { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksAttributeMixOnNativeApp1 _pageObject; [OneTimeSetUp] @@ -22,7 +21,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksAttributeMixOnNativeApp1(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs index ebe54abba..b90a9510b 100644 --- a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs +++ b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class TestThatChecksAttributeMix2 { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksAttributeMixOnNativeApp2 _pageObject; [OneTimeSetUp] @@ -22,7 +21,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksAttributeMixOnNativeApp2(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/WebViewTest.cs b/test/integration/PageObjectTests/Android/WebViewTest.cs index fc87cfc45..d29395eab 100644 --- a/test/integration/PageObjectTests/Android/WebViewTest.cs +++ b/test/integration/PageObjectTests/Android/WebViewTest.cs @@ -3,7 +3,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android { public class WebViewTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidWebView _pageObject; [OneTimeSetUp] @@ -22,7 +21,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidWebView(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs index 852ea0dc1..bb600dc8d 100644 --- a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs +++ b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.IOS [TestFixture] public class NativeAppAttributesTest { - private IOSDriver _driver; + private IOSDriver _driver; private IosPageObjectChecksAttributesForNativeIosApp _pageObject; [OneTimeSetUp] @@ -28,7 +27,7 @@ public void BeforeAll() } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new IosPageObjectChecksAttributesForNativeIosApp(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs b/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs index 2649de72c..ff7482d1d 100644 --- a/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs +++ b/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.IOS [TestFixture] public class TestThatChecksAttributeMix { - private IOSDriver _driver; + private IOSDriver _driver; private IosPageObjectChecksAttributeMixOnNativeApp _pageObject; [OneTimeSetUp] @@ -20,7 +19,7 @@ public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new IosPageObjectChecksAttributeMixOnNativeApp(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs b/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs index 37ce45225..9da4b6781 100644 --- a/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs +++ b/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs @@ -3,7 +3,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.PageObjects.Attributes; @@ -13,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.NegativeTests { public class NoSuchElementTestOnAndroid { - private AndroidDriver _driver; + private AndroidDriver _driver; [FindsBy(How = How.ClassName, Using = "FakeHtmlClass")] [FindsByIOSUIAutomation(Accessibility = "FakeAccebility")] private IWebElement _inconsistentElement1; @@ -34,7 +33,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); PageFactory.InitElements(_driver, this, new AppiumPageObjectMemberDecorator(timeSpan)); } diff --git a/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs b/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs index ec7fb4a05..655f75778 100644 --- a/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs +++ b/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs @@ -3,14 +3,13 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.PageObjectTests.Other { class AndroidJsWebViewTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidJavaScriptTestPageObject _pageObject; [OneTimeSetUp] @@ -20,7 +19,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _pageObject = new AndroidJavaScriptTestPageObject(_driver); _driver.StartActivity("io.selendroid.testapp", ".WebViewActivity"); } diff --git a/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs b/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs index 66e25444d..f44a021f8 100644 --- a/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs +++ b/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs @@ -2,7 +2,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -12,7 +11,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Other [TestFixture] class AndroidTouchActionTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectThatChecksTouchActions _pageObject; [OneTimeSetUp] @@ -22,7 +21,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectThatChecksTouchActions(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index 7d452a47c..3411cff95 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -1,6 +1,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.Windows; @@ -10,17 +11,17 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Windows { public class WindowsAlarmAppTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [SetUp] public void Setup() { var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - + appCapabilities.App = "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"; + appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new WindowsDriver(serverUri, appCapabilities); + _driver = new WindowsDriver(serverUri, appCapabilities); } [TearDown] diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs index 6a2abf926..be962aa21 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; @@ -12,19 +13,19 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -32,7 +33,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -40,7 +41,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -52,7 +53,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -61,7 +62,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -71,7 +72,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -81,7 +82,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// @@ -95,7 +96,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } + private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true)] @@ -107,7 +108,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty { set; get; } + private IList TestFoundByChainedSearchElementsProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -116,7 +117,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -125,7 +126,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// [FindsByAll] @@ -137,7 +138,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true)] @@ -148,7 +149,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs index 5fb4333a7..2ff9571df 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using OpenQA.Selenium.Appium.Android; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; @@ -13,22 +13,22 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -39,7 +39,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -50,7 +50,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -65,7 +65,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -77,7 +77,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -90,7 +90,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -103,7 +103,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// @@ -120,7 +120,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } + private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] @@ -135,7 +135,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty { set; get; } + private IList TestFoundByChainedSearchElementsProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -148,7 +148,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -161,7 +161,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// @@ -177,7 +177,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] @@ -191,7 +191,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs index a52c705bb..09f7afa00 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; @@ -8,26 +9,26 @@ namespace Appium.Net.Integration.Tests.PageObjects public class AndroidPageObjectChecksAttributesForNativeAndroidApp { [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -40,20 +41,20 @@ public class AndroidPageObjectChecksAttributesForNativeAndroidApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty + private IMobileElement TestMultipleFindByElementProperty { set => _testMultipleFindByElementProperty = value; - get => (IMobileElement) _testMultipleFindByElementProperty; + get => (IMobileElement) _testMultipleFindByElementProperty; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty + private IList MultipleFindByElementsProperty { set => _testMultipleFindByElementsProperty = value; - get => (IList) _testMultipleFindByElementsProperty; + get => (IList) _testMultipleFindByElementsProperty; } [MobileFindsBySequence(Android = true)] @@ -61,14 +62,14 @@ private IList MultipleFindByElementsProperty Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/content\")", Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// private object _foundByChainedSearchElementProperty; @@ -82,10 +83,10 @@ private IList MultipleFindByElementsProperty [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty + private IMobileElement TestFoundByChainedSearchElementProperty { set => _foundByChainedSearchElementProperty = value; - get => (IMobileElement) _foundByChainedSearchElementProperty; + get => (IMobileElement) _foundByChainedSearchElementProperty; } [MobileFindsBySequence(Android = true)] @@ -94,23 +95,23 @@ private IMobileElement TestFoundByChainedSearchElementProperty [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty + private IList TestFoundByChainedSearchElementsProperty { set => _foundByChainedSearchElementsProperty = value; - get => (IList) _foundByChainedSearchElementsProperty; + get => (IList) _foundByChainedSearchElementsProperty; } [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// private object _matchedToAllLocatorsElementProperty; @@ -123,10 +124,10 @@ private IList TestFoundByChainedSearchElementsProperty //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty + private IMobileElement TestMatchedToAllLocatorsElementProperty { set => _matchedToAllLocatorsElementProperty = value; - get => (IMobileElement) _matchedToAllLocatorsElementProperty; + get => (IMobileElement) _matchedToAllLocatorsElementProperty; } [MobileFindsByAll(Android = true)] @@ -134,10 +135,10 @@ private IMobileElement TestMatchedToAllLocatorsElementProperty //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty + private IList TestMatchedToAllLocatorsElementsProperty { set => _matchedToAllLocatorsElementsProperty = value; - get => (IList) _matchedToAllLocatorsElementsProperty; + get => (IList) _matchedToAllLocatorsElementsProperty; } ////////////////////////////////////////////////////////////////////////// diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs index 835e07e6c..6bd3250b7 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs @@ -23,26 +23,26 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility ///////////////////////////////////////////////////////////////// [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IMobileElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IMobileElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -50,22 +50,22 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// @@ -73,25 +73,25 @@ [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } + private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty { set; get; } + private IList TestFoundByChainedSearchElementsProperty { set; get; } [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// [FindsByAll] @@ -99,14 +99,14 @@ [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } public string GetElementText() { diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs index 7b6be887e..14af44bfa 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs @@ -3,6 +3,7 @@ using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; +using OpenQA.Selenium; namespace Appium.Net.Integration.Tests.PageObjects { @@ -12,22 +13,22 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -38,7 +39,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -49,7 +50,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -64,7 +65,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -76,7 +77,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -87,7 +88,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IMobileElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -98,7 +99,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// [FindsByAll] @@ -111,7 +112,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] @@ -123,7 +124,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs index fea7aad3f..315fce0ba 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs @@ -2,6 +2,7 @@ using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; +using OpenQA.Selenium; namespace Appium.Net.Integration.Tests.PageObjects { @@ -10,24 +11,24 @@ public class IosPageObjectChecksAttributesForNativeIosApp ///////////////////////////////////////////////////////////////// [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IMobileElement _testMobileElement; + private IMobileElement _testMobileElement; - [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] private IList _testMobileElements; + [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] private IList _testMobileElements; [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IMobileElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IMobileElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] - [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] private IList _testMultipleElements; + [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -35,22 +36,22 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// @@ -58,13 +59,13 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/WindowsAlarmApp.cs b/test/integration/PageObjects/WindowsAlarmApp.cs index dc69dc541..5d9b47b60 100644 --- a/test/integration/PageObjects/WindowsAlarmApp.cs +++ b/test/integration/PageObjects/WindowsAlarmApp.cs @@ -1,6 +1,5 @@ using OpenQA.Selenium; using OpenQA.Selenium.Appium; -using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; @@ -13,35 +12,35 @@ namespace Appium.Net.Integration.Tests.PageObjects public class WindowsAlarmApp { [FindsByWindowsAutomation(Accessibility = "AlarmButton")] - private IMobileElement _alarmTab; + private IWebElement _alarmTab; [FindsByWindowsAutomation(Accessibility = "ClockButton")] - private IMobileElement _clockTab; + private IWebElement _clockTab; [FindsByWindowsAutomation(Accessibility = "WorldClockItemGrid")] - private IMobileElement _worldClock; + private IWebElement _worldClock; [FindsByWindowsAutomation(Accessibility = "AddAlarmButton")] - private IMobileElement _addAlarmButton; + private IWebElement _addAlarmButton; [FindsByWindowsAutomation(Accessibility = "AlarmNameTextBox")] - private IMobileElement _alarmNameTextBox; + private IWebElement _alarmNameTextBox; [FindsByWindowsAutomation(Accessibility = "PeriodLoopingSelector")] - private IMobileElement _periodSelector; + private IWebElement _periodSelector; [FindsByWindowsAutomation(Accessibility = "HourLoopingSelector")] - private IMobileElement _hourSelector; + private IWebElement _hourSelector; [FindsByWindowsAutomation(Accessibility = "MinuteLoopingSelector")] - private IMobileElement _minuteSelector; + private IWebElement _minuteSelector; [FindsByWindowsAutomation(Accessibility = "AlarmSaveButton")] - private IMobileElement _saveButton; + private IWebElement _saveButton; - private AppiumDriver _driver; + private AppiumDriver _driver; - public WindowsAlarmApp(AppiumDriver driver, TimeOutDuration timeout) + public WindowsAlarmApp(AppiumDriver driver, TimeOutDuration timeout) { _driver = driver; @@ -119,7 +118,12 @@ public void DeleteAlarmWithName(string alarmName) { var alarmEntry = _driver.FindElementByName(alarmName); - // _driver.Mouse.ContextClick(alarmEntry.Coordinates); + //// TODO: Implement - _driver.Mouse.ContextClick(alarmEntry.Coordinates); + /// or new Actions(_driver).ContextClick(alarmEntry).Perform(); + //// Will not work until context clicks get added to + ///https://github.com/appium/appium-windows-driver + ///or WinAppDriver becomes W3C compliant + _driver.FindElementByName("Delete").Click(); } } diff --git a/test/integration/Properties/Resources.Designer.cs b/test/integration/Properties/Resources.Designer.cs index 36e866fe7..4ff9675a6 100644 --- a/test/integration/Properties/Resources.Designer.cs +++ b/test/integration/Properties/Resources.Designer.cs @@ -9,6 +9,9 @@ //------------------------------------------------------------------------------ namespace Appium.Net.Integration.Tests.Properties { + using System; + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -16,7 +19,7 @@ namespace Appium.Net.Integration.Tests.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { diff --git a/test/integration/ServerTests/StartingAppLocallyTest.cs b/test/integration/ServerTests/StartingAppLocallyTest.cs index 72b9b513b..096b0bc34 100644 --- a/test/integration/ServerTests/StartingAppLocallyTest.cs +++ b/test/integration/ServerTests/StartingAppLocallyTest.cs @@ -19,10 +19,10 @@ public void StartingAndroidAppWithCapabilitiesOnlyTest() var capabilities = Caps.GetAndroidUIAutomatorCaps(app); - AndroidDriver driver = null; + AndroidDriver driver = null; try { - driver = new AndroidDriver(capabilities); + driver = new AndroidDriver(capabilities); driver.CloseApp(); } finally @@ -43,10 +43,10 @@ public void StartingAndroidAppWithCapabilitiesAndServiceTest() .AddArguments(GeneralOptionList.OverrideSession()).AddArguments(GeneralOptionList.StrictCaps()); var builder = new AppiumServiceBuilder().WithArguments(argCollector); - AndroidDriver driver = null; + AndroidDriver driver = null; try { - driver = new AndroidDriver(builder, capabilities); + driver = new AndroidDriver(builder, capabilities); driver.CloseApp(); } finally @@ -72,10 +72,10 @@ public void StartingAndroidAppWithCapabilitiesOnTheServerSideTest() var argCollector = new OptionCollector().AddCapabilities(serverCapabilities); var builder = new AppiumServiceBuilder().WithArguments(argCollector); - AndroidDriver driver = null; + AndroidDriver driver = null; try { - driver = new AndroidDriver(builder, clientCapabilities); + driver = new AndroidDriver(builder, clientCapabilities); driver.CloseApp(); } finally @@ -91,10 +91,10 @@ public void StartingIosAppWithCapabilitiesOnlyTest() var capabilities = Caps.GetIosCaps(app); - IOSDriver driver = null; + IOSDriver driver = null; try { - driver = new IOSDriver(capabilities, Env.InitTimeoutSec); + driver = new IOSDriver(capabilities, Env.InitTimeoutSec); driver.CloseApp(); } finally @@ -114,10 +114,10 @@ public void StartingIosAppWithCapabilitiesAndServiseTest() .AddArguments(GeneralOptionList.OverrideSession()).AddArguments(GeneralOptionList.StrictCaps()); var builder = new AppiumServiceBuilder().WithArguments(argCollector); - IOSDriver driver = null; + IOSDriver driver = null; try { - driver = new IOSDriver(builder, capabilities, Env.InitTimeoutSec); + driver = new IOSDriver(builder, capabilities, Env.InitTimeoutSec); driver.CloseApp(); } finally @@ -140,12 +140,12 @@ public void CheckThatServiseIsNotRunWhenTheCreatingOfANewSessionIsFailed() var service = builder.Build(); service.Start(); - IOSDriver driver = null; + IOSDriver driver = null; try { try { - driver = new IOSDriver(service, capabilities); + driver = new IOSDriver(service, capabilities); } catch (Exception e) { diff --git a/test/integration/Windows/ClickElementTest.cs b/test/integration/Windows/ClickElementTest.cs index efed69a96..4436572c3 100644 --- a/test/integration/Windows/ClickElementTest.cs +++ b/test/integration/Windows/ClickElementTest.cs @@ -17,24 +17,24 @@ using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Windows; -using System; namespace Appium.Net.Integration.Tests.Windows { public class ClickElementTest { - private WindowsDriver _calculatorSession; - protected static WebElement CalculatorResult; + private WindowsDriver _calculatorSession; + protected static IWebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() { - var appCapabilities = new WindowsOptions(); - appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); + var appCapabilities = new AppiumOptions + { + App = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" + }; - var serverUri = new Uri("http://127.0.0.1:4723"); - //var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _calculatorSession = new WindowsDriver(serverUri, appCapabilities, + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); _calculatorSession.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index f7a22d19b..790ef21c4 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -4,24 +4,21 @@ using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.ImageComparison; using OpenQA.Selenium.Appium.Windows; -using System; namespace Appium.Net.Integration.Tests.Windows { public class ImagesComparisonTest { - private WindowsDriver _calculatorSession; + private WindowsDriver _calculatorSession; protected static WebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() { - var appCapabilities = new WindowsOptions(); - appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); - - var serverUri = new Uri("http://127.0.0.1:4723"); - //var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _calculatorSession = new WindowsDriver(serverUri, appCapabilities, + var appCapabilities = new AppiumOptions(); + appCapabilities.AddAdditionalOption("appium:app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); _calculatorSession.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Windows/MultiSelectControlTest.cs b/test/integration/Windows/MultiSelectControlTest.cs index 03c45c7d8..e34f3553c 100644 --- a/test/integration/Windows/MultiSelectControlTest.cs +++ b/test/integration/Windows/MultiSelectControlTest.cs @@ -26,32 +26,32 @@ namespace Appium.Net.Integration.Tests.Windows { public class MultiSelectControlTest { - private WindowsDriver _driver; - protected static WindowsDriver AlarmClockSession; - protected static WindowsDriver DesktopSession; + private WindowsDriver _driver; + protected static WindowsDriver AlarmClockSession; + protected static WindowsDriver DesktopSession; [OneTimeSetUp] public void Setup() { // Launch the AlarmClock app var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"); - + appCapabilities.App = "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"; + appCapabilities.DeviceName = "WindowsPC"; var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; AlarmClockSession = - new WindowsDriver(serverUri, appCapabilities); + new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(AlarmClockSession); AlarmClockSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2); // Create a session for Desktop var desktopCapabilities = new AppiumOptions(); - desktopCapabilities.AddAdditionalOption("app", "Root"); + desktopCapabilities.App = "Root"; desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); DesktopSession = - new WindowsDriver(serverUri, desktopCapabilities); + new WindowsDriver(serverUri, desktopCapabilities); Assert.IsNotNull(DesktopSession); // Ensure app is started in the default main page @@ -68,7 +68,12 @@ public void OneTimeTearDown() var alarmEntries = AlarmClockSession.FindElementsByName("Windows Application Driver Test Alarm"); foreach (var alarmEntry in alarmEntries) { - // AlarmClockSession.Mouse.ContextClick(alarmEntry.Coordinates); + ///// TODO: Implement - AlarmClockSession.Mouse.ContextClick(alarmEntry.Coordinates); + /// or new Actions(AlarmClockSession).ContextClick(alarmEntry).Perform(); + //// Will not work until context clicks get added to + ///https://github.com/appium/appium-windows-driver + ///or WinAppDriver becomes W3C compliant + AlarmClockSession.FindElementByName("Delete").Click(); } @@ -103,25 +108,26 @@ public void SwitchToWorldClockTab() public string ReadLocalTime() { - // TODO: get working var localTimeText = ""; - //AppiumWebElement worldClockPivotItem = - // AlarmClockSession.FindElementByAccessibilityId("ClockButton"); - //if (worldClockPivotItem != null) - //{ - // localTimeText = AlarmClockSession.FindElementByAccessibilityId("WorldClockItemGrid").Text; - // var timeStrings = localTimeText.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); - - // foreach (var timeString in timeStrings) - // { - // // Get the time. E.g. "11:32 AM" from "Local time, Monday, February 22, 2016, 11:32 AM, " - // if (timeString.Contains(":")) - // { - // localTimeText = new string(timeString.Trim().Where(c => c < 128).ToArray()); // Remove 8206 character, see https://stackoverflow.com/questions/18298208/strange-error-when-parsing-string-to-date - // break; - // } - // } - //} + IWebElement worldClockPivotItem = + AlarmClockSession.FindElementByAccessibilityId("ClockButton"); + if (worldClockPivotItem != null) + { + + var source = AlarmClockSession.PageSource; + localTimeText = AlarmClockSession.FindElementByAccessibilityId("WorldClockItemGrid").Text; + var timeStrings = localTimeText.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var timeString in timeStrings) + { + // Get the time. E.g. "11:32 AM" from "Local time, Monday, February 22, 2016, 11:32 AM, " + if (timeString.Contains(":")) + { + localTimeText = new string(timeString.Trim().Where(c => c < 128).ToArray()); // Remove 8206 character, see https://stackoverflow.com/questions/18298208/strange-error-when-parsing-string-to-date + break; + } + } + } return localTimeText; } @@ -151,48 +157,44 @@ public void AddAlarm(string timeText) { hourString = alarmTime.ToString("HH", fi); } - - // TODO: get working - //periodSelector?.FindElementByName(period).Click(); - //AlarmClockSession.FindElementByAccessibilityId("HourLoopingSelector").FindElementByName(hourString).Click(); - //AlarmClockSession.FindElementByAccessibilityId("MinuteLoopingSelector").FindElementByName(minuteString) - // .Click(); - //Thread.Sleep(500); - //AlarmClockSession.FindElementByAccessibilityId("AlarmSaveButton").Click(); + periodSelector?.FindElementByName(period).Click(); + AlarmClockSession.FindElementByAccessibilityId("HourLoopingSelector").FindElementByName(hourString).Click(); + AlarmClockSession.FindElementByAccessibilityId("MinuteLoopingSelector").FindElementByName(minuteString) + .Click(); + Thread.Sleep(500); + AlarmClockSession.FindElementByAccessibilityId("AlarmSaveButton").Click(); } } public void DismissNotification() { - // TODO: get working - //try - //{ - // WebElement newNotification = DesktopSession.FindElementByName("New notification"); - // Assert.IsTrue(newNotification.("MessageText").Text - // .Contains("Windows Application Driver Test Alarm")); - // newNotification.FindElementByName("Dismiss").Click(); - //} - //catch - //{ - //} + try + { + IWebElement newNotification = DesktopSession.FindElementByName("New notification"); + Assert.IsTrue(newNotification.FindElementByAccessibilityId("MessageText").Text + .Contains("Windows Application Driver Test Alarm")); + newNotification.FindElementByName("Dismiss").Click(); + } + catch + { + } } private static void ReturnToMainPage() { - // TODO: get working - //// Try to return to main page in case application is started in nested view - //try - //{ - // AppiumWebElement backButton = null; - // do - // { - // backButton = AlarmClockSession.FindElementByAccessibilityId("Back"); - // backButton.Click(); - // } while (backButton != null); - //} - //catch - //{ - //} + // Try to return to main page in case application is started in nested view + try + { + IWebElement backButton = null; + do + { + backButton = AlarmClockSession.FindElementByAccessibilityId("Back"); + backButton.Click(); + } while (backButton != null); + } + catch + { + } } } } \ No newline at end of file diff --git a/test/integration/Windows/PentTest.cs b/test/integration/Windows/PentTest.cs index e772a7154..919e0ba85 100644 --- a/test/integration/Windows/PentTest.cs +++ b/test/integration/Windows/PentTest.cs @@ -29,20 +29,20 @@ // up to OpenQA.Selenium.Interactions and this alias can simply be removed. using PointerInputDevice = OpenQA.Selenium.Appium.Interactions.PointerInputDevice; using NUnit.Framework; -using OpenQA.Selenium.Appium; using Appium.Net.Integration.Tests.helpers; +using OpenQA.Selenium.Appium; namespace Appium.Net.Integration.Tests.Windows { public class PenTest : StickyNotesTest { - private WindowsDriver newStickyNoteSession; - private WebElement inkCanvas; + private WindowsDriver newStickyNoteSession; + private IWebElement inkCanvas; [Test] public void DrawBasicSquare() { - Point canvasCoordinate = inkCanvas.Coordinates.LocationInViewport; + Point canvasCoordinate = (inkCanvas as WebElement).Coordinates.LocationInViewport; Size squareSize = new Size(inkCanvas.Size.Width * 3 / 5, inkCanvas.Size.Height * 3 / 5); Point A = new Point(canvasCoordinate.X + inkCanvas.Size.Width / 5, canvasCoordinate.Y + inkCanvas.Size.Height / 5); @@ -89,7 +89,7 @@ public void DrawBasicSquare() [Test] public void DrawBasicSquareWithExtraAttributes() { - Point canvasCoordinate = inkCanvas.Coordinates.LocationInViewport; + Point canvasCoordinate = (inkCanvas as WebElement).Coordinates.LocationInViewport; Size squareSize = new Size(inkCanvas.Size.Width * 3 / 5, inkCanvas.Size.Height * 3 / 5); Point A = new Point(canvasCoordinate.X + inkCanvas.Size.Width / 5, canvasCoordinate.Y + inkCanvas.Size.Height / 5); @@ -225,7 +225,7 @@ public void CreateNewStickyNote() Assert.AreEqual(openedStickyNotesWindowsBefore.Count + 1, openedStickyNotesWindowsAfter.Count); // Identify the newly opened Sticky Note by removing the previously opened ones from the list - List openedStickyNotes = new List(openedStickyNotesWindowsAfter); + List openedStickyNotes = new List(openedStickyNotesWindowsAfter); foreach (var preExistingStickyNote in openedStickyNotesWindowsBefore) { openedStickyNotes.Remove(preExistingStickyNote); @@ -238,7 +238,7 @@ public void CreateNewStickyNote() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); + newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(newStickyNoteSession); // Resize and re-position the Sticky Notes window we are working with @@ -259,7 +259,7 @@ public void DeleteStickyNote() if (newStickyNoteSession != null) { // Create a new Sticky Note by pressing Ctrl + N - /// newStickyNoteSession.Keyboard.SendKeys(Keys.Control + "d" + Keys.Control); + new Actions(newStickyNoteSession).SendKeys(Keys.Control + "d" + Keys.Control).Perform(); Thread.Sleep(TimeSpan.FromSeconds(2)); try diff --git a/test/integration/Windows/StickyNotesTest.cs b/test/integration/Windows/StickyNotesTest.cs index 167f73b71..3f10e0cb6 100644 --- a/test/integration/Windows/StickyNotesTest.cs +++ b/test/integration/Windows/StickyNotesTest.cs @@ -16,7 +16,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Windows; using System; @@ -27,7 +26,7 @@ public class StickyNotesTest { private const string StickyNotesAppId = @"Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App"; - protected WindowsDriver session; + protected WindowsDriver session; [OneTimeSetUp] public void BeforeAll() @@ -42,9 +41,9 @@ public void BeforeAll() // Create a new session to launch or bring up Sticky Notes application // Note: All sticky note windows are parented to Modern_Sticky_Top_Window pane AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("app", StickyNotesAppId); + appCapabilities.App = StickyNotesAppId; appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - session = new WindowsDriver(serverUri, appCapabilities); + session = new WindowsDriver(serverUri, appCapabilities); } catch { @@ -52,9 +51,10 @@ public void BeforeAll() // In such failure, simply look for the Modern_Sticky_Top_Window pane using the Desktop // session and create a new session based on the located top window pane. AppiumOptions desktopCapabilities = new AppiumOptions(); - desktopCapabilities.AddAdditionalOption("app", "Root"); - desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); + desktopCapabilities.App = "Root"; + //desktopCapabilities.AddAdditionalOption("app", "Root"); + //desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); var StickyNotesTopLevelWindow = desktopSession.FindElementByClassName("Modern_Sticky_Top_Window"); var StickyNotesTopLevelWindowHandle = StickyNotesTopLevelWindow.GetAttribute("NativeWindowHandle"); @@ -62,8 +62,8 @@ public void BeforeAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - session = new WindowsDriver(serverUri, appCapabilities); + //appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + session = new WindowsDriver(serverUri, appCapabilities); } Assert.IsNotNull(session); @@ -92,8 +92,8 @@ public void AfterAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); - var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); + // appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); stickyNoteSession.Close(); } } diff --git a/test/integration/helpers/Caps.cs b/test/integration/helpers/Caps.cs index c700962e9..3df4051f3 100644 --- a/test/integration/helpers/Caps.cs +++ b/test/integration/helpers/Caps.cs @@ -8,10 +8,10 @@ public class Caps public static AppiumOptions GetIosCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalOption(MobileCapabilityType.AutomationName, AutomationName.iOSXcuiTest); - capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "iPhone X"); - capabilities.AddAdditionalOption(MobileCapabilityType.PlatformVersion, "12.0"); - capabilities.AddAdditionalOption(MobileCapabilityType.App, app); + capabilities.AutomationName = AutomationName.iOSXcuiTest; + capabilities.DeviceName = "iPhone X"; + capabilities.PlatformVersion = "12.0"; + capabilities.App = app; capabilities.AddAdditionalOption(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); return capabilities; @@ -20,18 +20,18 @@ public static AppiumOptions GetIosCaps(string app) public static AppiumOptions GetAndroidUIAutomatorCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalOption(MobileCapabilityType.AutomationName, AutomationName.AndroidUIAutomator2); - capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Android Emulator"); - capabilities.AddAdditionalOption(MobileCapabilityType.App, app); + capabilities.AutomationName = AutomationName.AndroidUIAutomator2; + capabilities.DeviceName = "Android Emulator"; + capabilities.App = app; return capabilities; } public static AppiumOptions GetAndroidEspressoCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalOption(MobileCapabilityType.AutomationName, AutomationName.AndroidEspresso); - capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Android Emulator"); - capabilities.AddAdditionalOption(MobileCapabilityType.App, app); + capabilities.AutomationName = AutomationName.AndroidEspresso; + capabilities.DeviceName = "Android Emulator"; + capabilities.App = app; return capabilities; } } From ffaa2376829fdedb763399dbdcba9e4fd36be83d Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Thu, 7 Oct 2021 08:23:02 -0500 Subject: [PATCH 06/21] Use Selenium 4 RC2 and remove extra using statements --- src/Appium.Net/Appium.Net.csproj | 4 ++-- test/integration/Android/ActivityTest.cs | 2 -- test/integration/Android/AppStringsTest.cs | 1 - test/integration/Android/ClipboardTest.cs | 1 - test/integration/Android/ConnectionTest.cs | 1 - test/integration/Android/CurrentPackageTest.cs | 1 - test/integration/Android/Device/AppTests.cs | 1 - test/integration/Android/Device/AuthenticationTest.cs | 1 - test/integration/Android/Device/HideKeyboardTestCase.cs | 1 - test/integration/Android/Device/KeyPressTest.cs | 1 - test/integration/Android/Device/NetworkTests.cs | 1 - test/integration/Android/Device/PerformanceDataTests.cs | 1 - test/integration/Android/Device/SystemTests.cs | 2 -- test/integration/Android/ElementTest.cs | 1 - test/integration/Android/FileInteractionTest.cs | 1 - test/integration/Android/IntentAndroidTest.cs | 1 - test/integration/Android/LockDeviceTest.cs | 2 -- test/integration/Android/ScreenRecordingTest.cs | 1 - test/integration/Android/Session/GeolocationTests.cs | 1 - test/integration/Android/SessionDetailTest.cs | 1 - test/integration/Android/SessionTest.cs | 1 - test/integration/Android/SettingTest.cs | 1 - test/integration/Appium.Net.Integration.Tests.csproj | 3 --- test/integration/IOS/AlertTest.cs | 1 - test/integration/IOS/ClipboardTest.cs | 1 - test/integration/IOS/Device/AppTests.cs | 1 - test/integration/IOS/LockDeviceTest.cs | 1 - test/integration/IOS/ScreenRecordingTest.cs | 1 - test/integration/IOS/ScrollingSearchingTest.cs | 1 - test/integration/IOS/SearchingClassChainTest.cs | 1 - test/integration/IOS/Session/LogTests.cs | 1 - test/integration/IOS/SettingTest.cs | 1 - test/integration/IOS/TouchActionTest.cs | 1 - .../DesktopBrowserCompatibilityTest.cs | 1 - .../PageObjectTests/Windows/WindowsAlarmAppTest.cs | 1 - .../AndroidPageObjectChecksAttributeMixOnNativeApp1.cs | 1 - .../AndroidPageObjectChecksAttributesForNativeAndroidApp.cs | 1 - .../AndroidPageObjectChecksSeleniumFindsByCompatibility.cs | 1 - .../PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs | 1 - .../IOSPageObjectChecksAttributesForNativeIOSApp.cs | 1 - test/integration/Windows/StickyNotesTest.cs | 4 ---- 41 files changed, 2 insertions(+), 50 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index 5882c6980..e557625eb 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -49,8 +49,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/test/integration/Android/ActivityTest.cs b/test/integration/Android/ActivityTest.cs index ff9659346..d645a5bb6 100644 --- a/test/integration/Android/ActivityTest.cs +++ b/test/integration/Android/ActivityTest.cs @@ -1,7 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android diff --git a/test/integration/Android/AppStringsTest.cs b/test/integration/Android/AppStringsTest.cs index f8db68a61..ba98fedb2 100644 --- a/test/integration/Android/AppStringsTest.cs +++ b/test/integration/Android/AppStringsTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/ClipboardTest.cs b/test/integration/Android/ClipboardTest.cs index b096b198a..e00e4a156 100644 --- a/test/integration/Android/ClipboardTest.cs +++ b/test/integration/Android/ClipboardTest.cs @@ -2,7 +2,6 @@ using System.Text.RegularExpressions; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; diff --git a/test/integration/Android/ConnectionTest.cs b/test/integration/Android/ConnectionTest.cs index 08adcc39d..0bccf07be 100644 --- a/test/integration/Android/ConnectionTest.cs +++ b/test/integration/Android/ConnectionTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/CurrentPackageTest.cs b/test/integration/Android/CurrentPackageTest.cs index c6d41c273..3b82a3cae 100644 --- a/test/integration/Android/CurrentPackageTest.cs +++ b/test/integration/Android/CurrentPackageTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android diff --git a/test/integration/Android/Device/AppTests.cs b/test/integration/Android/Device/AppTests.cs index 55841b36e..cc4248655 100644 --- a/test/integration/Android/Device/AppTests.cs +++ b/test/integration/Android/Device/AppTests.cs @@ -1,7 +1,6 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/Device/AuthenticationTest.cs b/test/integration/Android/Device/AuthenticationTest.cs index a6c6f07d4..0a8e5786b 100644 --- a/test/integration/Android/Device/AuthenticationTest.cs +++ b/test/integration/Android/Device/AuthenticationTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; diff --git a/test/integration/Android/Device/HideKeyboardTestCase.cs b/test/integration/Android/Device/HideKeyboardTestCase.cs index 204bca86b..d9970b0ca 100644 --- a/test/integration/Android/Device/HideKeyboardTestCase.cs +++ b/test/integration/Android/Device/HideKeyboardTestCase.cs @@ -1,7 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android.Device.Keys diff --git a/test/integration/Android/Device/KeyPressTest.cs b/test/integration/Android/Device/KeyPressTest.cs index 6a2bb2ee2..8d98c6aee 100644 --- a/test/integration/Android/Device/KeyPressTest.cs +++ b/test/integration/Android/Device/KeyPressTest.cs @@ -1,7 +1,6 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; diff --git a/test/integration/Android/Device/NetworkTests.cs b/test/integration/Android/Device/NetworkTests.cs index 8122bfacd..d57b1aa4e 100644 --- a/test/integration/Android/Device/NetworkTests.cs +++ b/test/integration/Android/Device/NetworkTests.cs @@ -1,7 +1,6 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; diff --git a/test/integration/Android/Device/PerformanceDataTests.cs b/test/integration/Android/Device/PerformanceDataTests.cs index 9aa9e711e..e1be68037 100644 --- a/test/integration/Android/Device/PerformanceDataTests.cs +++ b/test/integration/Android/Device/PerformanceDataTests.cs @@ -1,7 +1,6 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; diff --git a/test/integration/Android/Device/SystemTests.cs b/test/integration/Android/Device/SystemTests.cs index b629082a5..951d5c179 100644 --- a/test/integration/Android/Device/SystemTests.cs +++ b/test/integration/Android/Device/SystemTests.cs @@ -1,8 +1,6 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/ElementTest.cs b/test/integration/Android/ElementTest.cs index 178edabbd..3374d04f8 100644 --- a/test/integration/Android/ElementTest.cs +++ b/test/integration/Android/ElementTest.cs @@ -1,7 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.UiAutomator; diff --git a/test/integration/Android/FileInteractionTest.cs b/test/integration/Android/FileInteractionTest.cs index 865d0406f..43b28032a 100644 --- a/test/integration/Android/FileInteractionTest.cs +++ b/test/integration/Android/FileInteractionTest.cs @@ -3,7 +3,6 @@ using System.Text; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android diff --git a/test/integration/Android/IntentAndroidTest.cs b/test/integration/Android/IntentAndroidTest.cs index 60f54e421..56fdea65a 100644 --- a/test/integration/Android/IntentAndroidTest.cs +++ b/test/integration/Android/IntentAndroidTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android diff --git a/test/integration/Android/LockDeviceTest.cs b/test/integration/Android/LockDeviceTest.cs index a52ec8af1..2eb9c40e0 100644 --- a/test/integration/Android/LockDeviceTest.cs +++ b/test/integration/Android/LockDeviceTest.cs @@ -1,7 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; -using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android diff --git a/test/integration/Android/ScreenRecordingTest.cs b/test/integration/Android/ScreenRecordingTest.cs index 3e95b7b74..a0468f47f 100644 --- a/test/integration/Android/ScreenRecordingTest.cs +++ b/test/integration/Android/ScreenRecordingTest.cs @@ -2,7 +2,6 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/Session/GeolocationTests.cs b/test/integration/Android/Session/GeolocationTests.cs index 343fb3fb2..fd32be5f9 100644 --- a/test/integration/Android/Session/GeolocationTests.cs +++ b/test/integration/Android/Session/GeolocationTests.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/SessionDetailTest.cs b/test/integration/Android/SessionDetailTest.cs index b263e3198..2ecc3024f 100644 --- a/test/integration/Android/SessionDetailTest.cs +++ b/test/integration/Android/SessionDetailTest.cs @@ -1,7 +1,6 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; diff --git a/test/integration/Android/SessionTest.cs b/test/integration/Android/SessionTest.cs index b00167153..4f2cc5592 100644 --- a/test/integration/Android/SessionTest.cs +++ b/test/integration/Android/SessionTest.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; diff --git a/test/integration/Android/SettingTest.cs b/test/integration/Android/SettingTest.cs index 1e7caf3a8..57774d877 100644 --- a/test/integration/Android/SettingTest.cs +++ b/test/integration/Android/SettingTest.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index 26203da68..41f3cc844 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -11,11 +11,8 @@ - - - diff --git a/test/integration/IOS/AlertTest.cs b/test/integration/IOS/AlertTest.cs index 9699ed356..1ccc0adae 100644 --- a/test/integration/IOS/AlertTest.cs +++ b/test/integration/IOS/AlertTest.cs @@ -1,7 +1,6 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; diff --git a/test/integration/IOS/ClipboardTest.cs b/test/integration/IOS/ClipboardTest.cs index da5a52cb2..418916465 100644 --- a/test/integration/IOS/ClipboardTest.cs +++ b/test/integration/IOS/ClipboardTest.cs @@ -5,7 +5,6 @@ using System.Text.RegularExpressions; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.iOS; diff --git a/test/integration/IOS/Device/AppTests.cs b/test/integration/IOS/Device/AppTests.cs index fcb366b8d..879c06700 100644 --- a/test/integration/IOS/Device/AppTests.cs +++ b/test/integration/IOS/Device/AppTests.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; diff --git a/test/integration/IOS/LockDeviceTest.cs b/test/integration/IOS/LockDeviceTest.cs index 45de3a144..0efcccc83 100644 --- a/test/integration/IOS/LockDeviceTest.cs +++ b/test/integration/IOS/LockDeviceTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.IOS diff --git a/test/integration/IOS/ScreenRecordingTest.cs b/test/integration/IOS/ScreenRecordingTest.cs index 4dda19fd9..434bd2233 100644 --- a/test/integration/IOS/ScreenRecordingTest.cs +++ b/test/integration/IOS/ScreenRecordingTest.cs @@ -2,7 +2,6 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.IOS diff --git a/test/integration/IOS/ScrollingSearchingTest.cs b/test/integration/IOS/ScrollingSearchingTest.cs index d6d307533..cc9fbb70e 100644 --- a/test/integration/IOS/ScrollingSearchingTest.cs +++ b/test/integration/IOS/ScrollingSearchingTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; diff --git a/test/integration/IOS/SearchingClassChainTest.cs b/test/integration/IOS/SearchingClassChainTest.cs index 268898daa..1ee4b1962 100644 --- a/test/integration/IOS/SearchingClassChainTest.cs +++ b/test/integration/IOS/SearchingClassChainTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; diff --git a/test/integration/IOS/Session/LogTests.cs b/test/integration/IOS/Session/LogTests.cs index 5e5172530..664a0cf3b 100644 --- a/test/integration/IOS/Session/LogTests.cs +++ b/test/integration/IOS/Session/LogTests.cs @@ -3,7 +3,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; diff --git a/test/integration/IOS/SettingTest.cs b/test/integration/IOS/SettingTest.cs index 0c74cbbfb..ca8133c2b 100644 --- a/test/integration/IOS/SettingTest.cs +++ b/test/integration/IOS/SettingTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.iOS diff --git a/test/integration/IOS/TouchActionTest.cs b/test/integration/IOS/TouchActionTest.cs index 778382fa5..b180e8b7d 100644 --- a/test/integration/IOS/TouchActionTest.cs +++ b/test/integration/IOS/TouchActionTest.cs @@ -1,6 +1,5 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; diff --git a/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs b/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs index 0b7fc7a84..f5711f9a1 100644 --- a/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs +++ b/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs @@ -6,7 +6,6 @@ using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.PageObjects.Attributes; using OpenQA.Selenium.Firefox; -using OpenQA.Selenium.Internal; using SeleniumExtras.PageObjects; namespace Appium.Net.Integration.Tests.PageObjectTests.DesktopBrowserCompatibility diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index 3411cff95..8f025a611 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -1,7 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; -using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.Windows; diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs index be962aa21..34681ca75 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using OpenQA.Selenium; -using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs index 09f7afa00..84de4c7a9 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using OpenQA.Selenium; -using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs index 6bd3250b7..da0f48107 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using OpenQA.Selenium; -using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using SeleniumExtras.PageObjects; diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs index 14af44bfa..4b42202fc 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs index 315fce0ba..2c170582a 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using OpenQA.Selenium; diff --git a/test/integration/Windows/StickyNotesTest.cs b/test/integration/Windows/StickyNotesTest.cs index 3f10e0cb6..42846e4a3 100644 --- a/test/integration/Windows/StickyNotesTest.cs +++ b/test/integration/Windows/StickyNotesTest.cs @@ -52,8 +52,6 @@ public void BeforeAll() // session and create a new session based on the located top window pane. AppiumOptions desktopCapabilities = new AppiumOptions(); desktopCapabilities.App = "Root"; - //desktopCapabilities.AddAdditionalOption("app", "Root"); - //desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); var StickyNotesTopLevelWindow = desktopSession.FindElementByClassName("Modern_Sticky_Top_Window"); @@ -62,7 +60,6 @@ public void BeforeAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); - //appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); session = new WindowsDriver(serverUri, appCapabilities); } Assert.IsNotNull(session); @@ -92,7 +89,6 @@ public void AfterAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); - // appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); stickyNoteSession.Close(); } From 8f778f0d96f85cd9a9beeddec5c3268b2265a20a Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Thu, 7 Oct 2021 08:46:37 -0500 Subject: [PATCH 07/21] Cleanup mobile selectors and image compare test --- src/Appium.Net/Appium/MobileSelectors.cs | 36 +++++++++---------- .../Windows/ImagesComparisonTest.cs | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Appium.Net/Appium/MobileSelectors.cs b/src/Appium.Net/Appium/MobileSelectors.cs index afcaf6e65..c39252dcb 100644 --- a/src/Appium.Net/Appium/MobileSelectors.cs +++ b/src/Appium.Net/Appium/MobileSelectors.cs @@ -9,87 +9,87 @@ public static class MobileSelectors { public static IWebElement FindElementByAccessibilityId(this IWebElement searchContext, string selector) { - return (searchContext as WebDriver).FindElement(MobileSelector.Accessibility, selector); + return (searchContext as WebElement).FindElement(MobileSelector.Accessibility, selector); } public static ReadOnlyCollection FindElementsByAccessibilityId(this IWebElement searchContext, string selector) { - return (searchContext as WebDriver).FindElements(MobileSelector.Accessibility, selector); + return (searchContext as WebElement).FindElements(MobileSelector.Accessibility, selector); } public static IWebElement FindElementByName(this IWebElement searchContext, string selector) { - return (searchContext as WebDriver).FindElement(MobileSelector.Name, selector); + return (searchContext as WebElement).FindElement(MobileSelector.Name, selector); } public static ReadOnlyCollection FindElementsByName(this IWebElement searchContext, string selector) { - return (searchContext as WebDriver).FindElements(MobileSelector.Name, selector); + return (searchContext as WebElement).FindElements(MobileSelector.Name, selector); } #region IFindByIosUIAutomation Members public static IWebElement FindElementByIosUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElement(MobileSelector.iOSAutomatoion, selector); + (searchContext as WebElement).FindElement(MobileSelector.iOSAutomatoion, selector); public static IReadOnlyCollection FindElementsByIosUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElements(MobileSelector.iOSAutomatoion, selector); + (searchContext as WebElement).FindElements(MobileSelector.iOSAutomatoion, selector); #endregion IFindByIosUIAutomation Members #region IFindByAndroidUIAutomator Members public static IWebElement FindElementByAndroidUIAutomator(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElement(MobileSelector.AndroidUIAutomator, selector); + (searchContext as WebElement).FindElement(MobileSelector.AndroidUIAutomator, selector); public static IWebElement FindElementByAndroidUIAutomator(this IWebElement searchContext, IUiAutomatorStatementBuilder selector) => - (searchContext as WebDriver).FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); + (searchContext as WebElement).FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); public static IReadOnlyCollection FindElementsByAndroidUIAutomator(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElements(MobileSelector.AndroidUIAutomator, selector); + (searchContext as WebElement).FindElements(MobileSelector.AndroidUIAutomator, selector); public static IReadOnlyCollection FindElementsByAndroidUIAutomator(this IWebElement searchContext, IUiAutomatorStatementBuilder selector) => - (searchContext as WebDriver).FindElements(MobileSelector.AndroidUIAutomator, selector.Build()); + (searchContext as WebElement).FindElements(MobileSelector.AndroidUIAutomator, selector.Build()); #endregion IFindByAndroidUIAutomator Members #region IFindByAndroidDataMatcher Members public static IWebElement FindElementByAndroidDataMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElement(MobileSelector.AndroidDataMatcher, selector); + (searchContext as WebElement).FindElement(MobileSelector.AndroidDataMatcher, selector); public static IReadOnlyCollection FindElementsByAndroidDataMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElements(MobileSelector.AndroidDataMatcher, selector); + (searchContext as WebElement).FindElements(MobileSelector.AndroidDataMatcher, selector); #endregion IFindByAndroidDataMatcher Members #region IFindByAndroidViewMatcher Members public static IWebElement FindElementByAndroidViewMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElement(MobileSelector.AndroidViewMatcher, selector); + (searchContext as WebElement).FindElement(MobileSelector.AndroidViewMatcher, selector); public static IReadOnlyCollection FindElementsByAndroidViewMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElements(MobileSelector.AndroidViewMatcher, selector); + (searchContext as WebElement).FindElements(MobileSelector.AndroidViewMatcher, selector); #endregion IFindByAndroidViewMatcher Members #region IFindByTizenUIAutomation Members public static IWebElement FindElementByTizenUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElement(MobileSelector.TizenUIAutomation, selector); + (searchContext as WebElement).FindElement(MobileSelector.TizenUIAutomation, selector); public static IReadOnlyCollection FindElementsByTizenUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElements(MobileSelector.TizenUIAutomation, selector); + (searchContext as WebElement).FindElements(MobileSelector.TizenUIAutomation, selector); #endregion IFindByTizenUIAutomation Members #region IFindByWindowsUIAutomation Members public static IWebElement FindElementByWindowsUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElement(MobileSelector.WindowsUIAutomation, selector); + (searchContext as WebElement).FindElement(MobileSelector.WindowsUIAutomation, selector); public static IReadOnlyCollection FindElementsByWindowsUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebDriver).FindElements(MobileSelector.WindowsUIAutomation, selector); + (searchContext as WebElement).FindElements(MobileSelector.WindowsUIAutomation, selector); #endregion IFindByWindowsUIAutomation Members } diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index 790ef21c4..d2afd15dc 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -16,7 +16,7 @@ public class ImagesComparisonTest public void BeforeAll() { var appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("appium:app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); + appCapabilities.App = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"; var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); From 7f33808fac557c61402944d4bcf2c67e91acd0a7 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Thu, 7 Oct 2021 13:05:42 -0500 Subject: [PATCH 08/21] Fix mobile By bug --- src/Appium.Net/Appium/MobileBy.cs | 32 +------------------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/src/Appium.Net/Appium/MobileBy.cs b/src/Appium.Net/Appium/MobileBy.cs index f488d336f..31bbe2948 100644 --- a/src/Appium.Net/Appium/MobileBy.cs +++ b/src/Appium.Net/Appium/MobileBy.cs @@ -26,8 +26,7 @@ public abstract class MobileBy : By protected readonly string selector; private readonly string _searchingCriteriaName; - - internal MobileBy(string selector, string searchingCriteriaName) : base(selector, searchingCriteriaName) + internal MobileBy(string selector, string searchingCriteriaName) : base(searchingCriteriaName, selector) { if (string.IsNullOrEmpty(selector)) { @@ -38,35 +37,6 @@ internal MobileBy(string selector, string searchingCriteriaName) : base(selector _searchingCriteriaName = searchingCriteriaName; } - ///// - ///// Find a single element. - ///// - ///// Context used to find the element. - ///// The element that matches - //public override IWebElement FindElement(ISearchContext context) - //{ - // var by = new By(_searchingCriteriaName, selector); - // return context.FindElement(new By(_searchingCriteriaName, selector)); - - // //////////if (context is IFindsByFluentSelector finder) - // ////////// return finder.FindElement(_searchingCriteriaName, selector); - // //////////throw new InvalidCastException($"Unable to cast {context.GetType().FullName} " + - // ////////// $"to {nameof(IFindsByFluentSelector)}"); - //} - - /// - /// Finds many elements - /// - /// Context used to find the element. - /// A readonly collection of elements that match. - public override ReadOnlyCollection FindElements(ISearchContext context) - { - if (context is IFindsByFluentSelector finder) - return finder.FindElements(_searchingCriteriaName, selector).ToList().AsReadOnly(); - throw new InvalidCastException($"Unable to cast {context.GetType().FullName} " + - $"to {nameof(IFindsByFluentSelector)}"); - } - /// /// This method creates a strategy /// that searches for elements by accessibility id From 8bed9feabd23649267d756c7594bf0ecaa623b3b Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Thu, 7 Oct 2021 14:31:50 -0500 Subject: [PATCH 09/21] Undo local test code --- test/integration/Android/Session/LogTests.cs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/test/integration/Android/Session/LogTests.cs b/test/integration/Android/Session/LogTests.cs index 0dc910bfe..982cacf29 100644 --- a/test/integration/Android/Session/LogTests.cs +++ b/test/integration/Android/Session/LogTests.cs @@ -21,14 +21,9 @@ internal class LogTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - //////_driver = new AndroidDriver( - ////// Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, - ////// _androidOptions); - - _driver = new AndroidDriver(new System.Uri("http://127.0.0.1:4723/wd/hub"), _androidOptions); - - - ///var serverUri = new System.Uri("http://127.0.0.1:4723/wd/hub"); + _driver = new AndroidDriver( + Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, + _androidOptions); } [OneTimeTearDown] From 6f0ecad69e2822d0a0370ad4678341754e6c8d7d Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 8 Oct 2021 08:28:09 -0500 Subject: [PATCH 10/21] Address PR comments --- src/Appium.Net/Appium/AppiumDriver.cs | 30 +++++++++++++++++++ src/Appium.Net/Appium/AppiumOptions.cs | 21 ++++--------- .../Appium/Service/AppiumCommandExecutor.cs | 13 +------- test/integration/Android/ElementTest.cs | 7 ++--- 4 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index 06b74c27a..8b35ebc4b 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -25,10 +25,12 @@ using System.Linq; using System.Text; using OpenQA.Selenium.Appium.ImageComparison; +using OpenQA.Selenium.Internal; namespace OpenQA.Selenium.Appium { public abstract class AppiumDriver : WebDriver, IFindsByImage, + IFindsByClassName, IFindsById, IFindsByName, IFindsByTagName, IHasSessionDetails, IHasLocation, IFindByAccessibilityId, @@ -90,6 +92,34 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim #endregion Constructors + #region Overrides to fix "css selector" issue + + IWebElement IFindsByClassName.FindElementByClassName(string className) => + base.FindElement(MobileSelector.ClassName, className); + + ReadOnlyCollection IFindsByClassName.FindElementsByClassName(string className) => + base.FindElements(MobileSelector.ClassName, className); + + IWebElement IFindsById.FindElementById(string id) => + base.FindElement(MobileSelector.Id, id); + + ReadOnlyCollection IFindsById.FindElementsById(string id) => + base.FindElements(MobileSelector.Id, id); + + IWebElement IFindsByName.FindElementByName(string name) => + base.FindElement(MobileSelector.Name, name); + + ReadOnlyCollection IFindsByName.FindElementsByName(string name) => + base.FindElements(MobileSelector.Name, name); + + IWebElement IFindsByTagName.FindElementByTagName(string tagName) => + base.FindElement(MobileSelector.TagName, tagName); + + ReadOnlyCollection IFindsByTagName.FindElementsByTagName(string tagName) => + base.FindElements(MobileSelector.TagName, tagName); + + #endregion Overrides to fix "css selector" issue + #region Generic FindMethods public new IWebElement FindElement(By by) => diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index 7529bc2f1..cf4282751 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -1,8 +1,6 @@ -using OpenQA.Selenium.Appium.Enums; -using OpenQA.Selenium.Remote; +using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; -using System.Globalization; namespace OpenQA.Selenium.Appium { @@ -11,6 +9,7 @@ namespace OpenQA.Selenium.Appium /// public class AppiumOptions : DriverOptions { + private const string VendorPrefix = "appium"; private const string AutomationNameOption = "appium:automationName"; private const string DeviceNameOption = "appium:deviceName"; private const string AppOption = "appium:app"; @@ -27,16 +26,8 @@ public AppiumOptions() : base() this.AddKnownCapabilityName(AppiumOptions.AutomationNameOption, "AutomationName property"); this.AddKnownCapabilityName(AppiumOptions.DeviceNameOption, "DeviceName property"); this.AddKnownCapabilityName(AppiumOptions.AppOption, "Application property"); - this.AddKnownCapabilityName("app", "Application property"); this.AddKnownCapabilityName(AppiumOptions.PlatformVersionOption, "PlatformVersion property"); - } - - /// - /// Gets the vendor prefix to apply to Chromium-specific capability names. - /// - protected string VendorPrefix - { - get { return "appium"; } + this.AddKnownCapabilityName("app", "Application property"); } /// @@ -77,8 +68,6 @@ protected string VendorPrefix /// webdriver executable. public void AddAdditionalAppiumOption(string optionName, object optionValue) { - this.ValidateCapabilityName(optionName); - string name; if (optionName.Contains(":")) @@ -87,7 +76,7 @@ public void AddAdditionalAppiumOption(string optionName, object optionValue) } else { - name = $"{this.VendorPrefix}:{optionName}"; + name = $"{VendorPrefix}:{optionName}"; } this.ValidateCapabilityName(name); @@ -99,7 +88,7 @@ public void AddAdditionalAppiumOption(string optionName, object optionValue) /// /// Capability name /// Capabilities value, which cannot be null or empty - [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalChromeOption method for adding additional options")] + [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalAppiumOption method for adding additional options")] public override void AddAdditionalCapability(string capabilityName, object capabilityValue) { this.AddAdditionalAppiumOption(capabilityName, capabilityValue); diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index a371941e1..6f2e661b4 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -34,18 +34,7 @@ private static ICommandExecutor CreateRealExecutor(Uri remoteAddress, TimeSpan c URL = remoteAddress; CommandTimeout = commandTimeout; - var seleniumAssembly = Assembly.Load("WebDriver"); - var commandType = seleniumAssembly.GetType("OpenQA.Selenium.Remote.HttpCommandExecutor"); - ICommandExecutor commandExecutor = null; - - if (null != commandType) - { - commandExecutor = - Activator.CreateInstance(commandType, new object[] { remoteAddress, commandTimeout }) as - ICommandExecutor; - } - - return commandExecutor; + return new HttpCommandExecutor(remoteAddress, commandTimeout); } private AppiumCommandExecutor(Uri url, ICommandExecutor realExecutor) diff --git a/test/integration/Android/ElementTest.cs b/test/integration/Android/ElementTest.cs index 3374d04f8..a7da9e558 100644 --- a/test/integration/Android/ElementTest.cs +++ b/test/integration/Android/ElementTest.cs @@ -14,12 +14,9 @@ public class ElementTest [OneTimeSetUp] public void BeforeAll() { - var capabilities = Env.ServerIsRemote() - ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) - : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - /// var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; + var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - var serverUri = new System.Uri("http://127.0.0.1:4723/wd/hub"); _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } From a559075524a5ae2b27ba3458862565796e81b2d9 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 8 Oct 2021 10:05:11 -0500 Subject: [PATCH 11/21] Add back IdempotencyHeader --- src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index 6f2e661b4..b2e191edd 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -12,11 +12,8 @@ //See the License for the specific language governing permissions and //limitations under the License. -using OpenQA.Selenium.Appium.Windows; using OpenQA.Selenium.Remote; using System; -using System.Collections.Generic; -using System.Reflection; namespace OpenQA.Selenium.Appium.Service { @@ -28,6 +25,7 @@ internal class AppiumCommandExecutor : ICommandExecutor private ICommandExecutor RealExecutor; private bool isDisposed; + private const string IdempotencyHeader = "X-Idempotency-Key"; private static ICommandExecutor CreateRealExecutor(Uri remoteAddress, TimeSpan commandTimeout) { @@ -98,6 +96,8 @@ private ICommandExecutor ModifyNewSessionHttpRequestHeader(ICommandExecutor comm { if (commandExecutor == null) throw new ArgumentNullException(nameof(commandExecutor)); var modifiedCommandExecutor = commandExecutor as HttpCommandExecutor; + modifiedCommandExecutor.SendingRemoteHttpRequest += (sender, args) => + args.AddHeader(IdempotencyHeader, Guid.NewGuid().ToString()); return modifiedCommandExecutor; } From 036e540e5af63d7466a1d368b7c2d51307ad376b Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 8 Oct 2021 12:08:52 -0500 Subject: [PATCH 12/21] PR related cleanup --- src/Appium.Net/Appium/AppiumOptions.cs | 7 ++++++- .../Appium/Service/AppiumCommandExecutor.cs | 13 +++---------- test/integration/Android/Device/KeyPressTest.cs | 4 +--- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index cf4282751..cf4aa9be5 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -88,12 +88,17 @@ public void AddAdditionalAppiumOption(string optionName, object optionValue) /// /// Capability name /// Capabilities value, which cannot be null or empty - [Obsolete("Use the temporary AddAdditionalOption method or the AddAdditionalAppiumOption method for adding additional options")] + [Obsolete("Use the the AddAdditionalAppiumOption method for adding additional options")] public override void AddAdditionalCapability(string capabilityName, object capabilityValue) { this.AddAdditionalAppiumOption(capabilityName, capabilityValue); } + public override void AddAdditionalOption(string optionName, object optionValue) + { + throw new NotImplementedException("Use the the AddAdditionalAppiumOption method for adding additional options"); + } + /// diff --git a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs index b2e191edd..220beec57 100644 --- a/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs +++ b/src/Appium.Net/Appium/Service/AppiumCommandExecutor.cs @@ -20,35 +20,28 @@ namespace OpenQA.Selenium.Appium.Service internal class AppiumCommandExecutor : ICommandExecutor { private readonly AppiumLocalService Service; - private static Uri URL; - private static TimeSpan CommandTimeout; - private ICommandExecutor RealExecutor; private bool isDisposed; private const string IdempotencyHeader = "X-Idempotency-Key"; private static ICommandExecutor CreateRealExecutor(Uri remoteAddress, TimeSpan commandTimeout) { - URL = remoteAddress; - CommandTimeout = commandTimeout; - return new HttpCommandExecutor(remoteAddress, commandTimeout); } - private AppiumCommandExecutor(Uri url, ICommandExecutor realExecutor) + private AppiumCommandExecutor(ICommandExecutor realExecutor) { - URL = url; RealExecutor = realExecutor; } internal AppiumCommandExecutor(Uri url, TimeSpan timeForTheServerResponding) - : this(url, CreateRealExecutor(url, timeForTheServerResponding)) + : this(CreateRealExecutor(url, timeForTheServerResponding)) { Service = null; } internal AppiumCommandExecutor(AppiumLocalService service, TimeSpan timeForTheServerResponding) - : this(service.ServiceUrl, CreateRealExecutor(service.ServiceUrl, timeForTheServerResponding)) + : this(CreateRealExecutor(service.ServiceUrl, timeForTheServerResponding)) { Service = service; } diff --git a/test/integration/Android/Device/KeyPressTest.cs b/test/integration/Android/Device/KeyPressTest.cs index 8d98c6aee..727e8995c 100644 --- a/test/integration/Android/Device/KeyPressTest.cs +++ b/test/integration/Android/Device/KeyPressTest.cs @@ -13,9 +13,7 @@ class KeyPressTest [OneTimeSetUp] public void BeforeAll() { - var capabilities = Env.ServerIsRemote() - ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) - : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); + var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; From cb5970f9d0a40754c211e2f8d5bfcabd5efe86dc Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 8 Oct 2021 13:33:56 -0500 Subject: [PATCH 13/21] Update to latest Selenium RC --- src/Appium.Net/Appium.Net.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index e557625eb..642403ce6 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -49,8 +49,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + From 6eb65d981ab1b2f6ca8143eac9cb9d7b8d47cf34 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Fri, 8 Oct 2021 16:30:58 -0500 Subject: [PATCH 14/21] Update PageObjects code to work with new Element and driver paradigm Update tests to leverage configuration DeviceName and AddAdditionalAppiumOption --- .../Appium/AppiumCommandExecutionHelper.cs | 4 +- .../Appium/Interfaces/IMobileElement.cs | 32 -------------- .../AppiumPageObjectMemberDecorator.cs | 4 ++ .../Appium/PageObjects/ByFactory.cs | 12 +++++ .../Appium/PageObjects/GenericsUtility.cs | 9 ++-- test/integration/Android/ClipboardTest.cs | 2 +- .../Android/Device/AuthenticationTest.cs | 2 +- test/integration/Android/WebviewTest.cs | 4 +- test/integration/IOS/ClipboardTest.cs | 2 +- test/integration/IOS/SearchingTest.cs | 8 ++-- test/integration/IOS/TouchActionTest.cs | 8 ++-- test/integration/IOS/WebviewTest.cs | 8 ++-- test/integration/Mac/AlertTest.cs | 2 +- .../IOS/NativeAppAttributesTest.cs | 8 ++-- .../Windows/WindowsAlarmAppTest.cs | 2 +- ...ageObjectChecksAttributeMixOnNativeApp1.cs | 16 +++---- ...ageObjectChecksAttributeMixOnNativeApp2.cs | 18 ++++---- ...jectChecksAttributesForNativeAndroidApp.cs | 44 +++++++++---------- ...geObjectChecksSelendroidModeOnNativeApp.cs | 2 +- ...bjectChecksSeleniumFindsByCompatibility.cs | 16 +++---- ...PageObjectChecksAttributeMixOnNativeApp.cs | 12 ++--- ...geObjectChecksAttributesForNativeIOSApp.cs | 12 ++--- .../AppiumLocalServerLaunchingTest.cs | 20 ++++----- .../ServerTests/StartingAppLocallyTest.cs | 8 ++-- .../Windows/MultiSelectControlTest.cs | 2 +- test/integration/Windows/PentTest.cs | 4 +- test/integration/Windows/StickyNotesTest.cs | 6 +-- test/integration/helpers/Caps.cs | 2 +- 28 files changed, 128 insertions(+), 141 deletions(-) delete mode 100644 src/Appium.Net/Appium/Interfaces/IMobileElement.cs diff --git a/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs b/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs index a8f459d35..04272d0b2 100644 --- a/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs +++ b/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs @@ -94,7 +94,7 @@ public static void SetClipboard(IExecuteMethod executeMethod, ClipboardContentTy { case ClipboardContentType.Image: case ClipboardContentType.Url: - if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) + if (executeMethod.GetType() == typeof(AndroidDriver) || executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) { throw new NotImplementedException( $"Android only supports contentType: {nameof(ClipboardContentType.PlainText)}"); @@ -118,7 +118,7 @@ public static string GetClipboard(IExecuteMethod executeMethod, ClipboardContent { case ClipboardContentType.Image: case ClipboardContentType.Url: - if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) + if (executeMethod.GetType() == typeof(AndroidDriver) || executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) { throw new NotImplementedException( $"Android only supports contentType: {nameof(ClipboardContentType.PlainText)}"); diff --git a/src/Appium.Net/Appium/Interfaces/IMobileElement.cs b/src/Appium.Net/Appium/Interfaces/IMobileElement.cs deleted file mode 100644 index d8da28d2d..000000000 --- a/src/Appium.Net/Appium/Interfaces/IMobileElement.cs +++ /dev/null @@ -1,32 +0,0 @@ -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//See the NOTICE file distributed with this work for additional -//information regarding copyright ownership. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. - -using Appium.Interfaces.Generic.SearchContext; - -namespace OpenQA.Selenium.Appium.Interfaces -{ - /// - /// This interface extends IWebElement and defines specific behavior - /// for mobile. - /// - public interface IMobileElement : IFindByAccessibilityId, IGenericSearchContext, - IGenericFindsByClassName, - IGenericFindsById, IGenericFindsByCssSelector, IGenericFindsByLinkText, - IGenericFindsByName, - IGenericFindsByPartialLinkText, IGenericFindsByTagName, IGenericFindsByXPath, IWebElement, - IExecuteMethod - where W : IWebElement - { - } -} \ No newline at end of file diff --git a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs index 68b68de39..4979121b2 100644 --- a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs +++ b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs @@ -66,8 +66,12 @@ private static Type GetTypeOfASingleElement(Type targetType, MemberInfo member) { if (typeof(IWebElement).Equals(targetType)) return targetType; + else if (typeof(WebElement).Equals(targetType)) + return targetType; else if (GenericsUtility.MatchGenerics(typeof(IWebElement), ListOfAvailableElementTypes, targetType)) return targetType; + else if (GenericsUtility.MatchGenerics(typeof(WebElement), ListOfAvailableElementTypes, targetType)) + return targetType; return null; } diff --git a/src/Appium.Net/Appium/PageObjects/ByFactory.cs b/src/Appium.Net/Appium/PageObjects/ByFactory.cs index fe9922b8c..325db08ad 100644 --- a/src/Appium.Net/Appium/PageObjects/ByFactory.cs +++ b/src/Appium.Net/Appium/PageObjects/ByFactory.cs @@ -220,6 +220,18 @@ private static string GetPlatform(ISearchContext context) if (driver == null) return null; + if (driver is AndroidDriver) + { + return MobilePlatform.Android; + }else if (driver is IOSDriver) + { + return MobilePlatform.IOS; + } + if (driver is WindowsDriver) + { + return MobilePlatform.Windows; + } + Type driverType = driver.GetType(); if (GenericsUtility.MatchGenerics(typeof(AndroidDriver), diff --git a/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs b/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs index 5e579f560..41c33f1f3 100644 --- a/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs +++ b/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs @@ -23,9 +23,12 @@ public static bool MatchGenerics(Type generalType, List possibleParameters { foreach (var type in possibleParameters) { - Type fullType = generalType.MakeGenericType(type); - if (fullType.Equals(targetType)) - return true; + if (!generalType.IsEquivalentTo(type) && !generalType.IsAssignableFrom(type) && !type.IsAssignableFrom(generalType)) + { + Type fullType = generalType.MakeGenericType(type); + if (fullType.Equals(targetType)) + return true; + } } return false; diff --git a/test/integration/Android/ClipboardTest.cs b/test/integration/Android/ClipboardTest.cs index e00e4a156..eca255ec1 100644 --- a/test/integration/Android/ClipboardTest.cs +++ b/test/integration/Android/ClipboardTest.cs @@ -20,7 +20,7 @@ public void BeforeAll() var capabilities = Env.ServerIsRemote() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/Android/Device/AuthenticationTest.cs b/test/integration/Android/Device/AuthenticationTest.cs index 0a8e5786b..6c6084170 100644 --- a/test/integration/Android/Device/AuthenticationTest.cs +++ b/test/integration/Android/Device/AuthenticationTest.cs @@ -13,7 +13,7 @@ public class AuthenticationTest public void BeforeAll() { var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/Android/WebviewTest.cs b/test/integration/Android/WebviewTest.cs index f162f4973..2e9825f8c 100644 --- a/test/integration/Android/WebviewTest.cs +++ b/test/integration/Android/WebviewTest.cs @@ -20,8 +20,8 @@ public void BeforeAll() var capabilities = Env.ServerIsRemote() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); - capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.selendroid.testapp"); - capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".WebViewActivity"); + capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppPackage, "io.selendroid.testapp"); + capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppActivity, ".WebViewActivity"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/IOS/ClipboardTest.cs b/test/integration/IOS/ClipboardTest.cs index 418916465..fbdb7abf7 100644 --- a/test/integration/IOS/ClipboardTest.cs +++ b/test/integration/IOS/ClipboardTest.cs @@ -21,7 +21,7 @@ public class ClipboardTest public void Setup() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); - capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/IOS/SearchingTest.cs b/test/integration/IOS/SearchingTest.cs index 221275cb2..185e47a4c 100644 --- a/test/integration/IOS/SearchingTest.cs +++ b/test/integration/IOS/SearchingTest.cs @@ -16,10 +16,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalOption("name", "ios - simple"); - capabilities.AddAdditionalOption("tags", new[] {"sample"}); + capabilities.AddAdditionalAppiumOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalAppiumOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalAppiumOption("name", "ios - simple"); + capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/IOS/TouchActionTest.cs b/test/integration/IOS/TouchActionTest.cs index b180e8b7d..8f22ae2a1 100644 --- a/test/integration/IOS/TouchActionTest.cs +++ b/test/integration/IOS/TouchActionTest.cs @@ -18,10 +18,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalOption("name", "ios - actions"); - capabilities.AddAdditionalOption("tags", new[] {"sample"}); + capabilities.AddAdditionalAppiumOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalAppiumOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalAppiumOption("name", "ios - actions"); + capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/IOS/WebviewTest.cs b/test/integration/IOS/WebviewTest.cs index b2e35ef6d..5792939a0 100644 --- a/test/integration/IOS/WebviewTest.cs +++ b/test/integration/IOS/WebviewTest.cs @@ -18,10 +18,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosWebviewApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalOption("name", "ios - webview"); - capabilities.AddAdditionalOption("tags", new[] {"sample"}); + capabilities.AddAdditionalAppiumOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalAppiumOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalAppiumOption("name", "ios - webview"); + capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); diff --git a/test/integration/Mac/AlertTest.cs b/test/integration/Mac/AlertTest.cs index 5c448e651..b25292868 100644 --- a/test/integration/Mac/AlertTest.cs +++ b/test/integration/Mac/AlertTest.cs @@ -14,7 +14,7 @@ public class FindElementTest public void BeforeAll() { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "Mac"); // Requires until Appium 1.15.1 + capabilities.DeviceName = "Mac"; // Requires until Appium 1.15.1 var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new MacDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; diff --git a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs index bb600dc8d..4076edcc4 100644 --- a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs +++ b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs @@ -20,10 +20,10 @@ public void BeforeAll() var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); if (Env.ServerIsRemote()) { - capabilities.AddAdditionalOption("username", Env.GetEnvVar("SAUCE_USERNAME")); - capabilities.AddAdditionalOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); - capabilities.AddAdditionalOption("name", "ios - actions"); - capabilities.AddAdditionalOption("tags", new[] {"sample"}); + capabilities.AddAdditionalAppiumOption("username", Env.GetEnvVar("SAUCE_USERNAME")); + capabilities.AddAdditionalAppiumOption("accessKey", Env.GetEnvVar("SAUCE_ACCESS_KEY")); + capabilities.AddAdditionalAppiumOption("name", "ios - actions"); + capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index 8f025a611..fde2bf401 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -17,7 +17,7 @@ public void Setup() { var appCapabilities = new AppiumOptions(); appCapabilities.App = "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"; - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + appCapabilities.DeviceName = "WindowsPC"; var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; _driver = new WindowsDriver(serverUri, appCapabilities); diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs index 34681ca75..c86d48492 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs @@ -12,7 +12,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IWebElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] @@ -20,7 +20,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IWebElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] @@ -32,7 +32,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IWebElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -52,7 +52,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IWebElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -71,7 +71,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IWebElement _foundByChainedSearchElement; [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -95,7 +95,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } + private IWebElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true)] @@ -116,7 +116,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -137,7 +137,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true)] diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs index 2ff9571df..1e09c8ed0 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs @@ -13,7 +13,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IWebElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] @@ -23,12 +23,12 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IWebElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -39,7 +39,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IWebElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -65,7 +65,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IWebElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -90,7 +90,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IWebElement _foundByChainedSearchElement; [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -120,7 +120,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } + private IWebElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] @@ -148,7 +148,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -177,7 +177,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs index 84de4c7a9..c36579e5f 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs @@ -8,26 +8,26 @@ namespace Appium.Net.Integration.Tests.PageObjects public class AndroidPageObjectChecksAttributesForNativeAndroidApp { [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IWebElement _testMobileElement; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IWebElement TestMobileElement { set; get; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IWebElement _testMultipleElement; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -40,20 +40,20 @@ public class AndroidPageObjectChecksAttributesForNativeAndroidApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty + private IWebElement TestMultipleFindByElementProperty { set => _testMultipleFindByElementProperty = value; - get => (IMobileElement) _testMultipleFindByElementProperty; + get => (IWebElement) _testMultipleFindByElementProperty; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty + private IList MultipleFindByElementsProperty { set => _testMultipleFindByElementsProperty = value; - get => (IList) _testMultipleFindByElementsProperty; + get => (IList) _testMultipleFindByElementsProperty; } [MobileFindsBySequence(Android = true)] @@ -61,14 +61,14 @@ private IList MultipleFindByElementsProperty Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IWebElement _foundByChainedSearchElement; [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/content\")", Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// private object _foundByChainedSearchElementProperty; @@ -82,10 +82,10 @@ private IList MultipleFindByElementsProperty [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty + private IWebElement TestFoundByChainedSearchElementProperty { set => _foundByChainedSearchElementProperty = value; - get => (IMobileElement) _foundByChainedSearchElementProperty; + get => (IWebElement) _foundByChainedSearchElementProperty; } [MobileFindsBySequence(Android = true)] @@ -94,23 +94,23 @@ private IMobileElement TestFoundByChainedSearchElementProperty [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty + private IList TestFoundByChainedSearchElementsProperty { set => _foundByChainedSearchElementsProperty = value; - get => (IList) _foundByChainedSearchElementsProperty; + get => (IList) _foundByChainedSearchElementsProperty; } [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// private object _matchedToAllLocatorsElementProperty; @@ -123,10 +123,10 @@ private IList TestFoundByChainedSearchElementsProperty //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty + private IWebElement TestMatchedToAllLocatorsElementProperty { set => _matchedToAllLocatorsElementProperty = value; - get => (IMobileElement) _matchedToAllLocatorsElementProperty; + get => (IWebElement) _matchedToAllLocatorsElementProperty; } [MobileFindsByAll(Android = true)] @@ -134,10 +134,10 @@ private IMobileElement TestMatchedToAllLocatorsElementProperty //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty + private IList TestMatchedToAllLocatorsElementsProperty { set => _matchedToAllLocatorsElementsProperty = value; - get => (IList) _matchedToAllLocatorsElementsProperty; + get => (IList) _matchedToAllLocatorsElementsProperty; } ////////////////////////////////////////////////////////////////////////// diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs index 46f79c109..6bc3b850d 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs @@ -94,7 +94,7 @@ public class AndroidPageObjectChecksSelendroidModeOnNativeApp //[FindsByAndroidUIAutomator(ID = "waitingButtonTest", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [MobileFindsByAll(Selendroid = true)] [FindsBySelendroid(LinkText = "Press to throw unhandled exception", Priority = 1)] diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs index da0f48107..ea6071706 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs @@ -22,13 +22,13 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility ///////////////////////////////////////////////////////////////// [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IMobileElement _testMobileElement; + private IWebElement _testMobileElement; [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] private IList _testMobileElements; [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IMobileElement TestMobileElement { set; get; } + private IWebElement TestMobileElement { set; get; } [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] private IList TestMobileElements { set; get; } @@ -36,7 +36,7 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IWebElement _testMultipleElement; [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] @@ -49,7 +49,7 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IWebElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] @@ -59,7 +59,7 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement _foundByChainedSearchElement; + private IWebElement _foundByChainedSearchElement; [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] @@ -72,7 +72,7 @@ [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } + private IWebElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] @@ -84,7 +84,7 @@ [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] @@ -98,7 +98,7 @@ [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs index 4b42202fc..7915ab59a 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs @@ -12,7 +12,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement _testMobileElement; + private IWebElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] @@ -22,7 +22,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IMobileElement TestMobileElement { set; get; } + private IWebElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] @@ -38,7 +38,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement _testMultipleElement; + private IWebElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -64,7 +64,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IWebElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -87,7 +87,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -111,7 +111,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs index 2c170582a..1f4c488a6 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs @@ -10,12 +10,12 @@ public class IosPageObjectChecksAttributesForNativeIosApp ///////////////////////////////////////////////////////////////// [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IMobileElement _testMobileElement; + private IWebElement _testMobileElement; [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] private IList _testMobileElements; [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IMobileElement TestMobileElement { set; get; } + private IWebElement TestMobileElement { set; get; } [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] private IList TestMobileElements { set; get; } @@ -23,7 +23,7 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IMobileElement _testMultipleElement; + private IWebElement _testMultipleElement; [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] @@ -35,7 +35,7 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IMobileElement TestMultipleFindByElementProperty { set; get; } + private IWebElement TestMultipleFindByElementProperty { set; get; } [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] @@ -45,7 +45,7 @@ public class IosPageObjectChecksAttributesForNativeIosApp [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IMobileElement _matchedToAllLocatorsElement; + private IWebElement _matchedToAllLocatorsElement; [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps @@ -58,7 +58,7 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] diff --git a/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs b/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs index edf2a0b80..2b23ec1d1 100644 --- a/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs +++ b/test/integration/ServerTests/AppiumLocalServerLaunchingTest.cs @@ -188,11 +188,11 @@ public void CheckAbilityToStartServiceUsingFlags() public void CheckAbilityToStartServiceUsingCapabilities() { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalOption(MobileCapabilityType.PlatformName, "Android"); - capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); - capabilities.AddAdditionalOption(MobileCapabilityType.NewCommandTimeout, 60); - capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); - capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.PlatformName, "Android"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.NewCommandTimeout, 60); + capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); + capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); var args = new OptionCollector().AddCapabilities(capabilities); AppiumLocalService service = null; @@ -212,11 +212,11 @@ public void CheckAbilityToStartServiceUsingCapabilities() public void CheckAbilityToStartServiceUsingCapabilitiesAndFlags() { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalOption(MobileCapabilityType.PlatformName, "Android"); - capabilities.AddAdditionalOption(MobileCapabilityType.FullReset, true); - capabilities.AddAdditionalOption(MobileCapabilityType.NewCommandTimeout, 60); - capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); - capabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.PlatformName, "Android"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.NewCommandTimeout, 60); + capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); + capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); var args = new OptionCollector().AddCapabilities(capabilities) .AddArguments(GeneralOptionList.CallbackAddress(_testIp)) diff --git a/test/integration/ServerTests/StartingAppLocallyTest.cs b/test/integration/ServerTests/StartingAppLocallyTest.cs index 096b0bc34..5246b9bdc 100644 --- a/test/integration/ServerTests/StartingAppLocallyTest.cs +++ b/test/integration/ServerTests/StartingAppLocallyTest.cs @@ -66,8 +66,8 @@ public void StartingAndroidAppWithCapabilitiesOnTheServerSideTest() : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var clientCapabilities = new AppiumOptions(); - clientCapabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); - clientCapabilities.AddAdditionalOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); + clientCapabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppPackage, "io.appium.android.apis"); + clientCapabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppActivity, ".view.WebView1"); var argCollector = new OptionCollector().AddCapabilities(serverCapabilities); var builder = new AppiumServiceBuilder().WithArguments(argCollector); @@ -133,8 +133,8 @@ public void CheckThatServiseIsNotRunWhenTheCreatingOfANewSessionIsFailed() ? //it will be a cause of error Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.AddAdditionalOption(MobileCapabilityType.DeviceName, "iPhone Simulator"); - capabilities.AddAdditionalOption(MobileCapabilityType.PlatformName, MobilePlatform.IOS); + capabilities.DeviceName = "iPhone Simulator"; + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.PlatformName, MobilePlatform.IOS); var builder = new AppiumServiceBuilder(); var service = builder.Build(); diff --git a/test/integration/Windows/MultiSelectControlTest.cs b/test/integration/Windows/MultiSelectControlTest.cs index e34f3553c..d160d8d1d 100644 --- a/test/integration/Windows/MultiSelectControlTest.cs +++ b/test/integration/Windows/MultiSelectControlTest.cs @@ -48,7 +48,7 @@ public void Setup() // Create a session for Desktop var desktopCapabilities = new AppiumOptions(); desktopCapabilities.App = "Root"; - desktopCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + desktopCapabilities.DeviceName = "WindowsPC"; DesktopSession = new WindowsDriver(serverUri, desktopCapabilities); diff --git a/test/integration/Windows/PentTest.cs b/test/integration/Windows/PentTest.cs index 919e0ba85..d1d2c81e6 100644 --- a/test/integration/Windows/PentTest.cs +++ b/test/integration/Windows/PentTest.cs @@ -236,8 +236,8 @@ public void CreateNewStickyNote() var newStickyNoteWindowHandle = openedStickyNotes[0].GetAttribute("NativeWindowHandle"); newStickyNoteWindowHandle = (int.Parse(newStickyNoteWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + appCapabilities.AddAdditionalAppiumOption("appTopLevelWindow", newStickyNoteWindowHandle); + appCapabilities.DeviceName = "WindowsPC"; newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(newStickyNoteSession); diff --git a/test/integration/Windows/StickyNotesTest.cs b/test/integration/Windows/StickyNotesTest.cs index 42846e4a3..63cb06687 100644 --- a/test/integration/Windows/StickyNotesTest.cs +++ b/test/integration/Windows/StickyNotesTest.cs @@ -42,7 +42,7 @@ public void BeforeAll() // Note: All sticky note windows are parented to Modern_Sticky_Top_Window pane AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.App = StickyNotesAppId; - appCapabilities.AddAdditionalOption("deviceName", "WindowsPC"); + appCapabilities.DeviceName = "WindowsPC"; session = new WindowsDriver(serverUri, appCapabilities); } catch @@ -59,7 +59,7 @@ public void BeforeAll() StickyNotesTopLevelWindowHandle = (int.Parse(StickyNotesTopLevelWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); + appCapabilities.AddAdditionalAppiumOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); session = new WindowsDriver(serverUri, appCapabilities); } Assert.IsNotNull(session); @@ -88,7 +88,7 @@ public void AfterAll() newStickyNoteWindowHandle = (int.Parse(newStickyNoteWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalOption("appTopLevelWindow", newStickyNoteWindowHandle); + appCapabilities.AddAdditionalAppiumOption("appTopLevelWindow", newStickyNoteWindowHandle); var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); stickyNoteSession.Close(); } diff --git a/test/integration/helpers/Caps.cs b/test/integration/helpers/Caps.cs index 3df4051f3..181102f6d 100644 --- a/test/integration/helpers/Caps.cs +++ b/test/integration/helpers/Caps.cs @@ -12,7 +12,7 @@ public static AppiumOptions GetIosCaps(string app) capabilities.DeviceName = "iPhone X"; capabilities.PlatformVersion = "12.0"; capabilities.App = app; - capabilities.AddAdditionalOption(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); + capabilities.AddAdditionalAppiumOption(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); return capabilities; } From 85f66a5e756fd7d8e9cb6daf9c024d94a9ebd30b Mon Sep 17 00:00:00 2001 From: Troy W Date: Sun, 10 Oct 2021 13:39:00 -0500 Subject: [PATCH 15/21] Work with web element factory --- src/Appium.Net/Appium.Net.csproj | 4 +- src/Appium.Net/Appium.Net.xml | 18 +- .../Appium/Android/AndroidDriver.cs | 35 +- .../Appium/Android/AndroidElement.cs | 72 +++ .../Appium/Android/AndroidElementFactory.cs | 16 + .../Appium/AppiumCommandExecutionHelper.cs | 4 +- src/Appium.Net/Appium/AppiumDriver.cs | 158 +++---- src/Appium.Net/Appium/AppiumOptions.cs | 10 +- src/Appium.Net/Appium/AppiumWebElement.cs | 419 ++++++++++++++++++ .../Interfaces/IFindByAndroidDataMatcher.cs | 4 +- .../Interfaces/IFindByAndroidUIAutomator.cs | 4 +- .../Interfaces/IFindByAndroidViewMatcher.cs | 4 +- .../Appium/Interfaces/IMobileElement.cs | 32 ++ src/Appium.Net/Appium/Mac/MacDriver.cs | 6 +- src/Appium.Net/Appium/Mac/MacElement.cs | 31 ++ .../Appium/Mac/MacElementFactory.cs | 15 + src/Appium.Net/Appium/MobileBy.cs | 42 +- src/Appium.Net/Appium/MobileSelectors.cs | 96 ---- .../Appium/MultiAction/TouchAction.cs | 6 +- .../AppiumPageObjectMemberDecorator.cs | 10 +- .../Appium/PageObjects/ByFactory.cs | 18 +- .../Appium/PageObjects/GenericsUtility.cs | 9 +- .../PageObjects/WebDriverUnpackUtility.cs | 2 +- src/Appium.Net/Appium/Tizen/TizenDriver.cs | 10 +- src/Appium.Net/Appium/Tizen/TizenElement.cs | 47 ++ .../Appium/Tizen/TizenElementFactory.cs | 16 + .../Appium/Windows/WindowsDriver.cs | 31 +- .../Appium/Windows/WindowsElement.cs | 39 ++ .../Appium/Windows/WindowsElementFactory.cs | 16 + src/Appium.Net/Appium/iOS/IOSDriver.cs | 28 +- src/Appium.Net/Appium/iOS/IOSElement.cs | 46 ++ .../Appium/iOS/IOSElementFactory.cs | 16 + test/integration/Android/ActivityTest.cs | 5 +- test/integration/Android/AppStringsTest.cs | 5 +- test/integration/Android/ClipboardTest.cs | 5 +- test/integration/Android/ConnectionTest.cs | 13 +- .../integration/Android/CurrentPackageTest.cs | 5 +- test/integration/Android/Device/AppTests.cs | 5 +- .../Android/Device/AuthenticationTest.cs | 5 +- .../Android/Device/HideKeyboardTestCase.cs | 5 +- .../Android/Device/KeyPressTest.cs | 8 +- .../Android/Device/NetworkTests.cs | 19 +- .../Android/Device/PerformanceDataTests.cs | 9 +- .../integration/Android/Device/SystemTests.cs | 9 +- test/integration/Android/ElementTest.cs | 13 +- .../Android/ElementTestEspresso.cs | 4 +- .../integration/Android/EmulatorDeviceTime.cs | 4 +- .../Android/FileInteractionTest.cs | 5 +- test/integration/Android/IntentAndroidTest.cs | 5 +- test/integration/Android/LockDeviceTest.cs | 4 +- test/integration/Android/OrientationTest.cs | 2 +- .../Android/ScreenRecordingTest.cs | 4 +- test/integration/Android/SearchingTest.cs | 4 +- .../Android/Session/GeolocationTests.cs | 4 +- test/integration/Android/Session/LogTests.cs | 4 +- test/integration/Android/SessionDetailTest.cs | 5 +- test/integration/Android/SessionTest.cs | 5 +- test/integration/Android/SettingTest.cs | 5 +- test/integration/Android/TouchActionTest.cs | 14 +- test/integration/Android/WebviewTest.cs | 2 +- .../Appium.Net.Integration.Tests.csproj | 2 + test/integration/IOS/AlertTest.cs | 4 +- test/integration/IOS/AppStringsTest.cs | 5 +- test/integration/IOS/ClipboardTest.cs | 5 +- test/integration/IOS/Device/AppTests.cs | 5 +- test/integration/IOS/ElementTest.cs | 6 +- test/integration/IOS/LockDeviceTest.cs | 5 +- test/integration/IOS/OrientationTest.cs | 2 +- test/integration/IOS/ScreenRecordingTest.cs | 5 +- .../integration/IOS/ScrollingSearchingTest.cs | 4 +- .../IOS/SearchingClassChainTest.cs | 4 +- test/integration/IOS/SearchingTest.cs | 4 +- test/integration/IOS/Session/LogTests.cs | 2 +- test/integration/IOS/SettingTest.cs | 7 +- test/integration/IOS/TouchActionTest.cs | 5 +- test/integration/IOS/WebviewTest.cs | 4 +- test/integration/Mac/AlertTest.cs | 6 +- .../Android/NativeAppAttributesTest.cs | 5 +- .../SeleniumAttributesCompatibilityTest.cs | 5 +- .../Android/TestThatChecksAttributeMix1.cs | 5 +- .../Android/TestThatChecksAttributeMix2.cs | 5 +- .../PageObjectTests/Android/WebViewTest.cs | 5 +- .../DesktopBrowserCompatibilityTest.cs | 1 + .../IOS/NativeAppAttributesTest.cs | 5 +- .../IOS/TestThatChecksAttributeMix.cs | 5 +- .../NoSuchElementTestOnAndroid.cs | 5 +- .../Other/AndroidJSWebViewTest.cs | 5 +- .../Other/AndroidTouchActionTest.cs | 5 +- .../Windows/WindowsAlarmAppTest.cs | 6 +- ...ageObjectChecksAttributeMixOnNativeApp1.cs | 34 +- ...ageObjectChecksAttributeMixOnNativeApp2.cs | 34 +- ...jectChecksAttributesForNativeAndroidApp.cs | 46 +- ...geObjectChecksSelendroidModeOnNativeApp.cs | 2 +- ...bjectChecksSeleniumFindsByCompatibility.cs | 33 +- ...PageObjectChecksAttributeMixOnNativeApp.cs | 26 +- ...geObjectChecksAttributesForNativeIOSApp.cs | 26 +- .../PageObjects/WindowsAlarmApp.cs | 31 +- .../Properties/Resources.Designer.cs | 5 +- .../ServerTests/StartingAppLocallyTest.cs | 26 +- test/integration/Windows/ClickElementTest.cs | 16 +- .../Windows/ImagesComparisonTest.cs | 7 +- .../Windows/MultiSelectControlTest.cs | 32 +- test/integration/Windows/PentTest.cs | 17 +- test/integration/Windows/StickyNotesTest.cs | 15 +- test/integration/helpers/Caps.cs | 20 +- 105 files changed, 1350 insertions(+), 593 deletions(-) create mode 100644 src/Appium.Net/Appium/Android/AndroidElement.cs create mode 100644 src/Appium.Net/Appium/Android/AndroidElementFactory.cs create mode 100644 src/Appium.Net/Appium/AppiumWebElement.cs create mode 100644 src/Appium.Net/Appium/Interfaces/IMobileElement.cs create mode 100644 src/Appium.Net/Appium/Mac/MacElement.cs create mode 100644 src/Appium.Net/Appium/Mac/MacElementFactory.cs delete mode 100644 src/Appium.Net/Appium/MobileSelectors.cs create mode 100644 src/Appium.Net/Appium/Tizen/TizenElement.cs create mode 100644 src/Appium.Net/Appium/Tizen/TizenElementFactory.cs create mode 100644 src/Appium.Net/Appium/Windows/WindowsElement.cs create mode 100644 src/Appium.Net/Appium/Windows/WindowsElementFactory.cs create mode 100644 src/Appium.Net/Appium/iOS/IOSElement.cs create mode 100644 src/Appium.Net/Appium/iOS/IOSElementFactory.cs diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index 642403ce6..d5b0364fb 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -49,8 +49,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/Appium.Net/Appium.Net.xml b/src/Appium.Net/Appium.Net.xml index a42393a2b..c56b47ad7 100644 --- a/src/Appium.Net/Appium.Net.xml +++ b/src/Appium.Net/Appium.Net.xml @@ -159,7 +159,7 @@ The image content of the clipboard as base64-encoded string or null if there is no image on the clipboard - + Initializes a new instance of the AndroidElement class. @@ -3348,7 +3348,7 @@ - + Initializes a new instance of the AppiumWebElement class. @@ -4265,7 +4265,7 @@ IWebElement object so that you can interact that object - IWebDriver driver = new RemoteWebDriver(new DriverOptions()); + IWebDriver driver = new WebDriver(new DriverOptions()); IWebElement elem = driver.FindElementByAndroidDataMatcher('elements()')) @@ -4278,7 +4278,7 @@ ReadOnlyCollection of IWebElement object so that you can interact with those objects - IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + IWebDriver driver = new WebDriver(new FirefoxOptions()); ReadOnlyCollection]]> elem = driver.FindElementsByAndroidDataMatcher(elements()) @@ -4291,7 +4291,7 @@ IWebElement object so that you can interact that object - IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + IWebDriver driver = new WebDriver(new FirefoxOptions()); IWebElement elem = driver.FindElementByAndroidUIAutomator('elements()')) @@ -4311,7 +4311,7 @@ ReadOnlyCollection of IWebElement object so that you can interact with those objects - IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + IWebDriver driver = new WebDriver(new FirefoxOptions()); ReadOnlyCollection]]> elem = driver.FindElementsByAndroidUIAutomator(elements()) @@ -5035,7 +5035,7 @@ The image content of the clipboard as an Image object or null if there is no image on the clipboard - + Initializes a new instance of the IOSElement class. @@ -5182,7 +5182,7 @@ An object containing the Appium options. The maximum amount of time to wait for each command. - + Initializes a new instance of the MacElement class. @@ -6230,7 +6230,7 @@ a Tizen UIAutomation selector ReadOnlyCollection of IWebElement objects so that you can interact with those objects - + Initializes a new instance of the TizenElement class. diff --git a/src/Appium.Net/Appium/Android/AndroidDriver.cs b/src/Appium.Net/Appium/Android/AndroidDriver.cs index 5f1c0dd3e..cfd64b5c7 100644 --- a/src/Appium.Net/Appium/Android/AndroidDriver.cs +++ b/src/Appium.Net/Appium/Android/AndroidDriver.cs @@ -25,11 +25,11 @@ namespace OpenQA.Selenium.Appium.Android { - public class AndroidDriver : AppiumDriver, IFindByAndroidUIAutomator, IFindByAndroidDataMatcher, + public class AndroidDriver : AppiumDriver, IFindByAndroidUIAutomator, IFindByAndroidDataMatcher, IStartsActivity, IHasNetworkConnection, INetworkActions, IHasClipboard, IHasPerformanceData, ISendsKeyEvents, - IPushesFiles, IHasSettings + IPushesFiles, IHasSettings where W : IWebElement { private static readonly string Platform = MobilePlatform.Android; @@ -130,37 +130,37 @@ public AndroidDriver(AppiumLocalService service, DriverOptions driverOptions, #region IFindByAndroidUIAutomator Members - public IWebElement FindElementByAndroidUIAutomator(string selector) => + public W FindElementByAndroidUIAutomator(string selector) => FindElement(MobileSelector.AndroidUIAutomator, selector); - public IWebElement FindElementByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => + public W FindElementByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); - public IReadOnlyCollection FindElementsByAndroidUIAutomator(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector)); + public IReadOnlyCollection FindElementsByAndroidUIAutomator(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector)); - public IReadOnlyCollection FindElementsByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector.Build())); + public IReadOnlyCollection FindElementsByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidUIAutomator, selector.Build())); #endregion IFindByAndroidUIAutomator Members #region IFindByAndroidDataMatcher Members - public IWebElement FindElementByAndroidDataMatcher(string selector) => + public W FindElementByAndroidDataMatcher(string selector) => FindElement(MobileSelector.AndroidDataMatcher, selector); - public IReadOnlyCollection FindElementsByAndroidDataMatcher(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidDataMatcher, selector)); + public IReadOnlyCollection FindElementsByAndroidDataMatcher(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidDataMatcher, selector)); #endregion IFindByAndroidDataMatcher Members #region IFindByAndroidViewMatcher Members - public IWebElement FindElementByAndroidViewMatcher(string selector) => + public W FindElementByAndroidViewMatcher(string selector) => FindElement(MobileSelector.AndroidViewMatcher, selector); - public IReadOnlyCollection FindElementsByAndroidViewMatcher(string selector) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidViewMatcher, selector)); + public IReadOnlyCollection FindElementsByAndroidViewMatcher(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.AndroidViewMatcher, selector)); #endregion IFindByAndroidViewMatcher Members @@ -195,12 +195,11 @@ public ConnectionType ConnectionType public void PressKeyCode(int keyCode, int metastate = -1) => AppiumCommandExecutionHelper.PressKeyCode(this, keyCode, metastate); - public void PressKeyCode(KeyEvent keyEvent) => - AppiumCommandExecutionHelper.PressKeyCode(this, keyEvent); - public void LongPressKeyCode(int keyCode, int metastate = -1) => AppiumCommandExecutionHelper.LongPressKeyCode(this, keyCode, metastate); + public void PressKeyCode(KeyEvent keyEvent) => + AppiumCommandExecutionHelper.PressKeyCode(this, keyEvent); public void LongPressKeyCode(KeyEvent keyEvent) => AppiumCommandExecutionHelper.LongPressKeyCode(this, keyEvent); @@ -304,6 +303,8 @@ public IList GetPerformanceDataTypes() => public string EndTestCoverage(string intent, string path) => AndroidCommandExecutionHelper.EndTestCoverage(this, intent, path); + protected override WebElementFactory CreateElementFactory() => new AndroidElementFactory(this); + public void SetSetting(string setting, object value) => AndroidCommandExecutionHelper.SetSetting(this, setting, value); diff --git a/src/Appium.Net/Appium/Android/AndroidElement.cs b/src/Appium.Net/Appium/Android/AndroidElement.cs new file mode 100644 index 000000000..20fea24db --- /dev/null +++ b/src/Appium.Net/Appium/Android/AndroidElement.cs @@ -0,0 +1,72 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using OpenQA.Selenium.Appium.Enums; +using OpenQA.Selenium.Appium.Interfaces; +using OpenQA.Selenium.Remote; +using System.Collections.Generic; + +namespace OpenQA.Selenium.Appium.Android +{ + public class AndroidElement : AppiumWebElement, IFindByAndroidUIAutomator, IFindByAndroidDataMatcher + { + /// + /// Initializes a new instance of the AndroidElement class. + /// + /// Driver in use. + /// ID of the element. + public AndroidElement(WebDriver parent, string id) + : base(parent, id) + { + } + + #region IFindByAndroidUIAutomator Members + + public AppiumWebElement FindElementByAndroidUIAutomator(string selector) => + FindElement(MobileSelector.AndroidUIAutomator, selector); + + public AppiumWebElement FindElementByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => + FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); + + public IReadOnlyCollection FindElementsByAndroidUIAutomator(string selector) => + FindElements(MobileSelector.AndroidUIAutomator, selector); + + public IReadOnlyCollection FindElementsByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) => + FindElements(MobileSelector.AndroidUIAutomator, selector.Build()); + + #endregion IFindByAndroidUIAutomator Members + + #region IFindByAndroidDataMatcher Members + + public AppiumWebElement FindElementByAndroidDataMatcher(string selector) => + FindElement(MobileSelector.AndroidDataMatcher, selector); + + public IReadOnlyCollection FindElementsByAndroidDataMatcher(string selector) => + FindElements(MobileSelector.AndroidDataMatcher, selector); + + #endregion IFindByAndroidDataMatcher Members + + #region IFindByAndroidViewMatcher Members + + public AppiumWebElement FindElementByAndroidViewMatcher(string selector) => + FindElement(MobileSelector.AndroidViewMatcher, selector); + + public IReadOnlyCollection FindElementsByAndroidViewMatcher(string selector) => + FindElements(MobileSelector.AndroidViewMatcher, selector); + + #endregion IFindByAndroidViewMatcher Members + + public void ReplaceValue(string value) => AndroidCommandExecutionHelper.ReplaceValue(this, Id, value); + } +} \ No newline at end of file diff --git a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs new file mode 100644 index 000000000..ef7f4f9b3 --- /dev/null +++ b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs @@ -0,0 +1,16 @@ +using OpenQA.Selenium.Remote; + +namespace OpenQA.Selenium.Appium.Android +{ + public class AndroidElementFactory : CachedElementFactory + { + public AndroidElementFactory(WebDriver parentDriver) : base(parentDriver) + { + } + + protected override AndroidElement CreateCachedElement(WebDriver parentDriver, string elementId) + { + return new AndroidElement(parentDriver, elementId); + } + } +} diff --git a/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs b/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs index 04272d0b2..a3a56730f 100644 --- a/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs +++ b/src/Appium.Net/Appium/AppiumCommandExecutionHelper.cs @@ -94,7 +94,7 @@ public static void SetClipboard(IExecuteMethod executeMethod, ClipboardContentTy { case ClipboardContentType.Image: case ClipboardContentType.Url: - if (executeMethod.GetType() == typeof(AndroidDriver) || executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) + if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver<>)) { throw new NotImplementedException( $"Android only supports contentType: {nameof(ClipboardContentType.PlainText)}"); @@ -118,7 +118,7 @@ public static string GetClipboard(IExecuteMethod executeMethod, ClipboardContent { case ClipboardContentType.Image: case ClipboardContentType.Url: - if (executeMethod.GetType() == typeof(AndroidDriver) || executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver)) + if (executeMethod.GetType().GetGenericTypeDefinition() == typeof(AndroidDriver<>)) { throw new NotImplementedException( $"Android only supports contentType: {nameof(ClipboardContentType.PlainText)}"); diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index 8b35ebc4b..b4ad24497 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -16,7 +16,9 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; +using OpenQA.Selenium.Internal; using OpenQA.Selenium.Interactions; +using OpenQA.Selenium.Remote; using System; using System.Collections; using System.Collections.Generic; @@ -25,20 +27,19 @@ using System.Linq; using System.Text; using OpenQA.Selenium.Appium.ImageComparison; -using OpenQA.Selenium.Internal; namespace OpenQA.Selenium.Appium { - public abstract class AppiumDriver : WebDriver, IFindsByImage, - IFindsByClassName, IFindsById, IFindsByName, IFindsByTagName, + public abstract class AppiumDriver : WebDriver, IFindsById, IFindsByClassName, IFindsByName, + IFindsByTagName, IFindsByImage, IExecuteMethod, IHasSessionDetails, IHasLocation, - IFindByAccessibilityId, + IFindByAccessibilityId, IHidesKeyboard, IInteractsWithFiles, - IInteractsWithApps, IPerformsTouchActions, IRotatable, IContextAware, IGenericSearchContext, - IGenericFindsByClassName, - IGenericFindsById, IGenericFindsByCssSelector, IGenericFindsByLinkText, IGenericFindsByName, - IGenericFindsByPartialLinkText, IGenericFindsByTagName, IGenericFindsByXPath + IInteractsWithApps, IPerformsTouchActions, IRotatable, IContextAware, IGenericSearchContext, + IGenericFindsByClassName, + IGenericFindsById, IGenericFindsByCssSelector, IGenericFindsByLinkText, IGenericFindsByName, + IGenericFindsByPartialLinkText, IGenericFindsByTagName, IGenericFindsByXPath where W : IWebElement { private const string NativeApp = "NATIVE_APP"; @@ -47,7 +48,7 @@ public abstract class AppiumDriver : WebDriver, IFindsByImage, public AppiumDriver(ICommandExecutor commandExecutor, ICapabilities appiumOptions) : base(commandExecutor, appiumOptions) { - AppiumCommand.Merge(commandExecutor); + ElementFactory = CreateElementFactory(); } public AppiumDriver(ICapabilities appiumOptions) @@ -92,7 +93,7 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim #endregion Constructors - #region Overrides to fix "css selector" issue + #region Overrides to fix "css selector" issue IWebElement IFindsByClassName.FindElementByClassName(string className) => base.FindElement(MobileSelector.ClassName, className); @@ -122,82 +123,89 @@ ReadOnlyCollection IFindsByTagName.FindElementsByTagName(string tag #region Generic FindMethods - public new IWebElement FindElement(By by) => - base.FindElement(by); - - public new ReadOnlyCollection FindElements(By by) => - ConvertToExtendedWebElementCollection(base.FindElements(by)); + public new W FindElement(By by) => + (W)base.FindElement(by); - public new IWebElement FindElement(string by, string value) => base.FindElement(by, value); + public new ReadOnlyCollection FindElements(By by) => + ConvertToExtendedWebElementCollection(base.FindElements(by)); - public new IReadOnlyCollection FindElements(string selector, string value) => - ConvertToExtendedWebElementCollection(base.FindElements(selector, value)); + public new W FindElement(string by, string value) => (W)base.FindElement(by, value); - public IWebElement FindElementByClassName(string className) => - base.FindElement(MobileSelector.ClassName, className); + public new IReadOnlyCollection FindElements(string selector, string value) => + ConvertToExtendedWebElementCollection(base.FindElements(selector, value)); - public ReadOnlyCollection FindElementsByClassName(string className) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); + public W FindElementByClassName(string className) => + (W)base.FindElement(MobileSelector.ClassName, className); - public IWebElement FindElementById(string id) => - base.FindElement(MobileSelector.Id, id); + public ReadOnlyCollection FindElementsByClassName(string className) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); - public ReadOnlyCollection FindElementsById(string id) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); + public W FindElementById(string id) => + (W)base.FindElement(MobileSelector.Id, id); - public IWebElement FindElementByCssSelector(string cssSelector) => - base.FindElement(By.CssSelector(cssSelector)); + public ReadOnlyCollection FindElementsById(string id) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); - public ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => - ConvertToExtendedWebElementCollection(base.FindElements(By.CssSelector(cssSelector))); + public W FindElementByCssSelector(string cssSelector) => + (W)base.FindElement("css selector", cssSelector); - public IWebElement FindElementByLinkText(string linkText) => - base.FindElement(By.LinkText(linkText)); + public ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => + ConvertToExtendedWebElementCollection(base.FindElements("css selector", cssSelector)); - public ReadOnlyCollection FindElementsByLinkText(string linkText) => - ConvertToExtendedWebElementCollection(base.FindElements(By.LinkText(linkText))); + public W FindElementByLinkText(string linkText) => + (W)base.FindElement("link text", linkText); - public IWebElement FindElementByName(string name) => - base.FindElement(MobileSelector.Name, name); + public ReadOnlyCollection FindElementsByLinkText(string linkText) => + ConvertToExtendedWebElementCollection(base.FindElements("link text", linkText)); - public ReadOnlyCollection FindElementsByName(string name) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); + public W FindElementByName(string name) => + (W)base.FindElement(MobileSelector.Name, name); - public IWebElement FindElementByPartialLinkText(string partialLinkText) => - base.FindElement(By.PartialLinkText(partialLinkText)); + public ReadOnlyCollection FindElementsByName(string name) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); - public ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => - ConvertToExtendedWebElementCollection(base.FindElements(By.PartialLinkText(partialLinkText))); + public W FindElementByPartialLinkText(string partialLinkText) => + (W)base.FindElement("partial link text", partialLinkText); - public IWebElement FindElementByTagName(string tagName) => - base.FindElement(MobileSelector.TagName, tagName); + public ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => + ConvertToExtendedWebElementCollection(base.FindElements("partial link text", partialLinkText)); - public ReadOnlyCollection FindElementsByTagName(string tagName) => - ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.TagName, tagName)); + public W FindElementByTagName(string tagName) => + (W)base.FindElement(MobileSelector.TagName, tagName); - public IWebElement FindElementByXPath(string xpath) => - base.FindElement(By.XPath(xpath)); + public ReadOnlyCollection FindElementsByTagName(string tagName) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.TagName, tagName)); - public ReadOnlyCollection FindElementsByXPath(string xpath) => - ConvertToExtendedWebElementCollection(base.FindElements(By.XPath(xpath))); + public W FindElementByXPath(string xpath) => + (W)base.FindElement("xpath", xpath); - #endregion + public ReadOnlyCollection FindElementsByXPath(string xpath) => + ConvertToExtendedWebElementCollection(base.FindElements("xpath", xpath)); #region IFindByAccessibilityId Members - public IWebElement FindElementByAccessibilityId(string selector) => FindElement(MobileSelector.Accessibility, selector); + public W FindElementByAccessibilityId(string selector) => FindElement(MobileSelector.Accessibility, selector); - public IReadOnlyCollection FindElementsByAccessibilityId(string selector) => + public IReadOnlyCollection FindElementsByAccessibilityId(string selector) => FindElements(MobileSelector.Accessibility, selector); #endregion IFindByAccessibilityId Members #region IFindsByImage Members - public IWebElement FindElementByImage(string base64Template) => FindElement(MobileSelector.Image, base64Template); + public W FindElementByImage(string base64Template) => FindElement(MobileSelector.Image, base64Template); + + public IReadOnlyCollection FindElementsByImage(string base64Template) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.Image, base64Template)); - public IReadOnlyCollection FindElementsByImage(string base64Template) => - ConvertToExtendedWebElementCollection(FindElements(MobileSelector.Image, base64Template)); + #endregion + + #endregion + + #region Public Methods + + protected override Response Execute(string driverCommandToExecute, Dictionary parameters) => + base.Execute(driverCommandToExecute, parameters); Response IExecuteMethod.Execute(string commandName, Dictionary parameters) => base.Execute(commandName, parameters); @@ -239,7 +247,7 @@ public bool TerminateApp(string appId) => public bool TerminateApp(string appId, TimeSpan timeout) => Convert.ToBoolean(Execute(AppiumDriverCommand.TerminateApp, - AppiumCommandExecutionHelper.PrepareArguments(new string[] {"appId", "options"}, + AppiumCommandExecutionHelper.PrepareArguments(new string[] { "appId", "options" }, new object[] {appId, new Dictionary() {{"timeout", (long) timeout.TotalMilliseconds}}})) .Value.ToString()); @@ -265,11 +273,11 @@ public void PushFile(string pathOnDevice, byte[] base64Data) => public void PushFile(string pathOnDevice, FileInfo file) => AppiumCommandExecutionHelper.PushFile(this, pathOnDevice, file); - public void LaunchApp() => ((IExecuteMethod) this).Execute(AppiumDriverCommand.LaunchApp); + public void LaunchApp() => ((IExecuteMethod)this).Execute(AppiumDriverCommand.LaunchApp); - public void CloseApp() => ((IExecuteMethod) this).Execute(AppiumDriverCommand.CloseApp); + public void CloseApp() => ((IExecuteMethod)this).Execute(AppiumDriverCommand.CloseApp); - public void ResetApp() => ((IExecuteMethod) this).Execute(AppiumDriverCommand.ResetApp); + public void ResetApp() => ((IExecuteMethod)this).Execute(AppiumDriverCommand.ResetApp); public void FingerPrint(int fingerprintId) => AppiumCommandExecutionHelper.FingerPrint(this, fingerprintId); @@ -289,7 +297,7 @@ public void BackgroundApp(TimeSpan timeSpan) => AppiumCommandExecutionHelper.PrepareArgument("seconds", timeSpan.TotalSeconds)); public AppState GetAppState(string appId) => - (AppState) Convert.ToInt32(Execute(AppiumDriverCommand.GetAppState, + (AppState)Convert.ToInt32(Execute(AppiumDriverCommand.GetAppState, AppiumCommandExecutionHelper.PrepareArgument("appId", appId)).Value.ToString()); /// @@ -317,7 +325,7 @@ public Dictionary GetAppStringDictionary(string language = null, parameters = null; } - return (Dictionary) Execute(AppiumDriverCommand.GetAppStrings, parameters).Value; + return (Dictionary)Execute(AppiumDriverCommand.GetAppStrings, parameters).Value; } /// @@ -355,7 +363,7 @@ public Location Location { get { - var commandResponse = ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetLocation); + var commandResponse = ((IExecuteMethod)this).Execute(AppiumDriverCommand.GetLocation); var locationValues = commandResponse.Value as Dictionary; return new Location { @@ -379,7 +387,7 @@ public virtual string Context { get { - var commandResponse = ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetContext); + var commandResponse = ((IExecuteMethod)this).Execute(AppiumDriverCommand.GetContext); return commandResponse.Value as string; } set @@ -393,7 +401,7 @@ public virtual ReadOnlyCollection Contexts { get { - var commandResponse = ((IExecuteMethod) this).Execute(AppiumDriverCommand.Contexts); + var commandResponse = ((IExecuteMethod)this).Execute(AppiumDriverCommand.Contexts); var contexts = new List(); var objects = commandResponse.Value as object[]; @@ -414,7 +422,7 @@ public ScreenOrientation Orientation { get { - var commandResponse = ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetOrientation); + var commandResponse = ((IExecuteMethod)this).Execute(AppiumDriverCommand.GetOrientation); return (commandResponse.Value as string).ConvertToScreenOrientation(); } set @@ -436,7 +444,7 @@ public ScreenOrientation Orientation public List GetIMEAvailableEngines() { var retVal = new List(); - var commandResponse = ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetAvailableEngines); + var commandResponse = ((IExecuteMethod)this).Execute(AppiumDriverCommand.GetAvailableEngines); var objectArr = commandResponse.Value as object[]; if (null != objectArr) { @@ -451,14 +459,14 @@ public List GetIMEAvailableEngines() /// /// Active IME Engine public string GetIMEActiveEngine() => - ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetActiveEngine).Value as string; + ((IExecuteMethod)this).Execute(AppiumDriverCommand.GetActiveEngine).Value as string; /// /// Is the IME active on the device (NOTE: on Android, this is always true) /// /// true if IME is active, false otherwise public bool IsIMEActive() => - (bool) (((IExecuteMethod) this).Execute(AppiumDriverCommand.IsIMEActive).Value); + (bool)(((IExecuteMethod)this).Execute(AppiumDriverCommand.IsIMEActive).Value); /// /// Activate the given IME on Device @@ -472,7 +480,7 @@ public void ActivateIMEEngine(string imeEngine) => /// Deactivate the currently Active IME Engine on device /// public void DeactiveIMEEngine() => - ((IExecuteMethod) this).Execute(AppiumDriverCommand.DeactivateEngine); + ((IExecuteMethod)this).Execute(AppiumDriverCommand.DeactivateEngine); #endregion Input Method (IME) @@ -524,7 +532,7 @@ public void PerformTouchAction(ITouchAction touchAction) /// Gets device date and time for both iOS(Supports only real device) and Android devices /// /// A string which consists of date and time - public string DeviceTime => ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetDeviceTime).Value.ToString(); + public string DeviceTime => ((IExecuteMethod)this).Execute(AppiumDriverCommand.GetDeviceTime).Value.ToString(); #endregion Device Time @@ -535,7 +543,7 @@ public IDictionary SessionDetails get { var session = - (IDictionary) ((IExecuteMethod) this).Execute(AppiumDriverCommand.GetSession) + (IDictionary)((IExecuteMethod)this).Execute(AppiumDriverCommand.GetSession) .Value; return new ReadOnlyDictionary(session.Where(entry => { @@ -566,7 +574,7 @@ public object GetSessionDetail(string detail) #region Recording Screen public string StartRecordingScreen() => - ((IExecuteMethod) this).Execute(AppiumDriverCommand.StartRecordingScreen).Value.ToString(); + ((IExecuteMethod)this).Execute(AppiumDriverCommand.StartRecordingScreen).Value.ToString(); public string StartRecordingScreen(IScreenRecordingOptions options) { @@ -575,7 +583,7 @@ public string StartRecordingScreen(IScreenRecordingOptions options) } public string StopRecordingScreen() => - ((IExecuteMethod) this).Execute(AppiumDriverCommand.StopRecordingScreen).Value.ToString(); + ((IExecuteMethod)this).Execute(AppiumDriverCommand.StopRecordingScreen).Value.ToString(); public string StopRecordingScreen(IScreenRecordingOptions options) { @@ -679,6 +687,8 @@ public SimilarityMatchingResult GetImagesSimilarity(string base64Image1, string #region Support methods + protected new abstract WebElementFactory CreateElementFactory(); + internal static ICapabilities SetPlatformToCapabilities(DriverOptions dc, string desiredPlatform) { dc.PlatformName = desiredPlatform; diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index cf4aa9be5..92aea3419 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -14,7 +14,7 @@ public class AppiumOptions : DriverOptions private const string DeviceNameOption = "appium:deviceName"; private const string AppOption = "appium:app"; private const string PlatformVersionOption = "appium:platformVersion"; - + private readonly Dictionary additionalAppiumOptions = new Dictionary(); @@ -33,18 +33,18 @@ public AppiumOptions() : base() /// /// Gets or sets the AutoamtionName of the Appium browser's (e.g. Appium, Selendroid and so on) setting. /// - public string AutomationName {get; set;} + public string AutomationName { get; set; } /// /// Gets or sets the DeviceName of the Appium browser's (e.g. Pixel 3XL, Galaxy S20 and so on) setting. /// - public string DeviceName {get; set;} + public string DeviceName { get; set; } /// /// Gets or sets the Capability name used for the apllication setting. /// - public string App {get; set;} + public string App { get; set; } /// /// Gets or sets the PlatformVersion of the Appium browser's (e.g. 10, 11 and so on) setting. @@ -107,7 +107,7 @@ public override ICapabilities ToCapabilities() { var capabilities = this.GenerateDesiredCapabilities(true); - foreach(var option in this.BuildAppiumOptionsDictionary()) + foreach (var option in this.BuildAppiumOptionsDictionary()) { capabilities.SetCapability(option.Key, option.Value); } diff --git a/src/Appium.Net/Appium/AppiumWebElement.cs b/src/Appium.Net/Appium/AppiumWebElement.cs new file mode 100644 index 000000000..8bba0dcbe --- /dev/null +++ b/src/Appium.Net/Appium/AppiumWebElement.cs @@ -0,0 +1,419 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using OpenQA.Selenium.Appium.Interfaces; +using OpenQA.Selenium.Internal; +using OpenQA.Selenium.Remote; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections; +using OpenQA.Selenium.Appium.Enums; +using System; +using System.Drawing; +using Appium.Interfaces.Generic.SearchContext; + +namespace OpenQA.Selenium.Appium +{ + /// + /// AppiumWebElement allows you to have access to specific items that are found on the page. + /// + /// + /// + /// + /// + /// [Test] + /// public void TestGoogle() + /// { + /// driver = new AppiumDriver(); + /// AppiumWebElement elem = driver.FindElement(By.Name("q")); + /// elem.SendKeys("Cheese please!"); + /// } + /// + /// + public abstract class AppiumWebElement : WebElement, + IMobileElement, IWebElementCached, + IFindsById, IFindsByClassName, IFindsByName, IFindsByTagName + { + /// + /// Initializes a new instance of the AppiumWebElement class. + /// + /// Driver in use. + /// ID of the element. + public AppiumWebElement(WebDriver parent, string id) + : base(parent, id) + { + } + + #region Cache + + protected Dictionary cache = null; + + public virtual void SetCacheValues(Dictionary cacheValues) + { + cache = new Dictionary(cacheValues); + } + + public virtual void ClearCache() + { + if (cache != null) + { + cache.Clear(); + } + } + + public virtual void DisableCache() + { + cache = null; + } + + public override string TagName => CacheValue("name", () => base.TagName)?.ToString(); + + public override string Text => CacheValue("text", () => base.Text)?.ToString(); + + public override bool Displayed => Convert.ToBoolean(CacheValue("displayed", () => Execute(DriverCommand.IsElementDisplayed, new Dictionary { { "id", Id } }).Value)); + + public override bool Enabled => Convert.ToBoolean(CacheValue("enabled", () => base.Enabled)); + + public override bool Selected => Convert.ToBoolean(CacheValue("selected", () => base.Selected)); + + public override Point Location => cache == null ? base.Location : Rect.Location; + + public override Size Size => cache == null ? base.Size : Rect.Size; + + public virtual Rectangle Rect + { + get + { + Dictionary rect = null; + object value; + if (cache != null && cache.TryGetValue("rect", out value)) + { + rect = value as Dictionary; + } + if (rect == null) + { + Point location = base.Location; + Size size = base.Size; + rect = new Dictionary { + {"x", location.X }, + {"y", location.Y }, + {"width", size.Width }, + {"height", size.Height }, + }; + if (cache != null) + { + cache["rect"] = rect; + } + } + return new Rectangle( + Convert.ToInt32(rect["x"]), + Convert.ToInt32(rect["y"]), + Convert.ToInt32(rect["width"]), + Convert.ToInt32(rect["height"])); + } + } + + public override string GetAttribute(string attributeName) => CacheValue( + "attribute/" + attributeName, + () => _GetAttribute(attributeName) + )?.ToString(); + + private string _GetAttribute(string attributeName) + { + Response commandResponse = null; + string attributeValue = string.Empty; + Dictionary parameters = new Dictionary(); + + parameters.Add("id", Id); + parameters.Add("name", attributeName); + commandResponse = Execute(DriverCommand.GetElementAttribute, parameters); + + if (commandResponse.Value == null) + { + return null; + } + + attributeValue = commandResponse.Value.ToString(); + + // Normalize string values of boolean results as lowercase. + if (commandResponse.Value is bool) + { + attributeValue = attributeValue.ToLowerInvariant(); + } + + return attributeValue; + } + + public override string GetCssValue(string propertyName) => CacheValue( + "css/" + propertyName, + () => base.GetCssValue(propertyName) + )?.ToString(); + + public override string GetProperty(string propertyName) => CacheValue( + "property/" + propertyName, + () => base.GetProperty(propertyName) + )?.ToString(); + + protected virtual object CacheValue(string key, Func getter) + { + if (cache == null) + { + return getter(); + } + object value; + if (!cache.TryGetValue(key, out value)) + { + value = getter(); + cache.Add(key, value); + } + return value; + } + + #endregion + + #region MJSonMethods + + /// + /// Rotates Device. + /// + /// rotations options like the following: + /// new Dictionary {{"x", 114}, {"y", 198}, {"duration", 5}, + /// {"radius", 3}, {"rotation", 220}, {"touchCount", 2}} + /// + public void Rotate(Dictionary opts) + { + Dictionary parameters = new Dictionary(); + foreach (KeyValuePair opt in opts) + { + parameters.Add(opt.Key, opt.Value); + } + parameters.Add("element", Id); + Execute(AppiumDriverCommand.Rotate, parameters); + } + + #endregion + + #region FindMethods + + #region Overrides to fix "css selector" issue + + IWebElement IFindsByClassName.FindElementByClassName(string className) => + base.FindElement(MobileSelector.ClassName, className); + + ReadOnlyCollection IFindsByClassName.FindElementsByClassName(string className) => + base.FindElements(MobileSelector.ClassName, className); + + IWebElement IFindsById.FindElementById(string id) => + base.FindElement(MobileSelector.Id, id); + + ReadOnlyCollection IFindsById.FindElementsById(string id) => + base.FindElements(MobileSelector.Id, id); + + IWebElement IFindsByName.FindElementByName(string name) => + base.FindElement(MobileSelector.Name, name); + + ReadOnlyCollection IFindsByName.FindElementsByName(string name) => + base.FindElements(MobileSelector.Name, name); + + IWebElement IFindsByTagName.FindElementByTagName(string tagName) => + base.FindElement(MobileSelector.TagName, tagName); + + ReadOnlyCollection IFindsByTagName.FindElementsByTagName(string tagName) => + base.FindElements(MobileSelector.TagName, tagName); + + #endregion Overrides to fix "css selector" issue + + + #region IFindByAccessibilityId Members + + public AppiumWebElement FindElementByAccessibilityId(string selector) => + FindElement(MobileSelector.Accessibility, selector); + + public IReadOnlyCollection FindElementsByAccessibilityId(string selector) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.Accessibility, selector)); + + #endregion IFindByAccessibilityId Members + + /// + /// Finds the first element in the page that matches the OpenQA.Selenium.By object + /// + /// Mechanism to find element + /// first element found + public new AppiumWebElement FindElement(By by) => (AppiumWebElement)base.FindElement(by); + + /// + /// Find the elements on the page by using the object and returns a ReadonlyCollection of the Elements on the page + /// + /// Mechanism to find element + /// ReadOnlyCollection of elements found FindElements(By by) => + ConvertToExtendedWebElementCollection(base.FindElements(by)); + + public new AppiumWebElement FindElement(string by, string value) => + (AppiumWebElement)base.FindElement(by, value); + + public new IReadOnlyCollection FindElements(string selector, string value) => + ConvertToExtendedWebElementCollection(base.FindElements(selector, value)); + + /// + /// Finds the first element in the page that matches the class name supplied + /// + /// CSS class name on the element + /// first element found + (AppiumWebElement)base.FindElement(MobileSelector.ClassName, className); + + /// + /// Finds a list of elements that match the class name supplied + /// + /// CSS class name on the element + /// ReadOnlyCollection of elements found FindElementsByClassName(string className) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.ClassName, className)); + + /// + /// Finds the first element in the page that matches the ID supplied + /// + /// ID of the element + /// First element found + public AppiumWebElement FindElementById(string id) => + (AppiumWebElement)base.FindElement(MobileSelector.Id, id); + + /// + /// Finds a list of elements that match the ID supplied + /// + /// ID of the element + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsById(string id) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Id, id)); + + /// + /// Finds the first element matching the specified CSS selector + /// + /// The CSS selector to match + /// First element found + public AppiumWebElement FindElementByCssSelector(string cssSelector) => + (AppiumWebElement)base.FindElement(By.CssSelector(cssSelector)); + + /// + /// Finds a list of elements that match the CSS selector + /// + /// The CSS selector to match + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsByCssSelector(string cssSelector) => + ConvertToExtendedWebElementCollection(base.FindElements(By.CssSelector(cssSelector))); + + /// + /// Finds the first of elements that match the link text supplied + /// + /// Link text of element + /// First element found + public AppiumWebElement FindElementByLinkText(string linkText) => + (AppiumWebElement)base.FindElement(By.LinkText(linkText)); + + /// + /// Finds a list of elements that match the link text supplied + /// + /// Link text of element + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsByLinkText(string linkText) => + ConvertToExtendedWebElementCollection(base.FindElements(By.LinkText(linkText))); + + /// + /// Finds the first of elements that match the name supplied + /// + /// Name of the element on the page + /// First element found + public AppiumWebElement FindElementByName(string name) => + (AppiumWebElement)base.FindElement(MobileSelector.Name, name); + + /// + /// Finds a list of elements that match the name supplied + /// + /// Name of the element on the page + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsByName(string name) => + ConvertToExtendedWebElementCollection(base.FindElements(MobileSelector.Name, name)); + + /// + /// Finds the first of elements that match the part of the link text supplied + /// + /// Part of the link text + /// First element found + public AppiumWebElement FindElementByPartialLinkText(string partialLinkText) => + (AppiumWebElement)base.FindElement(By.PartialLinkText(partialLinkText)); + + /// + /// Finds a list of elements that match the part of the link text supplied + /// + /// Part of the link text + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsByPartialLinkText(string partialLinkText) => + ConvertToExtendedWebElementCollection(base.FindElements(By.PartialLinkText(partialLinkText))); + + /// + /// Finds the first of elements that match the DOM Tag supplied + /// + /// DOM tag name of the element being searched + /// First element found + public AppiumWebElement FindElementByTagName(string tagName) => + (AppiumWebElement)base.FindElement(MobileSelector.TagName, tagName); + + /// + /// Finds a list of elements that match the DOM Tag supplied + /// + /// DOM tag name of the element being searched + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsByTagName(string tagName) => + ConvertToExtendedWebElementCollection(FindElements(MobileSelector.TagName, tagName)); + + /// + /// Finds the first of elements that match the XPath supplied + /// + /// xpath to the element + /// First element found + public AppiumWebElement FindElementByXPath(string xpath) => + (AppiumWebElement)base.FindElement(By.XPath(xpath)); + + /// + /// Finds a list of elements that match the XPath supplied + /// + /// xpath to the element + /// ReadOnlyCollection of elements found + public ReadOnlyCollection FindElementsByXPath(string xpath) => + ConvertToExtendedWebElementCollection(base.FindElements(By.XPath(xpath))); + + #endregion + + public void SetImmediateValue(string value) => Execute(AppiumDriverCommand.SetValue, + new Dictionary() { ["id"] = Id, ["value"] = value }); + + private ReadOnlyCollection ConvertToExtendedWebElementCollection(IEnumerable list) + { + List result = new List(); + foreach (var element in list) + { + result.Add((AppiumWebElement)element); + } + return result.AsReadOnly(); + } + + public new Response Execute(string commandName, Dictionary parameters) => + base.Execute(commandName, parameters); + + public Response Execute(string driverCommand) => Execute(driverCommand, null); + + public new string Id => base.Id; + } +} \ No newline at end of file diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs index 8a66b98bc..bda8ee662 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidDataMatcher.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidDataMatcher : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new RemoteWebDriver(new DriverOptions()); + /// IWebDriver driver = new WebDriver(new DriverOptions()); /// IWebElement elem = driver.FindElementByAndroidDataMatcher('elements()')) /// /// @@ -38,7 +38,7 @@ public interface IFindByAndroidDataMatcher : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidDataMatcher(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs index 6e4eb0b2d..1d8cbf411 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidUIAutomator.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidUIAutomator : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// IWebElement elem = driver.FindElementByAndroidUIAutomator('elements()')) /// /// @@ -46,7 +46,7 @@ public interface IFindByAndroidUIAutomator : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidUIAutomator(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs b/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs index a32b9b5d1..7cdfd17a0 100644 --- a/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs +++ b/src/Appium.Net/Appium/Interfaces/IFindByAndroidViewMatcher.cs @@ -25,7 +25,7 @@ public interface IFindByAndroidViewMatcher : IFindsByFluentSelector wh /// IWebElement object so that you can interact that object /// /// - /// IWebDriver driver = new RemoteWebDriver(new DriverOptions()); + /// IWebDriver driver = new WebDriver(new DriverOptions()); /// IWebElement elem = driver.FindElementByAndroidViewMatcher('elements()')) /// /// @@ -38,7 +38,7 @@ public interface IFindByAndroidViewMatcher : IFindsByFluentSelector wh /// ReadOnlyCollection of IWebElement object so that you can interact with those objects /// /// - /// IWebDriver driver = new RemoteWebDriver(new FirefoxOptions()); + /// IWebDriver driver = new WebDriver(new FirefoxOptions()); /// ReadOnlyCollection]]> elem = driver.FindElementsByAndroidViewMatcher(elements()) /// /// diff --git a/src/Appium.Net/Appium/Interfaces/IMobileElement.cs b/src/Appium.Net/Appium/Interfaces/IMobileElement.cs new file mode 100644 index 000000000..d8da28d2d --- /dev/null +++ b/src/Appium.Net/Appium/Interfaces/IMobileElement.cs @@ -0,0 +1,32 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using Appium.Interfaces.Generic.SearchContext; + +namespace OpenQA.Selenium.Appium.Interfaces +{ + /// + /// This interface extends IWebElement and defines specific behavior + /// for mobile. + /// + public interface IMobileElement : IFindByAccessibilityId, IGenericSearchContext, + IGenericFindsByClassName, + IGenericFindsById, IGenericFindsByCssSelector, IGenericFindsByLinkText, + IGenericFindsByName, + IGenericFindsByPartialLinkText, IGenericFindsByTagName, IGenericFindsByXPath, IWebElement, + IExecuteMethod + where W : IWebElement + { + } +} \ No newline at end of file diff --git a/src/Appium.Net/Appium/Mac/MacDriver.cs b/src/Appium.Net/Appium/Mac/MacDriver.cs index cfaec4efc..6a6d90cf3 100644 --- a/src/Appium.Net/Appium/Mac/MacDriver.cs +++ b/src/Appium.Net/Appium/Mac/MacDriver.cs @@ -14,11 +14,12 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Service; +using OpenQA.Selenium.Remote; using System; namespace OpenQA.Selenium.Appium.Mac { - public class MacDriver : AppiumDriver + public class MacDriver : AppiumDriver where W : IWebElement { private static readonly string Platform = MobilePlatform.MacOS; @@ -113,5 +114,8 @@ public MacDriver(AppiumLocalService service, AppiumOptions AppiumOptions, TimeSp : base(service, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) { } + + + protected override WebElementFactory CreateElementFactory() => new MacElementFactory(this as WebDriver); } } diff --git a/src/Appium.Net/Appium/Mac/MacElement.cs b/src/Appium.Net/Appium/Mac/MacElement.cs new file mode 100644 index 000000000..c2865b5ae --- /dev/null +++ b/src/Appium.Net/Appium/Mac/MacElement.cs @@ -0,0 +1,31 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using OpenQA.Selenium.Remote; + +namespace OpenQA.Selenium.Appium.Mac +{ + public class MacElement : AppiumWebElement + { + /// + /// Initializes a new instance of the MacElement class. + /// + /// Driver in use. + /// ID of the element. + public MacElement(WebDriver parent, string id) + : base(parent, id) + { + } + } +} diff --git a/src/Appium.Net/Appium/Mac/MacElementFactory.cs b/src/Appium.Net/Appium/Mac/MacElementFactory.cs new file mode 100644 index 000000000..70cdc2ce4 --- /dev/null +++ b/src/Appium.Net/Appium/Mac/MacElementFactory.cs @@ -0,0 +1,15 @@ + +namespace OpenQA.Selenium.Appium.Mac +{ + public class MacElementFactory : CachedElementFactory + { + public MacElementFactory(WebDriver parentDriver) : base(parentDriver) + { + } + + protected override MacElement CreateCachedElement(WebDriver parentDriver, string elementId) + { + return new MacElement(parentDriver, elementId); + } + } +} diff --git a/src/Appium.Net/Appium/MobileBy.cs b/src/Appium.Net/Appium/MobileBy.cs index 31bbe2948..3c54724bc 100644 --- a/src/Appium.Net/Appium/MobileBy.cs +++ b/src/Appium.Net/Appium/MobileBy.cs @@ -26,7 +26,8 @@ public abstract class MobileBy : By protected readonly string selector; private readonly string _searchingCriteriaName; - internal MobileBy(string selector, string searchingCriteriaName) : base(searchingCriteriaName, selector) + + internal MobileBy(string selector, string searchingCriteriaName) { if (string.IsNullOrEmpty(selector)) { @@ -37,6 +38,32 @@ internal MobileBy(string selector, string searchingCriteriaName) : base(searchin _searchingCriteriaName = searchingCriteriaName; } + /// + /// Find a single element. + /// + /// Context used to find the element. + /// The element that matches + public override IWebElement FindElement(ISearchContext context) + { + if (context is IFindsByFluentSelector finder) + return finder.FindElement(_searchingCriteriaName, selector); + throw new InvalidCastException($"Unable to cast {context.GetType().FullName} " + + $"to {nameof(IFindsByFluentSelector)}"); + } + + /// + /// Finds many elements + /// + /// Context used to find the element. + /// A readonly collection of elements that match. + public override ReadOnlyCollection FindElements(ISearchContext context) + { + if (context is IFindsByFluentSelector finder) + return finder.FindElements(_searchingCriteriaName, selector).ToList().AsReadOnly(); + throw new InvalidCastException($"Unable to cast {context.GetType().FullName} " + + $"to {nameof(IFindsByFluentSelector)}"); + } + /// /// This method creates a strategy /// that searches for elements by accessibility id @@ -164,6 +191,19 @@ public ByAndroidUIAutomator(IUiAutomatorStatementBuilder selector) : base(select { } + public override IWebElement FindElement(ISearchContext context) + { + if (context is IFindByAndroidUIAutomator finder) + return finder.FindElementByAndroidUIAutomator(selector); + return base.FindElement(context); + } + + public override ReadOnlyCollection FindElements(ISearchContext context) + { + if (context is IFindByAndroidUIAutomator finder) + return finder.FindElementsByAndroidUIAutomator(selector).ToList().AsReadOnly(); + return base.FindElements(context); + } public override string ToString() => $"ByAndroidUIAutomator({selector})"; diff --git a/src/Appium.Net/Appium/MobileSelectors.cs b/src/Appium.Net/Appium/MobileSelectors.cs deleted file mode 100644 index c39252dcb..000000000 --- a/src/Appium.Net/Appium/MobileSelectors.cs +++ /dev/null @@ -1,96 +0,0 @@ -using OpenQA.Selenium.Appium.Enums; -using OpenQA.Selenium.Appium.Interfaces; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace OpenQA.Selenium.Appium -{ - public static class MobileSelectors - { - public static IWebElement FindElementByAccessibilityId(this IWebElement searchContext, string selector) - { - return (searchContext as WebElement).FindElement(MobileSelector.Accessibility, selector); - } - - public static ReadOnlyCollection FindElementsByAccessibilityId(this IWebElement searchContext, string selector) - { - return (searchContext as WebElement).FindElements(MobileSelector.Accessibility, selector); - } - - public static IWebElement FindElementByName(this IWebElement searchContext, string selector) - { - return (searchContext as WebElement).FindElement(MobileSelector.Name, selector); - } - - public static ReadOnlyCollection FindElementsByName(this IWebElement searchContext, string selector) - { - return (searchContext as WebElement).FindElements(MobileSelector.Name, selector); - } - - #region IFindByIosUIAutomation Members - - public static IWebElement FindElementByIosUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElement(MobileSelector.iOSAutomatoion, selector); - - public static IReadOnlyCollection FindElementsByIosUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElements(MobileSelector.iOSAutomatoion, selector); - - #endregion IFindByIosUIAutomation Members - - #region IFindByAndroidUIAutomator Members - - public static IWebElement FindElementByAndroidUIAutomator(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElement(MobileSelector.AndroidUIAutomator, selector); - - public static IWebElement FindElementByAndroidUIAutomator(this IWebElement searchContext, IUiAutomatorStatementBuilder selector) => - (searchContext as WebElement).FindElement(MobileSelector.AndroidUIAutomator, selector.Build()); - - public static IReadOnlyCollection FindElementsByAndroidUIAutomator(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElements(MobileSelector.AndroidUIAutomator, selector); - - public static IReadOnlyCollection FindElementsByAndroidUIAutomator(this IWebElement searchContext, IUiAutomatorStatementBuilder selector) => - (searchContext as WebElement).FindElements(MobileSelector.AndroidUIAutomator, selector.Build()); - - #endregion IFindByAndroidUIAutomator Members - - #region IFindByAndroidDataMatcher Members - - public static IWebElement FindElementByAndroidDataMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElement(MobileSelector.AndroidDataMatcher, selector); - - public static IReadOnlyCollection FindElementsByAndroidDataMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElements(MobileSelector.AndroidDataMatcher, selector); - - #endregion IFindByAndroidDataMatcher Members - - #region IFindByAndroidViewMatcher Members - - public static IWebElement FindElementByAndroidViewMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElement(MobileSelector.AndroidViewMatcher, selector); - - public static IReadOnlyCollection FindElementsByAndroidViewMatcher(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElements(MobileSelector.AndroidViewMatcher, selector); - - #endregion IFindByAndroidViewMatcher Members - - #region IFindByTizenUIAutomation Members - - public static IWebElement FindElementByTizenUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElement(MobileSelector.TizenUIAutomation, selector); - - public static IReadOnlyCollection FindElementsByTizenUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElements(MobileSelector.TizenUIAutomation, selector); - - #endregion IFindByTizenUIAutomation Members - - #region IFindByWindowsUIAutomation Members - - public static IWebElement FindElementByWindowsUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElement(MobileSelector.WindowsUIAutomation, selector); - - public static IReadOnlyCollection FindElementsByWindowsUIAutomation(this IWebElement searchContext, string selector) => - (searchContext as WebElement).FindElements(MobileSelector.WindowsUIAutomation, selector); - - #endregion IFindByWindowsUIAutomation Members - } -} diff --git a/src/Appium.Net/Appium/MultiAction/TouchAction.cs b/src/Appium.Net/Appium/MultiAction/TouchAction.cs index e0479107e..99359f737 100644 --- a/src/Appium.Net/Appium/MultiAction/TouchAction.cs +++ b/src/Appium.Net/Appium/MultiAction/TouchAction.cs @@ -28,9 +28,9 @@ internal class Step private string GetIdForElement(IWebElement el) { - RemoteWebElement remoteWebElement = el as RemoteWebElement; - if (remoteWebElement != null) - return (string) typeof(OpenQA.Selenium.Remote.RemoteWebElement).GetProperty("Id", + WebElement WebElement = el as WebElement; + if (WebElement != null) + return (string) typeof(OpenQA.Selenium.WebElement).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(el, null); diff --git a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs index 4979121b2..fd738e130 100644 --- a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs +++ b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs @@ -45,6 +45,10 @@ internal static List ListOfAvailableElementTypes listAvailableElementTypes = new List(); listAvailableElementTypes.Add(typeof(IWebElement)); listAvailableElementTypes.Add(typeof(WebElement)); + listAvailableElementTypes.Add(typeof(AppiumWebElement)); + listAvailableElementTypes.Add(typeof(AndroidElement)); + listAvailableElementTypes.Add(typeof(IOSElement)); + listAvailableElementTypes.Add(typeof(WindowsElement)); } return listAvailableElementTypes; @@ -66,11 +70,7 @@ private static Type GetTypeOfASingleElement(Type targetType, MemberInfo member) { if (typeof(IWebElement).Equals(targetType)) return targetType; - else if (typeof(WebElement).Equals(targetType)) - return targetType; - else if (GenericsUtility.MatchGenerics(typeof(IWebElement), ListOfAvailableElementTypes, targetType)) - return targetType; - else if (GenericsUtility.MatchGenerics(typeof(WebElement), ListOfAvailableElementTypes, targetType)) + else if (GenericsUtility.MatchGenerics(typeof(IMobileElement<>), ListOfAvailableElementTypes, targetType)) return targetType; return null; diff --git a/src/Appium.Net/Appium/PageObjects/ByFactory.cs b/src/Appium.Net/Appium/PageObjects/ByFactory.cs index 325db08ad..f524cada6 100644 --- a/src/Appium.Net/Appium/PageObjects/ByFactory.cs +++ b/src/Appium.Net/Appium/PageObjects/ByFactory.cs @@ -220,29 +220,17 @@ private static string GetPlatform(ISearchContext context) if (driver == null) return null; - if (driver is AndroidDriver) - { - return MobilePlatform.Android; - }else if (driver is IOSDriver) - { - return MobilePlatform.IOS; - } - if (driver is WindowsDriver) - { - return MobilePlatform.Windows; - } - Type driverType = driver.GetType(); - if (GenericsUtility.MatchGenerics(typeof(AndroidDriver), + if (GenericsUtility.MatchGenerics(typeof(AndroidDriver<>), AppiumPageObjectMemberDecorator.ListOfAvailableElementTypes, driverType)) return MobilePlatform.Android; - if (GenericsUtility.MatchGenerics(typeof(IOSDriver), + if (GenericsUtility.MatchGenerics(typeof(IOSDriver<>), AppiumPageObjectMemberDecorator.ListOfAvailableElementTypes, driverType)) return MobilePlatform.IOS; - if (GenericsUtility.MatchGenerics(typeof(WindowsDriver), + if (GenericsUtility.MatchGenerics(typeof(WindowsDriver<>), AppiumPageObjectMemberDecorator.ListOfAvailableElementTypes, driverType)) return MobilePlatform.Windows; diff --git a/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs b/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs index 41c33f1f3..5e579f560 100644 --- a/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs +++ b/src/Appium.Net/Appium/PageObjects/GenericsUtility.cs @@ -23,12 +23,9 @@ public static bool MatchGenerics(Type generalType, List possibleParameters { foreach (var type in possibleParameters) { - if (!generalType.IsEquivalentTo(type) && !generalType.IsAssignableFrom(type) && !type.IsAssignableFrom(generalType)) - { - Type fullType = generalType.MakeGenericType(type); - if (fullType.Equals(targetType)) - return true; - } + Type fullType = generalType.MakeGenericType(type); + if (fullType.Equals(targetType)) + return true; } return false; diff --git a/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs b/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs index 37fccd1e1..6190d6935 100644 --- a/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs +++ b/src/Appium.Net/Appium/PageObjects/WebDriverUnpackUtility.cs @@ -30,7 +30,7 @@ internal static IWebDriver UnpackWebdriver(ISearchContext context) // Search context it is not only Webdriver. Webelement is search context // too. - // RemoteWebElement and AppiumWebElement implement IWrapsDriver + // WebElement and AppiumWebElement implement IWrapsDriver if ((context as IWrapsDriver) != null) return UnpackWebdriver(((IWrapsDriver) context) .WrappedDriver); diff --git a/src/Appium.Net/Appium/Tizen/TizenDriver.cs b/src/Appium.Net/Appium/Tizen/TizenDriver.cs index 1a30e63a9..9379c3375 100644 --- a/src/Appium.Net/Appium/Tizen/TizenDriver.cs +++ b/src/Appium.Net/Appium/Tizen/TizenDriver.cs @@ -15,12 +15,14 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; +using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.Tizen { - public class TizenDriver: AppiumDriver, IFindByTizenUIAutomation + public class TizenDriver : AppiumDriver, IFindByTizenUIAutomation + where W : IWebElement { private static readonly string Platform = MobilePlatform.Tizen; @@ -123,7 +125,7 @@ public TizenDriver(AppiumLocalService service, AppiumOptions AppiumOptions, Time /// /// a Tizen UIAutomation selector /// IWebElement object so that you can interact that object - public IWebElement FindElementByTizenUIAutomation(string selector) => + public W FindElementByTizenUIAutomation(string selector) => FindElement(MobileSelector.TizenUIAutomation, selector); /// @@ -131,9 +133,11 @@ public IWebElement FindElementByTizenUIAutomation(string selector) => /// /// a Tizen UIAutomation selector /// ReadOnlyCollection of IWebElement objects so that you can interact with those objects - public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) => + public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) => FindElements(MobileSelector.TizenUIAutomation, selector); #endregion IFindByTizenUIAutomation Members + + protected override WebElementFactory CreateElementFactory() => new TizenElementFactory(this as WebDriver); } } diff --git a/src/Appium.Net/Appium/Tizen/TizenElement.cs b/src/Appium.Net/Appium/Tizen/TizenElement.cs new file mode 100644 index 000000000..81a3b5e0e --- /dev/null +++ b/src/Appium.Net/Appium/Tizen/TizenElement.cs @@ -0,0 +1,47 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +using OpenQA.Selenium.Appium.Enums; +using OpenQA.Selenium.Appium.Interfaces; +using OpenQA.Selenium.Remote; +using System.Collections.Generic; + +namespace OpenQA.Selenium.Appium.Tizen +{ + public class TizenElement : AppiumWebElement, IFindByTizenUIAutomation + { + /// + /// Initializes a new instance of the TizenElement class. + /// + /// Driver in use. + /// ID of the element. + public TizenElement(WebDriver parent, string id) + : base(parent, id) + { + } + + public void ReplaceValue(string value) => TizenCommandExecutionHelper.ReplaceValue(this, Id, value); + + public void SetAttribute(string name, string value) => TizenCommandExecutionHelper.SetAttribute(this, Id, name, value); + + #region IFindByTizenUIAutomation Members + + public AppiumWebElement FindElementByTizenUIAutomation(string selector) => + FindElement(MobileSelector.TizenUIAutomation, selector); + + public IReadOnlyCollection FindElementsByTizenUIAutomation(string selector) => + FindElements(MobileSelector.TizenUIAutomation, selector); + + #endregion IFindByTizenUIAutomation Members + } +} diff --git a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs new file mode 100644 index 000000000..f9091e164 --- /dev/null +++ b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs @@ -0,0 +1,16 @@ +using OpenQA.Selenium.Remote; + +namespace OpenQA.Selenium.Appium.Tizen +{ + public class TizenElementFactory : CachedElementFactory + { + public TizenElementFactory(WebDriver parentDriver) : base(parentDriver) + { + } + + protected override TizenElement CreateCachedElement(WebDriver parentDriver, string elementId) + { + return new TizenElement(parentDriver, elementId); + } + } +} diff --git a/src/Appium.Net/Appium/Windows/WindowsDriver.cs b/src/Appium.Net/Appium/Windows/WindowsDriver.cs index 449d040c0..bec10bab3 100644 --- a/src/Appium.Net/Appium/Windows/WindowsDriver.cs +++ b/src/Appium.Net/Appium/Windows/WindowsDriver.cs @@ -19,18 +19,21 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; +using OpenQA.Selenium.Remote; namespace OpenQA.Selenium.Appium.Windows { - public class WindowsDriver : AppiumDriver, ISendsKeyEvents, IHidesKeyboardWithKeyName, - IFindByWindowsUIAutomation + public class WindowsDriver : AppiumDriver, ISendsKeyEvents, IHidesKeyboardWithKeyName, + IFindByWindowsUIAutomation where W : IWebElement { + private static readonly string Platform = MobilePlatform.Windows; + /// /// Initializes a new instance of the WindowsDriver class using Appium options /// /// An object containing the Appium options of the browser. public WindowsDriver(AppiumOptions AppiumOptions) - : base(SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) + : base(SetPlatformToCapabilities(AppiumOptions, Platform)) { } @@ -40,7 +43,7 @@ public WindowsDriver(AppiumOptions AppiumOptions) /// An object containing the Appium options. /// The maximum amount of time to wait for each command. public WindowsDriver(AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) + : base(SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) { } @@ -50,7 +53,7 @@ public WindowsDriver(AppiumOptions AppiumOptions, TimeSpan commandTimeout) /// object containing settings of the Appium local service which is going to be started /// An object containing the Appium options. public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions) - : base(builder, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) + : base(builder, SetPlatformToCapabilities(AppiumOptions, Platform)) { } @@ -62,7 +65,7 @@ public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions) /// The maximum amount of time to wait for each command. public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(builder, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) + : base(builder, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) { } @@ -72,7 +75,7 @@ public WindowsDriver(AppiumServiceBuilder builder, AppiumOptions AppiumOptions, /// URI containing the address of the WebDriver remote server (e.g. http://127.0.0.1:4723/wd/hub). /// An object containing the Appium options. public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions) - : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) + : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, Platform)) { } @@ -82,7 +85,7 @@ public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions) /// the specified Appium local service /// An object containing the Appium options of the browser. public WindowsDriver(AppiumLocalService service, AppiumOptions AppiumOptions) - : base(service, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows)) + : base(service, SetPlatformToCapabilities(AppiumOptions, Platform)) { } @@ -93,7 +96,7 @@ public WindowsDriver(AppiumLocalService service, AppiumOptions AppiumOptions) /// An object containing the Appium options. /// The maximum amount of time to wait for each command. public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) + : base(remoteAddress, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) { } @@ -105,7 +108,7 @@ public WindowsDriver(Uri remoteAddress, AppiumOptions AppiumOptions, TimeSpan co /// The maximum amount of time to wait for each command. public WindowsDriver(AppiumLocalService service, AppiumOptions AppiumOptions, TimeSpan commandTimeout) - : base(service, SetPlatformToCapabilities(AppiumOptions, MobilePlatform.Windows), commandTimeout) + : base(service, SetPlatformToCapabilities(AppiumOptions, Platform), commandTimeout) { } @@ -135,7 +138,7 @@ public override ReadOnlyCollection Contexts /// /// a Windows UIAutomation selector /// IWebElement object so that you can interact that object - public IWebElement FindElementByWindowsUIAutomation(string selector) => + public W FindElementByWindowsUIAutomation(string selector) => FindElement(MobileSelector.WindowsUIAutomation, selector); /// @@ -143,14 +146,16 @@ public IWebElement FindElementByWindowsUIAutomation(string selector) => /// /// a Windows UIAutomation selector /// ReadOnlyCollection of IWebElement objects so that you can interact with those objects - public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) => + public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) => FindElements(MobileSelector.WindowsUIAutomation, selector); #endregion IFindByWindowsUIAutomation Members - public new void HideKeyboard(string key, string strategy = null) => + public void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); + protected override WebElementFactory CreateElementFactory() => new WindowsElementFactory(this); + public void PressKeyCode(KeyEvent keyEvent) => throw new NotImplementedException(); public void LongPressKeyCode(KeyEvent keyEvent) => throw new NotImplementedException(); diff --git a/src/Appium.Net/Appium/Windows/WindowsElement.cs b/src/Appium.Net/Appium/Windows/WindowsElement.cs new file mode 100644 index 000000000..0cf03cd7b --- /dev/null +++ b/src/Appium.Net/Appium/Windows/WindowsElement.cs @@ -0,0 +1,39 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using OpenQA.Selenium.Appium.Interfaces; +using OpenQA.Selenium.Remote; +using OpenQA.Selenium.Appium.Enums; +using System.Collections.Generic; + +namespace OpenQA.Selenium.Appium.Windows +{ + public class WindowsElement : AppiumWebElement, IFindByWindowsUIAutomation + { + public WindowsElement(WebDriver parent, string id) + : base(parent, id) + { + } + + #region IFindByWindowsUIAutomation Members + + public AppiumWebElement FindElementByWindowsUIAutomation(string selector) => + FindElement(MobileSelector.WindowsUIAutomation, selector); + + public IReadOnlyCollection FindElementsByWindowsUIAutomation(string selector) => + FindElements(MobileSelector.WindowsUIAutomation, selector); + + #endregion IFindByWindowsUIAutomation Members + } +} \ No newline at end of file diff --git a/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs b/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs new file mode 100644 index 000000000..1c7ec3b31 --- /dev/null +++ b/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs @@ -0,0 +1,16 @@ +using OpenQA.Selenium.Remote; + +namespace OpenQA.Selenium.Appium.Windows +{ + public class WindowsElementFactory : CachedElementFactory + { + public WindowsElementFactory(WebDriver parentDriver) : base(parentDriver) + { + } + + protected override WindowsElement CreateCachedElement(WebDriver parentDriver, string elementId) + { + return new WindowsElement(parentDriver, elementId); + } + } +} diff --git a/src/Appium.Net/Appium/iOS/IOSDriver.cs b/src/Appium.Net/Appium/iOS/IOSDriver.cs index 61f212906..534051d49 100644 --- a/src/Appium.Net/Appium/iOS/IOSDriver.cs +++ b/src/Appium.Net/Appium/iOS/IOSDriver.cs @@ -15,6 +15,7 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; +using OpenQA.Selenium.Remote; using System; using System.Drawing; using OpenQA.Selenium.Appium.iOS.Interfaces; @@ -22,10 +23,9 @@ namespace OpenQA.Selenium.Appium.iOS { - - public class IOSDriver : AppiumDriver, IFindByIosUIAutomation, IFindsByIosClassChain, - IFindsByIosNSPredicate, IHidesKeyboardWithKeyName, IHasClipboard, - IShakesDevice, IPerformsTouchID, IHasSettings + public class IOSDriver : AppiumDriver, IFindByIosUIAutomation, IFindsByIosClassChain, + IFindsByIosNSPredicate, IHidesKeyboardWithKeyName, IHasClipboard, + IShakesDevice, IPerformsTouchID, IHasSettings where W : IWebElement { private static readonly string Platform = MobilePlatform.IOS; @@ -123,28 +123,28 @@ public IOSDriver(AppiumLocalService service, DriverOptions driverOptions, TimeSp #region IFindByIosUIAutomation Members - public IWebElement FindElementByIosUIAutomation(string selector) => FindElement(MobileSelector.iOSAutomatoion, selector); + public W FindElementByIosUIAutomation(string selector) => FindElement(MobileSelector.iOSAutomatoion, selector); - public IReadOnlyCollection FindElementsByIosUIAutomation(string selector) => + public IReadOnlyCollection FindElementsByIosUIAutomation(string selector) => FindElements(MobileSelector.iOSAutomatoion, selector); #endregion IFindByIosUIAutomation Members #region IFindsByIosClassChain Members - public IWebElement FindElementByIosClassChain(string selector) => FindElement(MobileSelector.iOSClassChain, selector); + public W FindElementByIosClassChain(string selector) => FindElement(MobileSelector.iOSClassChain, selector); - public IReadOnlyCollection FindElementsByIosClassChain(string selector) => + public IReadOnlyCollection FindElementsByIosClassChain(string selector) => FindElements(MobileSelector.iOSClassChain, selector); #endregion IFindsByIosClassChain Members #region IFindsByIosNSPredicate Members - public IWebElement FindElementByIosNsPredicate(string selector) => + public W FindElementByIosNsPredicate(string selector) => FindElement(MobileSelector.iOSPredicateString, selector); - public IReadOnlyCollection FindElementsByIosNsPredicate(string selector) => + public IReadOnlyCollection FindElementsByIosNsPredicate(string selector) => FindElements(MobileSelector.iOSPredicateString, selector); #endregion IFindsByIosNSPredicate Members @@ -168,22 +168,24 @@ public Dictionary Settings public void ShakeDevice() => IOSCommandExecutionHelper.ShakeDevice(this); - public new void HideKeyboard(string key, string strategy = null) => + public void HideKeyboard(string key, string strategy = null) => AppiumCommandExecutionHelper.HideKeyboard(this, strategy, key); + protected override WebElementFactory CreateElementFactory() => new IOSElementFactory(this as WebDriver); + /// /// Locks the device. /// /// The number of seconds during which the device need to be locked for. public void Lock(int seconds) => AppiumCommandExecutionHelper.Lock(this, seconds); - public void Lock() => IOSCommandExecutionHelper.Lock(this); + public void PerformTouchID(bool match) => IOSCommandExecutionHelper.PerformTouchID(this, match); public bool IsLocked() => IOSCommandExecutionHelper.IsLocked(this); public void Unlock() => IOSCommandExecutionHelper.Unlock(this); - public void PerformTouchID(bool match) => IOSCommandExecutionHelper.PerformTouchID(this, match); + public void Lock() => IOSCommandExecutionHelper.Lock(this); /// /// Sets the content to the clipboard diff --git a/src/Appium.Net/Appium/iOS/IOSElement.cs b/src/Appium.Net/Appium/iOS/IOSElement.cs new file mode 100644 index 000000000..733f767c2 --- /dev/null +++ b/src/Appium.Net/Appium/iOS/IOSElement.cs @@ -0,0 +1,46 @@ +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//See the NOTICE file distributed with this work for additional +//information regarding copyright ownership. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +using OpenQA.Selenium.Appium.Enums; +using OpenQA.Selenium.Appium.Interfaces; +using OpenQA.Selenium.Remote; +using System.Collections.Generic; + +namespace OpenQA.Selenium.Appium.iOS +{ + public class IOSElement : AppiumWebElement, + IFindByIosUIAutomation + { + /// + /// Initializes a new instance of the IOSElement class. + /// + /// Driver in use. + /// ID of the element. + public IOSElement(WebDriver parent, string id) + : base(parent, id) + { + } + + + #region IFindByIosUIAutomation Members + + public AppiumWebElement FindElementByIosUIAutomation(string selector) => + FindElement(MobileSelector.iOSAutomatoion, selector); + + public IReadOnlyCollection FindElementsByIosUIAutomation(string selector) => + FindElements(MobileSelector.iOSAutomatoion, selector); + + #endregion IFindByIosUIAutomation Members + } +} \ No newline at end of file diff --git a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs new file mode 100644 index 000000000..a9653e47c --- /dev/null +++ b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs @@ -0,0 +1,16 @@ +using OpenQA.Selenium.Remote; + +namespace OpenQA.Selenium.Appium.iOS +{ + public class IOSElementFactory : CachedElementFactory + { + public IOSElementFactory(WebDriver parentDriver) : base(parentDriver) + { + } + + protected override IOSElement CreateCachedElement(WebDriver parentDriver, string elementId) + { + return new IOSElement(parentDriver, elementId); + } + } +} diff --git a/test/integration/Android/ActivityTest.cs b/test/integration/Android/ActivityTest.cs index d645a5bb6..d9359c264 100644 --- a/test/integration/Android/ActivityTest.cs +++ b/test/integration/Android/ActivityTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android @@ -7,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class ActivityTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } diff --git a/test/integration/Android/AppStringsTest.cs b/test/integration/Android/AppStringsTest.cs index ba98fedb2..4781a32e6 100644 --- a/test/integration/Android/AppStringsTest.cs +++ b/test/integration/Android/AppStringsTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class AppStringsTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.ImplicitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.ImplicitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/ClipboardTest.cs b/test/integration/Android/ClipboardTest.cs index eca255ec1..f5b65e5ff 100644 --- a/test/integration/Android/ClipboardTest.cs +++ b/test/integration/Android/ClipboardTest.cs @@ -2,6 +2,7 @@ using System.Text.RegularExpressions; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; @@ -10,7 +11,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture(Category = "Device")] public class ClipboardTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private const string ClipboardTestString = "Hello Clipboard"; private const string Base64RegexPattern = @"^[a-zA-Z0-9\+/]*={0,2}$"; @@ -22,7 +23,7 @@ public void BeforeAll() : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/ConnectionTest.cs b/test/integration/Android/ConnectionTest.cs index 0bccf07be..9adce6791 100644 --- a/test/integration/Android/ConnectionTest.cs +++ b/test/integration/Android/ConnectionTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] class ConnectionTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } @@ -34,11 +35,11 @@ public void AfterAll() [Test] public void NetworkConnectionTest() { - ((AndroidDriver) _driver).ConnectionType = ConnectionType.AirplaneMode; - Assert.AreEqual(ConnectionType.AirplaneMode, ((AndroidDriver) _driver).ConnectionType); + ((AndroidDriver) _driver).ConnectionType = ConnectionType.AirplaneMode; + Assert.AreEqual(ConnectionType.AirplaneMode, ((AndroidDriver) _driver).ConnectionType); - ((AndroidDriver) _driver).ConnectionType = ConnectionType.AllNetworkOn; - Assert.AreEqual(ConnectionType.AllNetworkOn, ((AndroidDriver) _driver).ConnectionType); + ((AndroidDriver) _driver).ConnectionType = ConnectionType.AllNetworkOn; + Assert.AreEqual(ConnectionType.AllNetworkOn, ((AndroidDriver) _driver).ConnectionType); } } } \ No newline at end of file diff --git a/test/integration/Android/CurrentPackageTest.cs b/test/integration/Android/CurrentPackageTest.cs index 3b82a3cae..5ff0aa4ba 100644 --- a/test/integration/Android/CurrentPackageTest.cs +++ b/test/integration/Android/CurrentPackageTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android @@ -7,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class CurrentPackageTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private const string DemoAppPackage = "io.appium.android.apis"; [OneTimeSetUp] @@ -16,7 +17,7 @@ public void BeforeAll() var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } diff --git a/test/integration/Android/Device/AppTests.cs b/test/integration/Android/Device/AppTests.cs index cc4248655..970de3d34 100644 --- a/test/integration/Android/Device/AppTests.cs +++ b/test/integration/Android/Device/AppTests.cs @@ -1,6 +1,7 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android.Device.App { internal class AppTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; private const string IntentAppPackageName = "com.prgguru.android"; private const string ApiDemosPackageName = "io.appium.android.apis"; @@ -19,7 +20,7 @@ internal class AppTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); diff --git a/test/integration/Android/Device/AuthenticationTest.cs b/test/integration/Android/Device/AuthenticationTest.cs index 6c6084170..ecb2b2d41 100644 --- a/test/integration/Android/Device/AuthenticationTest.cs +++ b/test/integration/Android/Device/AuthenticationTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; @@ -7,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Android.Device { public class AuthenticationTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -15,7 +16,7 @@ public void BeforeAll() var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Device/HideKeyboardTestCase.cs b/test/integration/Android/Device/HideKeyboardTestCase.cs index d9970b0ca..621e8638a 100644 --- a/test/integration/Android/Device/HideKeyboardTestCase.cs +++ b/test/integration/Android/Device/HideKeyboardTestCase.cs @@ -1,13 +1,14 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android.Device.Keys { class HideKeyboardTestCase { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -16,7 +17,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Device/KeyPressTest.cs b/test/integration/Android/Device/KeyPressTest.cs index 727e8995c..4ada42c56 100644 --- a/test/integration/Android/Device/KeyPressTest.cs +++ b/test/integration/Android/Device/KeyPressTest.cs @@ -8,14 +8,16 @@ namespace Appium.Net.Integration.Tests.Android.Device.Keys { class KeyPressTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() { - var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); + var capabilities = Env.ServerIsRemote() + ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) + : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Device/NetworkTests.cs b/test/integration/Android/Device/NetworkTests.cs index d57b1aa4e..badaff74f 100644 --- a/test/integration/Android/Device/NetworkTests.cs +++ b/test/integration/Android/Device/NetworkTests.cs @@ -1,6 +1,7 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; @@ -9,14 +10,14 @@ namespace Appium.Net.Integration.Tests.Android.Device { internal class NetworkTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; [OneTimeSetUp] public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); @@ -31,7 +32,7 @@ public void TearDown() [Test] public void CanToggleDataTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; androidDriver.ToggleData(); androidDriver.ToggleData(); @@ -40,7 +41,7 @@ public void CanToggleDataTest() [Test] public void CanToggleAirplaneModeTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; androidDriver.ToggleAirplaneMode(); @@ -53,7 +54,7 @@ public void CanToggleAirplaneModeTest() [Test] public void CanToggleWifiTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; var beforeToggleConnectionType = androidDriver.ConnectionType; androidDriver.ToggleWifi(); @@ -66,7 +67,7 @@ public void CanToggleWifiTest() [Test] public void CanMakeGsmCallTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.Multiple(() => { @@ -80,7 +81,7 @@ public void CanMakeGsmCallTest() [Test] public void CanSetGsmSignalStrengthTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.Multiple(() => { @@ -95,7 +96,7 @@ public void CanSetGsmSignalStrengthTest() [Test] public void CanSetGsmVoiceStateTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.Multiple(() => { @@ -118,7 +119,7 @@ public void CanSetGsmVoiceStateTest() [Test] public void CanSendSmsTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.DoesNotThrow(() => androidDriver.SendSms("5551234567", "Hey lol")); } diff --git a/test/integration/Android/Device/PerformanceDataTests.cs b/test/integration/Android/Device/PerformanceDataTests.cs index e1be68037..aec54973b 100644 --- a/test/integration/Android/Device/PerformanceDataTests.cs +++ b/test/integration/Android/Device/PerformanceDataTests.cs @@ -1,6 +1,7 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; @@ -9,7 +10,7 @@ namespace Appium.Net.Integration.Tests.Android.Device { internal class PerformanceDataTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; @@ -17,7 +18,7 @@ internal class PerformanceDataTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); @@ -32,14 +33,14 @@ public void TearDown() [Test] public void GetPerformanceDataTypesTest() { - var androidDriver = _driver as AndroidDriver; + var androidDriver = _driver as AndroidDriver; Assert.IsNotNull(androidDriver.GetPerformanceDataTypes()); } [Test] public void GetPerformanceDataTest() { - var androidDriver = _driver as AndroidDriver; + var androidDriver = _driver as AndroidDriver; var packageName = androidDriver?.CurrentPackage; Assert.Multiple(() => diff --git a/test/integration/Android/Device/SystemTests.cs b/test/integration/Android/Device/SystemTests.cs index 951d5c179..3f1d89d2b 100644 --- a/test/integration/Android/Device/SystemTests.cs +++ b/test/integration/Android/Device/SystemTests.cs @@ -1,6 +1,7 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -8,14 +9,14 @@ namespace Appium.Net.Integration.Tests.Android.Device { internal class SystemTests { - private AppiumDriver _driver; + private AppiumDriver _driver; private AppiumOptions _androidOptions; [OneTimeSetUp] public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get(Apps.androidApiDemos)); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); @@ -30,14 +31,14 @@ public void TearDown() [Test] public void CanGetSystemBarInfoTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.That(androidDriver.GetSystemBars().Count, Is.EqualTo(2)); } [Test] public void CanGetDisplayDensityTest() { - var androidDriver = (AndroidDriver) _driver; + var androidDriver = (AndroidDriver) _driver; Assert.That(androidDriver.GetDisplayDensity(), Is.Not.EqualTo(0)); } } diff --git a/test/integration/Android/ElementTest.cs b/test/integration/Android/ElementTest.cs index a7da9e558..fc8148ec9 100644 --- a/test/integration/Android/ElementTest.cs +++ b/test/integration/Android/ElementTest.cs @@ -9,15 +9,16 @@ namespace Appium.Net.Integration.Tests.Android { public class ElementTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() { - var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); + var capabilities = Env.ServerIsRemote() + ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) + : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } @@ -94,7 +95,7 @@ public void ReplaceValueTest() Assert.AreEqual(originalValue, editElement.Text); - ///// TODO: Implement - editElement.ReplaceValue(replacedValue); + editElement.ReplaceValue(replacedValue); Assert.AreEqual(replacedValue, editElement.Text); } @@ -109,7 +110,7 @@ public void SetImmediateValueTest() var editElement = _driver.FindElementByAndroidUIAutomator("resourceId(\"io.appium.android.apis:id/edit\")"); - ///// TODO: Implement - editElement.SetImmediateValue(value); + editElement.SetImmediateValue(value); Assert.AreEqual(value, editElement.Text); } diff --git a/test/integration/Android/ElementTestEspresso.cs b/test/integration/Android/ElementTestEspresso.cs index 0e23880d5..80b99d5ad 100644 --- a/test/integration/Android/ElementTestEspresso.cs +++ b/test/integration/Android/ElementTestEspresso.cs @@ -8,14 +8,14 @@ namespace Appium.Net.Integration.Tests.Android { public class ElementTestEspresso { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetAndroidEspressoCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/EmulatorDeviceTime.cs b/test/integration/Android/EmulatorDeviceTime.cs index cec25d696..32e4b8e1a 100644 --- a/test/integration/Android/EmulatorDeviceTime.cs +++ b/test/integration/Android/EmulatorDeviceTime.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android { class EmulatorDeviceTime { - private AppiumDriver _driver; + private AppiumDriver _driver; [SetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/FileInteractionTest.cs b/test/integration/Android/FileInteractionTest.cs index 43b28032a..a9109276c 100644 --- a/test/integration/Android/FileInteractionTest.cs +++ b/test/integration/Android/FileInteractionTest.cs @@ -3,13 +3,14 @@ using System.Text; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android { class FileInteractionTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +19,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/IntentAndroidTest.cs b/test/integration/Android/IntentAndroidTest.cs index 56fdea65a..8978d0e23 100644 --- a/test/integration/Android/IntentAndroidTest.cs +++ b/test/integration/Android/IntentAndroidTest.cs @@ -1,12 +1,13 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.Android { class IntentAndroidTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -15,7 +16,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("intentApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("intentApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/LockDeviceTest.cs b/test/integration/Android/LockDeviceTest.cs index 2eb9c40e0..8a57a4c13 100644 --- a/test/integration/Android/LockDeviceTest.cs +++ b/test/integration/Android/LockDeviceTest.cs @@ -6,7 +6,7 @@ namespace Appium.Net.Integration.Tests.Android { class LockDeviceTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [SetUp] public void BeforeAll() @@ -15,7 +15,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/OrientationTest.cs b/test/integration/Android/OrientationTest.cs index d64403702..bdc13a495 100644 --- a/test/integration/Android/OrientationTest.cs +++ b/test/integration/Android/OrientationTest.cs @@ -17,7 +17,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/ScreenRecordingTest.cs b/test/integration/Android/ScreenRecordingTest.cs index a0468f47f..f2f99602c 100644 --- a/test/integration/Android/ScreenRecordingTest.cs +++ b/test/integration/Android/ScreenRecordingTest.cs @@ -10,14 +10,14 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] class ScreenRecordingTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/SearchingTest.cs b/test/integration/Android/SearchingTest.cs index 125bf73e3..2bd3d5fc0 100644 --- a/test/integration/Android/SearchingTest.cs +++ b/test/integration/Android/SearchingTest.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class SearchingTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -18,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Session/GeolocationTests.cs b/test/integration/Android/Session/GeolocationTests.cs index fd32be5f9..5e5237c47 100644 --- a/test/integration/Android/Session/GeolocationTests.cs +++ b/test/integration/Android/Session/GeolocationTests.cs @@ -8,7 +8,7 @@ namespace Appium.Net.Integration.Tests.Android.Session.Geolocation [TestFixture] internal class GeolocationTests { - private AppiumDriver _driver; + private AppiumDriver _driver; [SetUp] public void BeforeAll() @@ -17,7 +17,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/Session/LogTests.cs b/test/integration/Android/Session/LogTests.cs index 982cacf29..a865ae682 100644 --- a/test/integration/Android/Session/LogTests.cs +++ b/test/integration/Android/Session/LogTests.cs @@ -21,7 +21,7 @@ internal class LogTests public void SetUp() { _androidOptions = Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - _driver = new AndroidDriver( + _driver = new AndroidDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _androidOptions); } @@ -91,7 +91,7 @@ public void CanCaptureBugReportTest() Assert.That(match.Success, Is.True, nameof(match.Success)); bugReportLogPath = match.Value; - var bugReportLogByteArray = ((AndroidDriver) _driver).PullFile(bugReportLogPath); + var bugReportLogByteArray = ((AndroidDriver) _driver).PullFile(bugReportLogPath); Assert.That(bugReportLogByteArray.Length, Is.GreaterThan(1)); } } diff --git a/test/integration/Android/SessionDetailTest.cs b/test/integration/Android/SessionDetailTest.cs index 2ecc3024f..29dec5a7a 100644 --- a/test/integration/Android/SessionDetailTest.cs +++ b/test/integration/Android/SessionDetailTest.cs @@ -1,6 +1,7 @@ using System; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; @@ -10,7 +11,7 @@ namespace Appium.Net.Integration.Tests.Android public class SessionDetailTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -19,7 +20,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/SessionTest.cs b/test/integration/Android/SessionTest.cs index 4f2cc5592..81cdd3ff1 100644 --- a/test/integration/Android/SessionTest.cs +++ b/test/integration/Android/SessionTest.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android { class SessionTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Android/SettingTest.cs b/test/integration/Android/SettingTest.cs index 57774d877..d38e2d846 100644 --- a/test/integration/Android/SettingTest.cs +++ b/test/integration/Android/SettingTest.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Android.Enums; @@ -8,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Android { public class SettingTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -17,7 +18,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } diff --git a/test/integration/Android/TouchActionTest.cs b/test/integration/Android/TouchActionTest.cs index f26cd83d6..d5ed1cd4e 100644 --- a/test/integration/Android/TouchActionTest.cs +++ b/test/integration/Android/TouchActionTest.cs @@ -2,7 +2,7 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; -using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.MultiTouch; @@ -11,7 +11,7 @@ namespace Appium.Net.Integration.Tests.Android [TestFixture] public class TouchActionTest { - private AndroidDriver _driver; + private AndroidDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -20,7 +20,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _driver.CloseApp(); } @@ -50,7 +50,7 @@ public void AfterAll() [Test] public void SimpleTouchActionTestCase() { - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var number1 = els.Count; @@ -65,7 +65,7 @@ public void SimpleTouchActionTestCase() [Test] public void ComplexTouchActionTestCase() { - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var loc1 = els[7].Location; var target = els[1]; var loc2 = target.Location; @@ -78,7 +78,7 @@ public void ComplexTouchActionTestCase() [Test] public void SingleMultiActionTestCase() { - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var loc1 = els[7].Location; var target = els[1]; var loc2 = target.Location; @@ -97,7 +97,7 @@ public void SingleMultiActionTestCase() public void SequentalMultiActionTestCase() { var originalActivity = _driver.CurrentActivity; - IList els = _driver.FindElementsByClassName("android.widget.TextView"); + IList els = _driver.FindElementsByClassName("android.widget.TextView"); var multiTouch = new MultiAction(_driver); var tap1 = new TouchAction(_driver); diff --git a/test/integration/Android/WebviewTest.cs b/test/integration/Android/WebviewTest.cs index 2e9825f8c..92dcd92a9 100644 --- a/test/integration/Android/WebviewTest.cs +++ b/test/integration/Android/WebviewTest.cs @@ -23,7 +23,7 @@ public void BeforeAll() capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppPackage, "io.selendroid.testapp"); capabilities.AddAdditionalAppiumOption(AndroidMobileCapabilityType.AppActivity, ".WebViewActivity"); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index 41f3cc844..e2b89f5b1 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -13,6 +13,8 @@ + + diff --git a/test/integration/IOS/AlertTest.cs b/test/integration/IOS/AlertTest.cs index 1ccc0adae..d8e8c491c 100644 --- a/test/integration/IOS/AlertTest.cs +++ b/test/integration/IOS/AlertTest.cs @@ -8,14 +8,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class AlertTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/AppStringsTest.cs b/test/integration/IOS/AppStringsTest.cs index 49b4983da..53ec4bf9d 100644 --- a/test/integration/IOS/AppStringsTest.cs +++ b/test/integration/IOS/AppStringsTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -7,14 +8,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class AppStringsTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/ClipboardTest.cs b/test/integration/IOS/ClipboardTest.cs index fbdb7abf7..1ece245c9 100644 --- a/test/integration/IOS/ClipboardTest.cs +++ b/test/integration/IOS/ClipboardTest.cs @@ -5,6 +5,7 @@ using System.Text.RegularExpressions; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.iOS; @@ -13,7 +14,7 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture(Category = "Device")] public class ClipboardTest { - private IOSDriver _driver; + private IOSDriver _driver; private const string ClipboardTestString = "Hello Clipboard"; private const string Base64RegexPattern = @"^[a-zA-Z0-9\+/]*={0,2}$"; @@ -24,7 +25,7 @@ public void Setup() capabilities.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/Device/AppTests.cs b/test/integration/IOS/Device/AppTests.cs index 879c06700..27ff69fed 100644 --- a/test/integration/IOS/Device/AppTests.cs +++ b/test/integration/IOS/Device/AppTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; @@ -9,7 +10,7 @@ namespace Appium.Net.Integration.Tests.IOS.Device.App { internal class AppTests { - private IOSDriver _driver; + private IOSDriver _driver; private AppiumOptions _iosOptions; private const string UiCatalogAppTestAppBundleId = "com.example.apple-samplecode.UICatalog"; private const string IosTestAppBundleId = "io.appium.TestApp"; @@ -21,7 +22,7 @@ internal class AppTests public void SetUp() { _iosOptions = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); - _driver = new IOSDriver( + _driver = new IOSDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _iosOptions); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); diff --git a/test/integration/IOS/ElementTest.cs b/test/integration/IOS/ElementTest.cs index 8848b570a..b11de68d8 100644 --- a/test/integration/IOS/ElementTest.cs +++ b/test/integration/IOS/ElementTest.cs @@ -8,14 +8,14 @@ namespace Appium.Net.Integration.Tests.IOS { class ElementTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } @@ -52,7 +52,7 @@ public void FindByByIosUiAutomationTest() public void SetImmediateValueTest() { var slider = _driver.FindElementByClassName("UIASlider"); - ///// TODO: Implement - slider.SetImmediateValue("0%"); + slider.SetImmediateValue("0%"); Assert.AreEqual("0%", slider.GetAttribute("value")); } } diff --git a/test/integration/IOS/LockDeviceTest.cs b/test/integration/IOS/LockDeviceTest.cs index 0efcccc83..14035505f 100644 --- a/test/integration/IOS/LockDeviceTest.cs +++ b/test/integration/IOS/LockDeviceTest.cs @@ -1,19 +1,20 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.IOS { internal class LockDeviceTest { - private IOSDriver _driver; + private IOSDriver _driver; [SetUp] public void TestSetup() { var capabilities = Caps.GetIosCaps(Apps.Get("iosWebviewApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/OrientationTest.cs b/test/integration/IOS/OrientationTest.cs index f23d93027..de0c59937 100644 --- a/test/integration/IOS/OrientationTest.cs +++ b/test/integration/IOS/OrientationTest.cs @@ -15,7 +15,7 @@ public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/ScreenRecordingTest.cs b/test/integration/IOS/ScreenRecordingTest.cs index 434bd2233..1cd4db9db 100644 --- a/test/integration/IOS/ScreenRecordingTest.cs +++ b/test/integration/IOS/ScreenRecordingTest.cs @@ -2,6 +2,7 @@ using System.Threading; using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.IOS @@ -9,14 +10,14 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture] class ScreenRecordingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/ScrollingSearchingTest.cs b/test/integration/IOS/ScrollingSearchingTest.cs index cc9fbb70e..38b28376b 100644 --- a/test/integration/IOS/ScrollingSearchingTest.cs +++ b/test/integration/IOS/ScrollingSearchingTest.cs @@ -7,14 +7,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class ScrollingSearchingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/SearchingClassChainTest.cs b/test/integration/IOS/SearchingClassChainTest.cs index 1ee4b1962..ed99bfa31 100644 --- a/test/integration/IOS/SearchingClassChainTest.cs +++ b/test/integration/IOS/SearchingClassChainTest.cs @@ -7,14 +7,14 @@ namespace Appium.Net.Integration.Tests.IOS { public class SearchingClassChainTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/SearchingTest.cs b/test/integration/IOS/SearchingTest.cs index 185e47a4c..cb62cd56e 100644 --- a/test/integration/IOS/SearchingTest.cs +++ b/test/integration/IOS/SearchingTest.cs @@ -8,7 +8,7 @@ namespace Appium.Net.Integration.Tests.IOS { class SearchingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -22,7 +22,7 @@ public void BeforeAll() capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/Session/LogTests.cs b/test/integration/IOS/Session/LogTests.cs index 664a0cf3b..c36c138dd 100644 --- a/test/integration/IOS/Session/LogTests.cs +++ b/test/integration/IOS/Session/LogTests.cs @@ -20,7 +20,7 @@ internal class LogTests public void SetUp() { _iosOptions = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); - _driver = new IOSDriver( + _driver = new IOSDriver( Env.ServerIsLocal() ? AppiumServers.LocalServiceUri : AppiumServers.RemoteServerUri, _iosOptions); } diff --git a/test/integration/IOS/SettingTest.cs b/test/integration/IOS/SettingTest.cs index 0f225796c..f7cc42f0b 100644 --- a/test/integration/IOS/SettingTest.cs +++ b/test/integration/IOS/SettingTest.cs @@ -1,21 +1,20 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; - +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; namespace Appium.Net.Integration.Tests.iOS { public class SettingTest { - private IOSDriver _driver; + private IOSDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosUICatalogApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/TouchActionTest.cs b/test/integration/IOS/TouchActionTest.cs index 8f22ae2a1..caf0ee735 100644 --- a/test/integration/IOS/TouchActionTest.cs +++ b/test/integration/IOS/TouchActionTest.cs @@ -1,5 +1,6 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; @@ -10,7 +11,7 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture] public class TouchActionTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -24,7 +25,7 @@ public void BeforeAll() capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait= Env.ImplicitTimeoutSec; } diff --git a/test/integration/IOS/WebviewTest.cs b/test/integration/IOS/WebviewTest.cs index 5792939a0..1576fc99a 100644 --- a/test/integration/IOS/WebviewTest.cs +++ b/test/integration/IOS/WebviewTest.cs @@ -10,7 +10,7 @@ namespace Appium.Net.Integration.Tests.IOS [TestFixture] public class WebviewTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() @@ -24,7 +24,7 @@ public void BeforeAll() capabilities.AddAdditionalAppiumOption("tags", new[] {"sample"}); } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Mac/AlertTest.cs b/test/integration/Mac/AlertTest.cs index b25292868..edc691a88 100644 --- a/test/integration/Mac/AlertTest.cs +++ b/test/integration/Mac/AlertTest.cs @@ -8,15 +8,15 @@ namespace Appium.Net.Integration.Tests.Mac { public class FindElementTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [OneTimeSetUp] public void BeforeAll() { var capabilities = new AppiumOptions(); - capabilities.DeviceName = "Mac"; // Requires until Appium 1.15.1 + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "Mac"); // Requires until Appium 1.15.1 var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new MacDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new MacDriver(serverUri, capabilities, Env.InitTimeoutSec); _driver.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs b/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs index b30efc5f0..bb69e0d8a 100644 --- a/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs +++ b/test/integration/PageObjectTests/Android/NativeAppAttributesTest.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class NativeAppAttributesTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksAttributesForNativeAndroidApp _pageObject; [OneTimeSetUp] @@ -21,7 +22,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksAttributesForNativeAndroidApp(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs b/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs index 9dd27373a..5c5decd92 100644 --- a/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs +++ b/test/integration/PageObjectTests/Android/SeleniumAttributesCompatibilityTest.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class SeleniumAttributesCompatibilityTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksSeleniumFindsByCompatibility _pageObject; [OneTimeSetUp] @@ -21,7 +22,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksSeleniumFindsByCompatibility(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs index 0bbed35a4..3b7032224 100644 --- a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs +++ b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix1.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class TestThatChecksAttributeMix1 { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksAttributeMixOnNativeApp1 _pageObject; [OneTimeSetUp] @@ -21,7 +22,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksAttributeMixOnNativeApp1(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs index b90a9510b..ebe54abba 100644 --- a/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs +++ b/test/integration/PageObjectTests/Android/TestThatChecksAttributeMix2.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android [TestFixture] public class TestThatChecksAttributeMix2 { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectChecksAttributeMixOnNativeApp2 _pageObject; [OneTimeSetUp] @@ -21,7 +22,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectChecksAttributeMixOnNativeApp2(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Android/WebViewTest.cs b/test/integration/PageObjectTests/Android/WebViewTest.cs index d29395eab..fc87cfc45 100644 --- a/test/integration/PageObjectTests/Android/WebViewTest.cs +++ b/test/integration/PageObjectTests/Android/WebViewTest.cs @@ -3,6 +3,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Android { public class WebViewTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidWebView _pageObject; [OneTimeSetUp] @@ -21,7 +22,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidWebView(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs b/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs index f5711f9a1..0b7fc7a84 100644 --- a/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs +++ b/test/integration/PageObjectTests/DesktopBrowserCompatibility/DesktopBrowserCompatibilityTest.cs @@ -6,6 +6,7 @@ using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.PageObjects.Attributes; using OpenQA.Selenium.Firefox; +using OpenQA.Selenium.Internal; using SeleniumExtras.PageObjects; namespace Appium.Net.Integration.Tests.PageObjectTests.DesktopBrowserCompatibility diff --git a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs index 4076edcc4..bebb3c118 100644 --- a/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs +++ b/test/integration/PageObjectTests/IOS/NativeAppAttributesTest.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.IOS [TestFixture] public class NativeAppAttributesTest { - private IOSDriver _driver; + private IOSDriver _driver; private IosPageObjectChecksAttributesForNativeIosApp _pageObject; [OneTimeSetUp] @@ -27,7 +28,7 @@ public void BeforeAll() } var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new IosPageObjectChecksAttributesForNativeIosApp(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs b/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs index ff7482d1d..2649de72c 100644 --- a/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs +++ b/test/integration/PageObjectTests/IOS/TestThatChecksAttributeMix.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.IOS [TestFixture] public class TestThatChecksAttributeMix { - private IOSDriver _driver; + private IOSDriver _driver; private IosPageObjectChecksAttributeMixOnNativeApp _pageObject; [OneTimeSetUp] @@ -19,7 +20,7 @@ public void BeforeAll() { var capabilities = Caps.GetIosCaps(Apps.Get("iosTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new IOSDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new IosPageObjectChecksAttributeMixOnNativeApp(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs b/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs index 9da4b6781..37ce45225 100644 --- a/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs +++ b/test/integration/PageObjectTests/NegativeTests/NoSuchElementTestOnAndroid.cs @@ -3,6 +3,7 @@ using Appium.Net.Integration.Tests.helpers; using NUnit.Framework; using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.PageObjects.Attributes; @@ -12,7 +13,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.NegativeTests { public class NoSuchElementTestOnAndroid { - private AndroidDriver _driver; + private AndroidDriver _driver; [FindsBy(How = How.ClassName, Using = "FakeHtmlClass")] [FindsByIOSUIAutomation(Accessibility = "FakeAccebility")] private IWebElement _inconsistentElement1; @@ -33,7 +34,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); PageFactory.InitElements(_driver, this, new AppiumPageObjectMemberDecorator(timeSpan)); } diff --git a/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs b/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs index 655f75778..ec7fb4a05 100644 --- a/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs +++ b/test/integration/PageObjectTests/Other/AndroidJSWebViewTest.cs @@ -3,13 +3,14 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; namespace Appium.Net.Integration.Tests.PageObjectTests.Other { class AndroidJsWebViewTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidJavaScriptTestPageObject _pageObject; [OneTimeSetUp] @@ -19,7 +20,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("selendroidTestApp")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); _pageObject = new AndroidJavaScriptTestPageObject(_driver); _driver.StartActivity("io.selendroid.testapp", ".WebViewActivity"); } diff --git a/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs b/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs index f44a021f8..66e25444d 100644 --- a/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs +++ b/test/integration/PageObjectTests/Other/AndroidTouchActionTest.cs @@ -2,6 +2,7 @@ using Appium.Net.Integration.Tests.helpers; using Appium.Net.Integration.Tests.PageObjects; using NUnit.Framework; +using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.PageObjects; using SeleniumExtras.PageObjects; @@ -11,7 +12,7 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Other [TestFixture] class AndroidTouchActionTest { - private AndroidDriver _driver; + private AndroidDriver _driver; private AndroidPageObjectThatChecksTouchActions _pageObject; [OneTimeSetUp] @@ -21,7 +22,7 @@ public void BeforeAll() ? Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); + _driver = new AndroidDriver(serverUri, capabilities, Env.InitTimeoutSec); var timeSpan = new TimeOutDuration(new TimeSpan(0, 0, 0, 5, 0)); _pageObject = new AndroidPageObjectThatChecksTouchActions(); PageFactory.InitElements(_driver, _pageObject, new AppiumPageObjectMemberDecorator(timeSpan)); diff --git a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs index fde2bf401..273af9546 100644 --- a/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs +++ b/test/integration/PageObjectTests/Windows/WindowsAlarmAppTest.cs @@ -10,17 +10,19 @@ namespace Appium.Net.Integration.Tests.PageObjectTests.Windows { public class WindowsAlarmAppTest { - private AppiumDriver _driver; + private AppiumDriver _driver; [SetUp] public void Setup() { var appCapabilities = new AppiumOptions(); appCapabilities.App = "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"; + appCapabilities.PlatformName ="Windows"; appCapabilities.DeviceName = "WindowsPC"; + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _driver = new WindowsDriver(serverUri, appCapabilities); + _driver = new WindowsDriver(serverUri, appCapabilities); } [TearDown] diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs index c86d48492..6a2abf926 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp1.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using OpenQA.Selenium; +using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; @@ -12,19 +12,19 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -32,7 +32,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -40,7 +40,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -52,7 +52,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -61,7 +61,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp1 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -71,7 +71,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -81,7 +81,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// @@ -95,7 +95,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestFoundByChainedSearchElementProperty { set; get; } + private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true)] @@ -107,7 +107,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty { set; get; } + private IList TestFoundByChainedSearchElementsProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -116,7 +116,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -125,7 +125,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// [FindsByAll] @@ -137,7 +137,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true)] @@ -148,7 +148,7 @@ [FindsByAll] [MobileFindsByAll(Android = true)] [FindsBy(How = How.Id, Using = " //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs index 1e09c8ed0..5fb4333a7 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributeMixOnNativeApp2.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using OpenQA.Selenium; +using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; @@ -13,22 +13,22 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -39,7 +39,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -50,7 +50,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -65,7 +65,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -77,7 +77,7 @@ public class AndroidPageObjectChecksAttributeMixOnNativeApp2 Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -90,7 +90,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -103,7 +103,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// @@ -120,7 +120,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestFoundByChainedSearchElementProperty { set; get; } + private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] @@ -135,7 +135,7 @@ [FindsBySequence] [MobileFindsBySequence(Android = true, IOS = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty { set; get; } + private IList TestFoundByChainedSearchElementsProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -148,7 +148,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -161,7 +161,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// @@ -177,7 +177,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] @@ -191,7 +191,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs index c36579e5f..a52c705bb 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksAttributesForNativeAndroidApp.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using OpenQA.Selenium; +using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; @@ -8,26 +8,26 @@ namespace Appium.Net.Integration.Tests.PageObjects public class AndroidPageObjectChecksAttributesForNativeAndroidApp { [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -40,20 +40,20 @@ public class AndroidPageObjectChecksAttributesForNativeAndroidApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestMultipleFindByElementProperty + private IMobileElement TestMultipleFindByElementProperty { set => _testMultipleFindByElementProperty = value; - get => (IWebElement) _testMultipleFindByElementProperty; + get => (IMobileElement) _testMultipleFindByElementProperty; } [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty + private IList MultipleFindByElementsProperty { set => _testMultipleFindByElementsProperty = value; - get => (IList) _testMultipleFindByElementsProperty; + get => (IList) _testMultipleFindByElementsProperty; } [MobileFindsBySequence(Android = true)] @@ -61,14 +61,14 @@ private IList MultipleFindByElementsProperty Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [MobileFindsBySequence(Android = true)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/content\")", Priority = 1)] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// private object _foundByChainedSearchElementProperty; @@ -82,10 +82,10 @@ private IList MultipleFindByElementsProperty [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestFoundByChainedSearchElementProperty + private IMobileElement TestFoundByChainedSearchElementProperty { set => _foundByChainedSearchElementProperty = value; - get => (IWebElement) _foundByChainedSearchElementProperty; + get => (IMobileElement) _foundByChainedSearchElementProperty; } [MobileFindsBySequence(Android = true)] @@ -94,23 +94,23 @@ private IWebElement TestFoundByChainedSearchElementProperty [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/list\")", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty + private IList TestFoundByChainedSearchElementsProperty { set => _foundByChainedSearchElementsProperty = value; - get => (IList) _foundByChainedSearchElementsProperty; + get => (IList) _foundByChainedSearchElementsProperty; } [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(Android = true)] [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// private object _matchedToAllLocatorsElementProperty; @@ -123,10 +123,10 @@ private IList TestFoundByChainedSearchElementsProperty //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement TestMatchedToAllLocatorsElementProperty + private IMobileElement TestMatchedToAllLocatorsElementProperty { set => _matchedToAllLocatorsElementProperty = value; - get => (IWebElement) _matchedToAllLocatorsElementProperty; + get => (IMobileElement) _matchedToAllLocatorsElementProperty; } [MobileFindsByAll(Android = true)] @@ -134,10 +134,10 @@ private IWebElement TestMatchedToAllLocatorsElementProperty //[FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty + private IList TestMatchedToAllLocatorsElementsProperty { set => _matchedToAllLocatorsElementsProperty = value; - get => (IList) _matchedToAllLocatorsElementsProperty; + get => (IList) _matchedToAllLocatorsElementsProperty; } ////////////////////////////////////////////////////////////////////////// diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs b/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs index 6bc3b850d..46f79c109 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSelendroidModeOnNativeApp.cs @@ -94,7 +94,7 @@ public class AndroidPageObjectChecksSelendroidModeOnNativeApp //[FindsByAndroidUIAutomator(ID = "waitingButtonTest", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(Selendroid = true)] [FindsBySelendroid(LinkText = "Press to throw unhandled exception", Priority = 1)] diff --git a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs index ea6071706..835e07e6c 100644 --- a/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs +++ b/test/integration/PageObjects/AndroidPageObjectChecksSeleniumFindsByCompatibility.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using OpenQA.Selenium; +using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Interfaces; using SeleniumExtras.PageObjects; @@ -22,26 +23,26 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility ///////////////////////////////////////////////////////////////// [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IWebElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IWebElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.ClassName, Using = "android.widget.TextView")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IWebElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -49,22 +50,22 @@ public class AndroidPageObjectChecksSeleniumFindsByCompatibility [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IWebElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Name, Using = "FakeName", Priority = 1)] [FindsBy(How = How.Id, Using = "FakeId", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IWebElement _foundByChainedSearchElement; + private IMobileElement _foundByChainedSearchElement; [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList _foundByChainedSearchElements; + private IList _foundByChainedSearchElements; ///////////////////////////////////////////////////////////////// @@ -72,25 +73,25 @@ [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IWebElement TestFoundByChainedSearchElementProperty { set; get; } + private IMobileElement TestFoundByChainedSearchElementProperty { set; get; } [FindsBySequence] [FindsBy(How = How.Id, Using = "android:id/content", Priority = 1)] [FindsBy(How = How.Id, Using = "android:id/list", Priority = 2)] [FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 3)] - private IList TestFoundByChainedSearchElementsProperty { set; get; } + private IList TestFoundByChainedSearchElementsProperty { set; get; } [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// [FindsByAll] @@ -98,14 +99,14 @@ [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [FindsBy(How = How.Id, Using = "android:id/text1", Priority = 1)] //[FindsBy(How = How.ClassName, Using = "android.widget.TextView", Priority = 2)] //Equals method of WebElement is not consistent for mobile apps //The second selector will be commented till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } public string GetElementText() { diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs index 7915ab59a..7b6be887e 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributeMixOnNativeApp.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; +using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; -using OpenQA.Selenium; namespace Appium.Net.Integration.Tests.PageObjects { @@ -12,22 +12,22 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement _testMobileElement; + private IMobileElement _testMobileElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList _testMobileElements; + private IList _testMobileElements; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IWebElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/text1\")")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -38,7 +38,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -49,7 +49,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp [FindsByAndroidUIAutomator(AndroidUIAutomator = "new UiSelector().resourceId(\"android:id/fakeId\")", Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList _testMultipleElements; + private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -64,7 +64,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IWebElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] [FindsBy(How = How.ClassName, Using = "FakeHTMLClass", Priority = 2)] @@ -76,7 +76,7 @@ public class IosPageObjectChecksAttributeMixOnNativeApp Priority = 1)] [FindsByAndroidUIAutomator(ID = "FakeId", Priority = 2)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -87,7 +87,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] [FindsBy(How = How.Id, Using = "FakeHTMLid", Priority = 1)] @@ -98,7 +98,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// [FindsByAll] @@ -111,7 +111,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] @@ -123,7 +123,7 @@ [FindsByAll] [MobileFindsByAll(Android = true, IOS = true)] //The second selector won't be added till the problem is worked out [FindsByAndroidUIAutomator(ID = "android:id/text1", Priority = 1)] [FindsByAndroidUIAutomator(ClassName = "android.widget.TextView", Priority = 1)] - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs index 1f4c488a6..fea7aad3f 100644 --- a/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs +++ b/test/integration/PageObjects/IOSPageObjectChecksAttributesForNativeIOSApp.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; +using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects.Attributes; -using OpenQA.Selenium; namespace Appium.Net.Integration.Tests.PageObjects { @@ -10,24 +10,24 @@ public class IosPageObjectChecksAttributesForNativeIosApp ///////////////////////////////////////////////////////////////// [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IWebElement _testMobileElement; + private IMobileElement _testMobileElement; - [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] private IList _testMobileElements; + [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] private IList _testMobileElements; [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IWebElement TestMobileElement { set; get; } + private IMobileElement TestMobileElement { set; get; } [FindsByIOSUIAutomation(IosUIAutomation = ".elements()[0]")] - private IList TestMobileElements { set; get; } + private IList TestMobileElements { set; get; } [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IWebElement _testMultipleElement; + private IMobileElement _testMultipleElement; [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] - [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] private IList _testMultipleElements; + [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] private IList _testMultipleElements; ///////////////////////////////////////////////////////////////// @@ -35,22 +35,22 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IWebElement TestMultipleFindByElementProperty { set; get; } + private IMobileElement TestMultipleFindByElementProperty { set; get; } [FindsByIOSUIAutomation(ID = "FakeID", Priority = 1)] [FindsByIOSUIAutomation(ClassName = "UIAUAIFakeClass", Priority = 2)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 3)] - private IList MultipleFindByElementsProperty { set; get; } + private IList MultipleFindByElementsProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IWebElement _matchedToAllLocatorsElement; + private IMobileElement _matchedToAllLocatorsElement; [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IList _matchedToAllLocatorsElements; + private IList _matchedToAllLocatorsElements; ///////////////////////////////////////////////////////////////// @@ -58,13 +58,13 @@ public class IosPageObjectChecksAttributesForNativeIosApp [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IWebElement TestMatchedToAllLocatorsElementProperty { set; get; } + private IMobileElement TestMatchedToAllLocatorsElementProperty { set; get; } [MobileFindsByAll(IOS = true)] [FindsByIOSUIAutomation(ClassName = "UIAButton", Priority = 1)] //Equals method of WebElement is not consistent for mobile apps //The second selector won't be added till the problem is worked out - private IList TestMatchedToAllLocatorsElementsProperty { set; get; } + private IList TestMatchedToAllLocatorsElementsProperty { set; get; } ////////////////////////////////////////////////////////////////////////// public string GetMobileElementText() diff --git a/test/integration/PageObjects/WindowsAlarmApp.cs b/test/integration/PageObjects/WindowsAlarmApp.cs index 5d9b47b60..7b7c82178 100644 --- a/test/integration/PageObjects/WindowsAlarmApp.cs +++ b/test/integration/PageObjects/WindowsAlarmApp.cs @@ -1,5 +1,6 @@ using OpenQA.Selenium; using OpenQA.Selenium.Appium; +using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.PageObjects; using OpenQA.Selenium.Appium.PageObjects.Attributes; using SeleniumExtras.PageObjects; @@ -12,35 +13,35 @@ namespace Appium.Net.Integration.Tests.PageObjects public class WindowsAlarmApp { [FindsByWindowsAutomation(Accessibility = "AlarmButton")] - private IWebElement _alarmTab; + private IMobileElement _alarmTab; [FindsByWindowsAutomation(Accessibility = "ClockButton")] - private IWebElement _clockTab; + private IMobileElement _clockTab; [FindsByWindowsAutomation(Accessibility = "WorldClockItemGrid")] - private IWebElement _worldClock; + private IMobileElement _worldClock; [FindsByWindowsAutomation(Accessibility = "AddAlarmButton")] - private IWebElement _addAlarmButton; + private IMobileElement _addAlarmButton; [FindsByWindowsAutomation(Accessibility = "AlarmNameTextBox")] - private IWebElement _alarmNameTextBox; + private IMobileElement _alarmNameTextBox; [FindsByWindowsAutomation(Accessibility = "PeriodLoopingSelector")] - private IWebElement _periodSelector; + private IMobileElement _periodSelector; [FindsByWindowsAutomation(Accessibility = "HourLoopingSelector")] - private IWebElement _hourSelector; + private IMobileElement _hourSelector; [FindsByWindowsAutomation(Accessibility = "MinuteLoopingSelector")] - private IWebElement _minuteSelector; + private IMobileElement _minuteSelector; [FindsByWindowsAutomation(Accessibility = "AlarmSaveButton")] - private IWebElement _saveButton; + private IMobileElement _saveButton; - private AppiumDriver _driver; + private AppiumDriver _driver; - public WindowsAlarmApp(AppiumDriver driver, TimeOutDuration timeout) + public WindowsAlarmApp(AppiumDriver driver, TimeOutDuration timeout) { _driver = driver; @@ -118,12 +119,8 @@ public void DeleteAlarmWithName(string alarmName) { var alarmEntry = _driver.FindElementByName(alarmName); - //// TODO: Implement - _driver.Mouse.ContextClick(alarmEntry.Coordinates); - /// or new Actions(_driver).ContextClick(alarmEntry).Perform(); - //// Will not work until context clicks get added to - ///https://github.com/appium/appium-windows-driver - ///or WinAppDriver becomes W3C compliant - + /////// TODO - Implement for Appium + ////// _driver.Mouse.ContextClick(alarmEntry.Coordinates); _driver.FindElementByName("Delete").Click(); } } diff --git a/test/integration/Properties/Resources.Designer.cs b/test/integration/Properties/Resources.Designer.cs index 4ff9675a6..36e866fe7 100644 --- a/test/integration/Properties/Resources.Designer.cs +++ b/test/integration/Properties/Resources.Designer.cs @@ -9,9 +9,6 @@ //------------------------------------------------------------------------------ namespace Appium.Net.Integration.Tests.Properties { - using System; - - /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -19,7 +16,7 @@ namespace Appium.Net.Integration.Tests.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { diff --git a/test/integration/ServerTests/StartingAppLocallyTest.cs b/test/integration/ServerTests/StartingAppLocallyTest.cs index 5246b9bdc..4e1872b5e 100644 --- a/test/integration/ServerTests/StartingAppLocallyTest.cs +++ b/test/integration/ServerTests/StartingAppLocallyTest.cs @@ -19,10 +19,10 @@ public void StartingAndroidAppWithCapabilitiesOnlyTest() var capabilities = Caps.GetAndroidUIAutomatorCaps(app); - AndroidDriver driver = null; + AndroidDriver driver = null; try { - driver = new AndroidDriver(capabilities); + driver = new AndroidDriver(capabilities); driver.CloseApp(); } finally @@ -43,10 +43,10 @@ public void StartingAndroidAppWithCapabilitiesAndServiceTest() .AddArguments(GeneralOptionList.OverrideSession()).AddArguments(GeneralOptionList.StrictCaps()); var builder = new AppiumServiceBuilder().WithArguments(argCollector); - AndroidDriver driver = null; + AndroidDriver driver = null; try { - driver = new AndroidDriver(builder, capabilities); + driver = new AndroidDriver(builder, capabilities); driver.CloseApp(); } finally @@ -72,10 +72,10 @@ public void StartingAndroidAppWithCapabilitiesOnTheServerSideTest() var argCollector = new OptionCollector().AddCapabilities(serverCapabilities); var builder = new AppiumServiceBuilder().WithArguments(argCollector); - AndroidDriver driver = null; + AndroidDriver driver = null; try { - driver = new AndroidDriver(builder, clientCapabilities); + driver = new AndroidDriver(builder, clientCapabilities); driver.CloseApp(); } finally @@ -91,10 +91,10 @@ public void StartingIosAppWithCapabilitiesOnlyTest() var capabilities = Caps.GetIosCaps(app); - IOSDriver driver = null; + IOSDriver driver = null; try { - driver = new IOSDriver(capabilities, Env.InitTimeoutSec); + driver = new IOSDriver(capabilities, Env.InitTimeoutSec); driver.CloseApp(); } finally @@ -114,10 +114,10 @@ public void StartingIosAppWithCapabilitiesAndServiseTest() .AddArguments(GeneralOptionList.OverrideSession()).AddArguments(GeneralOptionList.StrictCaps()); var builder = new AppiumServiceBuilder().WithArguments(argCollector); - IOSDriver driver = null; + IOSDriver driver = null; try { - driver = new IOSDriver(builder, capabilities, Env.InitTimeoutSec); + driver = new IOSDriver(builder, capabilities, Env.InitTimeoutSec); driver.CloseApp(); } finally @@ -133,19 +133,19 @@ public void CheckThatServiseIsNotRunWhenTheCreatingOfANewSessionIsFailed() ? //it will be a cause of error Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")) : Caps.GetAndroidUIAutomatorCaps(Apps.Get("androidApiDemos")); - capabilities.DeviceName = "iPhone Simulator"; + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "iPhone Simulator"); capabilities.AddAdditionalAppiumOption(MobileCapabilityType.PlatformName, MobilePlatform.IOS); var builder = new AppiumServiceBuilder(); var service = builder.Build(); service.Start(); - IOSDriver driver = null; + IOSDriver driver = null; try { try { - driver = new IOSDriver(service, capabilities); + driver = new IOSDriver(service, capabilities); } catch (Exception e) { diff --git a/test/integration/Windows/ClickElementTest.cs b/test/integration/Windows/ClickElementTest.cs index 4436572c3..95cbdb6a0 100644 --- a/test/integration/Windows/ClickElementTest.cs +++ b/test/integration/Windows/ClickElementTest.cs @@ -22,25 +22,25 @@ namespace Appium.Net.Integration.Tests.Windows { public class ClickElementTest { - private WindowsDriver _calculatorSession; - protected static IWebElement CalculatorResult; + private WindowsDriver _calculatorSession; + protected static WebElement CalculatorResult; [OneTimeSetUp] public void BeforeAll() { - var appCapabilities = new AppiumOptions - { - App = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" - }; + var appCapabilities = new AppiumOptions(); + appCapabilities.App = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"; + appCapabilities.DeviceName = "WindowsPC"; + appCapabilities.PlatformName ="Windows"; var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _calculatorSession = new WindowsDriver(serverUri, appCapabilities, + _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); _calculatorSession.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; _calculatorSession.FindElementByName("Clear").Click(); _calculatorSession.FindElementByName("Seven").Click(); - CalculatorResult = _calculatorSession.FindElementByName("Display is 7"); + CalculatorResult = _calculatorSession.FindElementByName("Display is 7") as WebElement; Assert.IsNotNull(CalculatorResult); } diff --git a/test/integration/Windows/ImagesComparisonTest.cs b/test/integration/Windows/ImagesComparisonTest.cs index d2afd15dc..9c64d3baf 100644 --- a/test/integration/Windows/ImagesComparisonTest.cs +++ b/test/integration/Windows/ImagesComparisonTest.cs @@ -9,7 +9,7 @@ namespace Appium.Net.Integration.Tests.Windows { public class ImagesComparisonTest { - private WindowsDriver _calculatorSession; + private WindowsDriver _calculatorSession; protected static WebElement CalculatorResult; [OneTimeSetUp] @@ -17,8 +17,11 @@ public void BeforeAll() { var appCapabilities = new AppiumOptions(); appCapabilities.App = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"; + appCapabilities.DeviceName = "WindowsPC"; + appCapabilities.PlatformName ="Windows"; + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; - _calculatorSession = new WindowsDriver(serverUri, appCapabilities, + _calculatorSession = new WindowsDriver(serverUri, appCapabilities, Env.InitTimeoutSec); _calculatorSession.Manage().Timeouts().ImplicitWait = Env.ImplicitTimeoutSec; } diff --git a/test/integration/Windows/MultiSelectControlTest.cs b/test/integration/Windows/MultiSelectControlTest.cs index d160d8d1d..0a1cd52d5 100644 --- a/test/integration/Windows/MultiSelectControlTest.cs +++ b/test/integration/Windows/MultiSelectControlTest.cs @@ -26,9 +26,9 @@ namespace Appium.Net.Integration.Tests.Windows { public class MultiSelectControlTest { - private WindowsDriver _driver; - protected static WindowsDriver AlarmClockSession; - protected static WindowsDriver DesktopSession; + private WindowsDriver _driver; + protected static WindowsDriver AlarmClockSession; + protected static WindowsDriver DesktopSession; [OneTimeSetUp] public void Setup() @@ -36,11 +36,13 @@ public void Setup() // Launch the AlarmClock app var appCapabilities = new AppiumOptions(); appCapabilities.App = "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App"; + appCapabilities.PlatformName ="Windows"; appCapabilities.DeviceName = "WindowsPC"; + var serverUri = Env.ServerIsRemote() ? AppiumServers.RemoteServerUri : AppiumServers.LocalServiceUri; AlarmClockSession = - new WindowsDriver(serverUri, appCapabilities); + new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(AlarmClockSession); AlarmClockSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2); @@ -51,7 +53,7 @@ public void Setup() desktopCapabilities.DeviceName = "WindowsPC"; DesktopSession = - new WindowsDriver(serverUri, desktopCapabilities); + new WindowsDriver(serverUri, desktopCapabilities); Assert.IsNotNull(DesktopSession); // Ensure app is started in the default main page @@ -68,12 +70,8 @@ public void OneTimeTearDown() var alarmEntries = AlarmClockSession.FindElementsByName("Windows Application Driver Test Alarm"); foreach (var alarmEntry in alarmEntries) { - ///// TODO: Implement - AlarmClockSession.Mouse.ContextClick(alarmEntry.Coordinates); - /// or new Actions(AlarmClockSession).ContextClick(alarmEntry).Perform(); - //// Will not work until context clicks get added to - ///https://github.com/appium/appium-windows-driver - ///or WinAppDriver becomes W3C compliant - + /////// TODO - Implement for Appium + //// AlarmClockSession.Mouse.ContextClick(alarmEntry.Coordinates); AlarmClockSession.FindElementByName("Delete").Click(); } @@ -109,14 +107,12 @@ public void SwitchToWorldClockTab() public string ReadLocalTime() { var localTimeText = ""; - IWebElement worldClockPivotItem = + AppiumWebElement worldClockPivotItem = AlarmClockSession.FindElementByAccessibilityId("ClockButton"); if (worldClockPivotItem != null) { - - var source = AlarmClockSession.PageSource; localTimeText = AlarmClockSession.FindElementByAccessibilityId("WorldClockItemGrid").Text; - var timeStrings = localTimeText.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + var timeStrings = localTimeText.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); foreach (var timeString in timeStrings) { @@ -148,7 +144,7 @@ public void AddAlarm(string timeText) AlarmClockSession.FindElementByAccessibilityId("AlarmNameTextBox").Clear(); AlarmClockSession.FindElementByAccessibilityId("AlarmNameTextBox") .SendKeys("Windows Application Driver Test Alarm"); - IWebElement periodSelector = null; + WindowsElement periodSelector = null; try { periodSelector = AlarmClockSession.FindElementByAccessibilityId("PeriodLoopingSelector"); @@ -170,7 +166,7 @@ public void DismissNotification() { try { - IWebElement newNotification = DesktopSession.FindElementByName("New notification"); + AppiumWebElement newNotification = DesktopSession.FindElementByName("New notification"); Assert.IsTrue(newNotification.FindElementByAccessibilityId("MessageText").Text .Contains("Windows Application Driver Test Alarm")); newNotification.FindElementByName("Dismiss").Click(); @@ -185,7 +181,7 @@ private static void ReturnToMainPage() // Try to return to main page in case application is started in nested view try { - IWebElement backButton = null; + AppiumWebElement backButton = null; do { backButton = AlarmClockSession.FindElementByAccessibilityId("Back"); diff --git a/test/integration/Windows/PentTest.cs b/test/integration/Windows/PentTest.cs index d1d2c81e6..a58eab9da 100644 --- a/test/integration/Windows/PentTest.cs +++ b/test/integration/Windows/PentTest.cs @@ -29,20 +29,20 @@ // up to OpenQA.Selenium.Interactions and this alias can simply be removed. using PointerInputDevice = OpenQA.Selenium.Appium.Interactions.PointerInputDevice; using NUnit.Framework; -using Appium.Net.Integration.Tests.helpers; using OpenQA.Selenium.Appium; +using Appium.Net.Integration.Tests.helpers; namespace Appium.Net.Integration.Tests.Windows { public class PenTest : StickyNotesTest { - private WindowsDriver newStickyNoteSession; - private IWebElement inkCanvas; + private WindowsDriver newStickyNoteSession; + private WindowsElement inkCanvas; [Test] public void DrawBasicSquare() { - Point canvasCoordinate = (inkCanvas as WebElement).Coordinates.LocationInViewport; + Point canvasCoordinate = inkCanvas.Coordinates.LocationInViewport; Size squareSize = new Size(inkCanvas.Size.Width * 3 / 5, inkCanvas.Size.Height * 3 / 5); Point A = new Point(canvasCoordinate.X + inkCanvas.Size.Width / 5, canvasCoordinate.Y + inkCanvas.Size.Height / 5); @@ -89,7 +89,7 @@ public void DrawBasicSquare() [Test] public void DrawBasicSquareWithExtraAttributes() { - Point canvasCoordinate = (inkCanvas as WebElement).Coordinates.LocationInViewport; + Point canvasCoordinate = inkCanvas.Coordinates.LocationInViewport; Size squareSize = new Size(inkCanvas.Size.Width * 3 / 5, inkCanvas.Size.Height * 3 / 5); Point A = new Point(canvasCoordinate.X + inkCanvas.Size.Width / 5, canvasCoordinate.Y + inkCanvas.Size.Height / 5); @@ -225,7 +225,7 @@ public void CreateNewStickyNote() Assert.AreEqual(openedStickyNotesWindowsBefore.Count + 1, openedStickyNotesWindowsAfter.Count); // Identify the newly opened Sticky Note by removing the previously opened ones from the list - List openedStickyNotes = new List(openedStickyNotesWindowsAfter); + List openedStickyNotes = new List(openedStickyNotesWindowsAfter); foreach (var preExistingStickyNote in openedStickyNotesWindowsBefore) { openedStickyNotes.Remove(preExistingStickyNote); @@ -238,7 +238,7 @@ public void CreateNewStickyNote() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalAppiumOption("appTopLevelWindow", newStickyNoteWindowHandle); appCapabilities.DeviceName = "WindowsPC"; - newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); + newStickyNoteSession = new WindowsDriver(serverUri, appCapabilities); Assert.IsNotNull(newStickyNoteSession); // Resize and re-position the Sticky Notes window we are working with @@ -259,7 +259,8 @@ public void DeleteStickyNote() if (newStickyNoteSession != null) { // Create a new Sticky Note by pressing Ctrl + N - new Actions(newStickyNoteSession).SendKeys(Keys.Control + "d" + Keys.Control).Perform(); + /////// TODO - Implement for Appium + //// newStickyNoteSession.Keyboard.SendKeys(Keys.Control + "d" + Keys.Control); Thread.Sleep(TimeSpan.FromSeconds(2)); try diff --git a/test/integration/Windows/StickyNotesTest.cs b/test/integration/Windows/StickyNotesTest.cs index 63cb06687..573c5bfaf 100644 --- a/test/integration/Windows/StickyNotesTest.cs +++ b/test/integration/Windows/StickyNotesTest.cs @@ -26,7 +26,7 @@ public class StickyNotesTest { private const string StickyNotesAppId = @"Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App"; - protected WindowsDriver session; + protected WindowsDriver session; [OneTimeSetUp] public void BeforeAll() @@ -43,7 +43,7 @@ public void BeforeAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.App = StickyNotesAppId; appCapabilities.DeviceName = "WindowsPC"; - session = new WindowsDriver(serverUri, appCapabilities); + session = new WindowsDriver(serverUri, appCapabilities); } catch { @@ -52,15 +52,17 @@ public void BeforeAll() // session and create a new session based on the located top window pane. AppiumOptions desktopCapabilities = new AppiumOptions(); desktopCapabilities.App = "Root"; - var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); + desktopCapabilities.DeviceName = "WindowsPC"; + var desktopSession = new WindowsDriver(serverUri, desktopCapabilities); var StickyNotesTopLevelWindow = desktopSession.FindElementByClassName("Modern_Sticky_Top_Window"); var StickyNotesTopLevelWindowHandle = StickyNotesTopLevelWindow.GetAttribute("NativeWindowHandle"); StickyNotesTopLevelWindowHandle = (int.Parse(StickyNotesTopLevelWindowHandle)).ToString("x"); // Convert to Hex AppiumOptions appCapabilities = new AppiumOptions(); - appCapabilities.AddAdditionalAppiumOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); - session = new WindowsDriver(serverUri, appCapabilities); + appCapabilities.AddAdditionalOption("appTopLevelWindow", StickyNotesTopLevelWindowHandle); + appCapabilities.DeviceName = "WindowsPC"; + session = new WindowsDriver(serverUri, appCapabilities); } Assert.IsNotNull(session); @@ -89,7 +91,8 @@ public void AfterAll() AppiumOptions appCapabilities = new AppiumOptions(); appCapabilities.AddAdditionalAppiumOption("appTopLevelWindow", newStickyNoteWindowHandle); - var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); + appCapabilities.DeviceName = "WindowsPC"; + var stickyNoteSession = new WindowsDriver(serverUri, appCapabilities); stickyNoteSession.Close(); } } diff --git a/test/integration/helpers/Caps.cs b/test/integration/helpers/Caps.cs index 181102f6d..d328200a0 100644 --- a/test/integration/helpers/Caps.cs +++ b/test/integration/helpers/Caps.cs @@ -8,10 +8,10 @@ public class Caps public static AppiumOptions GetIosCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AutomationName = AutomationName.iOSXcuiTest; - capabilities.DeviceName = "iPhone X"; - capabilities.PlatformVersion = "12.0"; - capabilities.App = app; + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.AutomationName, AutomationName.iOSXcuiTest); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "iPhone X"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.PlatformVersion, "12.0"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.App, app); capabilities.AddAdditionalAppiumOption(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); return capabilities; @@ -20,18 +20,18 @@ public static AppiumOptions GetIosCaps(string app) public static AppiumOptions GetAndroidUIAutomatorCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AutomationName = AutomationName.AndroidUIAutomator2; - capabilities.DeviceName = "Android Emulator"; - capabilities.App = app; + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.AutomationName, AutomationName.AndroidUIAutomator2); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "Android Emulator"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.App, app); return capabilities; } public static AppiumOptions GetAndroidEspressoCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AutomationName = AutomationName.AndroidEspresso; - capabilities.DeviceName = "Android Emulator"; - capabilities.App = app; + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.AutomationName, AutomationName.AndroidEspresso); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "Android Emulator"); + capabilities.AddAdditionalAppiumOption(MobileCapabilityType.App, app); return capabilities; } } From 0cf8a40edb6216c5a1553172c975a8dc1c904850 Mon Sep 17 00:00:00 2001 From: Troy W Date: Mon, 11 Oct 2021 14:21:52 -0500 Subject: [PATCH 16/21] Update to work with upcoming RC4 --- src/Appium.Net/Appium.Net.csproj | 5 ++--- src/Appium.Net/Appium/AppiumDriver.cs | 1 + .../Appium.Net.Integration.Tests.csproj | 3 --- test/integration/helpers/Caps.cs | 20 +++++++++---------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index d5b0364fb..8b7043393 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -48,9 +48,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index b4ad24497..34aa36516 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -48,6 +48,7 @@ public abstract class AppiumDriver : WebDriver, IFindsById, IFindsByClassName public AppiumDriver(ICommandExecutor commandExecutor, ICapabilities appiumOptions) : base(commandExecutor, appiumOptions) { + AppiumCommand.Merge(commandExecutor); ElementFactory = CreateElementFactory(); } diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index e2b89f5b1..aa06e3461 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -9,12 +9,9 @@ - - - diff --git a/test/integration/helpers/Caps.cs b/test/integration/helpers/Caps.cs index d328200a0..181102f6d 100644 --- a/test/integration/helpers/Caps.cs +++ b/test/integration/helpers/Caps.cs @@ -8,10 +8,10 @@ public class Caps public static AppiumOptions GetIosCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.AutomationName, AutomationName.iOSXcuiTest); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "iPhone X"); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.PlatformVersion, "12.0"); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.App, app); + capabilities.AutomationName = AutomationName.iOSXcuiTest; + capabilities.DeviceName = "iPhone X"; + capabilities.PlatformVersion = "12.0"; + capabilities.App = app; capabilities.AddAdditionalAppiumOption(IOSMobileCapabilityType.LaunchTimeout, Env.InitTimeoutSec.TotalMilliseconds); return capabilities; @@ -20,18 +20,18 @@ public static AppiumOptions GetIosCaps(string app) public static AppiumOptions GetAndroidUIAutomatorCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.AutomationName, AutomationName.AndroidUIAutomator2); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "Android Emulator"); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.App, app); + capabilities.AutomationName = AutomationName.AndroidUIAutomator2; + capabilities.DeviceName = "Android Emulator"; + capabilities.App = app; return capabilities; } public static AppiumOptions GetAndroidEspressoCaps(string app) { var capabilities = new AppiumOptions(); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.AutomationName, AutomationName.AndroidEspresso); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "Android Emulator"); - capabilities.AddAdditionalAppiumOption(MobileCapabilityType.App, app); + capabilities.AutomationName = AutomationName.AndroidEspresso; + capabilities.DeviceName = "Android Emulator"; + capabilities.App = app; return capabilities; } } From 2aac534ebe60d29937ac7357fb1334c0890a2976 Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Tue, 12 Oct 2021 10:02:59 -0500 Subject: [PATCH 17/21] Move to official release as there will be no RC4 --- src/Appium.Net/Appium.Net.csproj | 126 +++++++++++++++---------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index 8b7043393..a224cf754 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -1,65 +1,65 @@ - - - - netstandard2.0;net45 - LICENSE.txt - OpenQA.Selenium - Appium Commiters - Appium-Dotnet-Driver - false - true - Copyright © 2020 - https://github.com/appium/appium-dotnet-driver - https://github.com/appium/appium-dotnet-driver - git - true - snupkg - true - Appium.WebDriver - Appium Commiters - appium-icon.png - Selenium Webdriver extension for Appium. - Appium Webdriver device automation - - - - LICENSE.txt - - + + + + netstandard2.0;net45 + LICENSE.txt + OpenQA.Selenium + Appium Commiters + Appium-Dotnet-Driver + false + true + Copyright © 2020 + https://github.com/appium/appium-dotnet-driver + https://github.com/appium/appium-dotnet-driver + git + true + snupkg + true + Appium.WebDriver + Appium Commiters + appium-icon.png + Selenium Webdriver extension for Appium. + Appium Webdriver device automation + + + + LICENSE.txt + + Appium.Net.xml - - - Appium.Net.xml - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - - - - + + + Appium.Net.xml + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + From c55410bd36be71015032a549ba8c17081cdc416c Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Wed, 13 Oct 2021 11:20:17 -0500 Subject: [PATCH 18/21] Update copyright --- src/Appium.Net/Appium.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index a224cf754..efe50d39c 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -8,7 +8,7 @@ Appium-Dotnet-Driver false true - Copyright © 2020 + Copyright © 2021 https://github.com/appium/appium-dotnet-driver https://github.com/appium/appium-dotnet-driver git From d60ee4057e466858c7794c6b1dfa66c8e60610cf Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Wed, 13 Oct 2021 11:43:19 -0500 Subject: [PATCH 19/21] Put Newtonsoft back --- src/Appium.Net/Appium.Net.csproj | 130 +++++++++--------- .../Appium.Net.Integration.Tests.csproj | 1 + 2 files changed, 66 insertions(+), 65 deletions(-) diff --git a/src/Appium.Net/Appium.Net.csproj b/src/Appium.Net/Appium.Net.csproj index efe50d39c..c0ac1a153 100644 --- a/src/Appium.Net/Appium.Net.csproj +++ b/src/Appium.Net/Appium.Net.csproj @@ -1,65 +1,65 @@ - - - - netstandard2.0;net45 - LICENSE.txt - OpenQA.Selenium - Appium Commiters - Appium-Dotnet-Driver - false - true - Copyright © 2021 - https://github.com/appium/appium-dotnet-driver - https://github.com/appium/appium-dotnet-driver - git - true - snupkg - true - Appium.WebDriver - Appium Commiters - appium-icon.png - Selenium Webdriver extension for Appium. - Appium Webdriver device automation - - - - LICENSE.txt - - - - Appium.Net.xml - - - Appium.Net.xml - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - - - - + + + + netstandard2.0;net45 + LICENSE.txt + OpenQA.Selenium + Appium Commiters + Appium-Dotnet-Driver + false + true + Copyright © 2021 + https://github.com/appium/appium-dotnet-driver + https://github.com/appium/appium-dotnet-driver + git + true + snupkg + true + Appium.WebDriver + Appium Commiters + appium-icon.png + Selenium Webdriver extension for Appium. + Appium Webdriver device automation + + + + LICENSE.txt + + + + Appium.Net.xml + + + Appium.Net.xml + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index aa06e3461..551852ec1 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -10,6 +10,7 @@ + From 2f7a699e4a9a225c80984924fbe1f3c2e72ad4bb Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Wed, 13 Oct 2021 13:02:17 -0500 Subject: [PATCH 20/21] Use ternary operator --- src/Appium.Net/Appium/AppiumOptions.cs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/Appium.Net/Appium/AppiumOptions.cs b/src/Appium.Net/Appium/AppiumOptions.cs index 92aea3419..bc9def95b 100644 --- a/src/Appium.Net/Appium/AppiumOptions.cs +++ b/src/Appium.Net/Appium/AppiumOptions.cs @@ -68,17 +68,7 @@ public AppiumOptions() : base() /// webdriver executable. public void AddAdditionalAppiumOption(string optionName, object optionValue) { - string name; - - if (optionName.Contains(":")) - { - name = optionName; - } - else - { - name = $"{VendorPrefix}:{optionName}"; - } - + string name = optionName.Contains(":") ? optionName : $"{VendorPrefix}:{optionName}"; this.ValidateCapabilityName(name); this.additionalAppiumOptions[name] = optionValue; } From 92e6864b85a3f498c095f5c61d0af503b9bf15df Mon Sep 17 00:00:00 2001 From: Troy Walsh Date: Thu, 14 Oct 2021 07:52:22 -0500 Subject: [PATCH 21/21] Remove outdated using statements --- .../Appium/Android/AndroidDriver.cs | 1 - .../Appium/Android/AndroidElement.cs | 1 - .../Appium/Android/AndroidElementFactory.cs | 3 +- src/Appium.Net/Appium/AppiumCommand.cs | 1 - src/Appium.Net/Appium/AppiumDriver.cs | 32 +------------------ src/Appium.Net/Appium/AppiumWebElement.cs | 1 - src/Appium.Net/Appium/CachedElementFactory.cs | 1 - .../Appium/Interfaces/IExecuteMethod.cs | 1 - src/Appium.Net/Appium/Mac/MacDriver.cs | 1 - src/Appium.Net/Appium/Mac/MacElement.cs | 2 -- .../Appium/MultiAction/TouchAction.cs | 2 -- .../AppiumPageObjectMemberDecorator.cs | 2 -- .../Appium/PageObjects/ByFactory.cs | 1 - .../Appium/Service/AppiumLocalService.cs | 6 ++-- .../Tizen/TizenCommandExecutionHelper.cs | 1 - src/Appium.Net/Appium/Tizen/TizenDriver.cs | 1 - src/Appium.Net/Appium/Tizen/TizenElement.cs | 1 - .../Appium/Tizen/TizenElementFactory.cs | 3 +- .../Appium/Windows/WindowsDriver.cs | 1 - .../Appium/Windows/WindowsElement.cs | 1 - .../Appium/Windows/WindowsElementFactory.cs | 3 +- src/Appium.Net/Appium/iOS/IOSDriver.cs | 1 - src/Appium.Net/Appium/iOS/IOSElement.cs | 1 - .../Appium/iOS/IOSElementFactory.cs | 3 +- 24 files changed, 8 insertions(+), 63 deletions(-) diff --git a/src/Appium.Net/Appium/Android/AndroidDriver.cs b/src/Appium.Net/Appium/Android/AndroidDriver.cs index cfd64b5c7..ac747f54b 100644 --- a/src/Appium.Net/Appium/Android/AndroidDriver.cs +++ b/src/Appium.Net/Appium/Android/AndroidDriver.cs @@ -16,7 +16,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; using System.Drawing; diff --git a/src/Appium.Net/Appium/Android/AndroidElement.cs b/src/Appium.Net/Appium/Android/AndroidElement.cs index 20fea24db..8fc204fdb 100644 --- a/src/Appium.Net/Appium/Android/AndroidElement.cs +++ b/src/Appium.Net/Appium/Android/AndroidElement.cs @@ -14,7 +14,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.Android diff --git a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs index ef7f4f9b3..e4b4d6a39 100644 --- a/src/Appium.Net/Appium/Android/AndroidElementFactory.cs +++ b/src/Appium.Net/Appium/Android/AndroidElementFactory.cs @@ -1,5 +1,4 @@ -using OpenQA.Selenium.Remote; - + namespace OpenQA.Selenium.Appium.Android { public class AndroidElementFactory : CachedElementFactory diff --git a/src/Appium.Net/Appium/AppiumCommand.cs b/src/Appium.Net/Appium/AppiumCommand.cs index d85db13f9..b9f1212a5 100644 --- a/src/Appium.Net/Appium/AppiumCommand.cs +++ b/src/Appium.Net/Appium/AppiumCommand.cs @@ -12,7 +12,6 @@ //See the License for the specific language governing permissions and //limitations under the License. -using OpenQA.Selenium.Remote; using System.Collections.Generic; namespace OpenQA.Selenium.Appium diff --git a/src/Appium.Net/Appium/AppiumDriver.cs b/src/Appium.Net/Appium/AppiumDriver.cs index 34aa36516..a41923d4a 100644 --- a/src/Appium.Net/Appium/AppiumDriver.cs +++ b/src/Appium.Net/Appium/AppiumDriver.cs @@ -18,7 +18,6 @@ using OpenQA.Selenium.Appium.Service; using OpenQA.Selenium.Internal; using OpenQA.Selenium.Interactions; -using OpenQA.Selenium.Remote; using System; using System.Collections; using System.Collections.Generic; @@ -30,8 +29,7 @@ namespace OpenQA.Selenium.Appium { - public abstract class AppiumDriver : WebDriver, IFindsById, IFindsByClassName, IFindsByName, - IFindsByTagName, IFindsByImage, IExecuteMethod, + public abstract class AppiumDriver : WebDriver, IFindsByImage, IHasSessionDetails, IHasLocation, IFindByAccessibilityId, @@ -94,34 +92,6 @@ public AppiumDriver(AppiumLocalService service, ICapabilities appiumOptions, Tim #endregion Constructors - #region Overrides to fix "css selector" issue - - IWebElement IFindsByClassName.FindElementByClassName(string className) => - base.FindElement(MobileSelector.ClassName, className); - - ReadOnlyCollection IFindsByClassName.FindElementsByClassName(string className) => - base.FindElements(MobileSelector.ClassName, className); - - IWebElement IFindsById.FindElementById(string id) => - base.FindElement(MobileSelector.Id, id); - - ReadOnlyCollection IFindsById.FindElementsById(string id) => - base.FindElements(MobileSelector.Id, id); - - IWebElement IFindsByName.FindElementByName(string name) => - base.FindElement(MobileSelector.Name, name); - - ReadOnlyCollection IFindsByName.FindElementsByName(string name) => - base.FindElements(MobileSelector.Name, name); - - IWebElement IFindsByTagName.FindElementByTagName(string tagName) => - base.FindElement(MobileSelector.TagName, tagName); - - ReadOnlyCollection IFindsByTagName.FindElementsByTagName(string tagName) => - base.FindElements(MobileSelector.TagName, tagName); - - #endregion Overrides to fix "css selector" issue - #region Generic FindMethods public new W FindElement(By by) => diff --git a/src/Appium.Net/Appium/AppiumWebElement.cs b/src/Appium.Net/Appium/AppiumWebElement.cs index 8bba0dcbe..bef38473f 100644 --- a/src/Appium.Net/Appium/AppiumWebElement.cs +++ b/src/Appium.Net/Appium/AppiumWebElement.cs @@ -14,7 +14,6 @@ using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Internal; -using OpenQA.Selenium.Remote; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections; diff --git a/src/Appium.Net/Appium/CachedElementFactory.cs b/src/Appium.Net/Appium/CachedElementFactory.cs index dd16b9ce0..5eba952ab 100644 --- a/src/Appium.Net/Appium/CachedElementFactory.cs +++ b/src/Appium.Net/Appium/CachedElementFactory.cs @@ -1,5 +1,4 @@ using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/Interfaces/IExecuteMethod.cs b/src/Appium.Net/Appium/Interfaces/IExecuteMethod.cs index ea6a5ccbb..c13e35b66 100644 --- a/src/Appium.Net/Appium/Interfaces/IExecuteMethod.cs +++ b/src/Appium.Net/Appium/Interfaces/IExecuteMethod.cs @@ -12,7 +12,6 @@ //See the License for the specific language governing permissions and //limitations under the License. -using OpenQA.Selenium.Remote; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.Interfaces diff --git a/src/Appium.Net/Appium/Mac/MacDriver.cs b/src/Appium.Net/Appium/Mac/MacDriver.cs index 6a6d90cf3..da8aa6d69 100644 --- a/src/Appium.Net/Appium/Mac/MacDriver.cs +++ b/src/Appium.Net/Appium/Mac/MacDriver.cs @@ -14,7 +14,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; namespace OpenQA.Selenium.Appium.Mac diff --git a/src/Appium.Net/Appium/Mac/MacElement.cs b/src/Appium.Net/Appium/Mac/MacElement.cs index c2865b5ae..678ce8583 100644 --- a/src/Appium.Net/Appium/Mac/MacElement.cs +++ b/src/Appium.Net/Appium/Mac/MacElement.cs @@ -12,8 +12,6 @@ //See the License for the specific language governing permissions and //limitations under the License. -using OpenQA.Selenium.Remote; - namespace OpenQA.Selenium.Appium.Mac { public class MacElement : AppiumWebElement diff --git a/src/Appium.Net/Appium/MultiAction/TouchAction.cs b/src/Appium.Net/Appium/MultiAction/TouchAction.cs index 99359f737..d24bf7b5a 100644 --- a/src/Appium.Net/Appium/MultiAction/TouchAction.cs +++ b/src/Appium.Net/Appium/MultiAction/TouchAction.cs @@ -15,8 +15,6 @@ using OpenQA.Selenium.Appium.Interfaces; using System.Collections.Generic; using System.Reflection; -using OpenQA.Selenium.Remote; -using OpenQA.Selenium.Internal; namespace OpenQA.Selenium.Appium.MultiTouch { diff --git a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs index fd738e130..433735848 100644 --- a/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs +++ b/src/Appium.Net/Appium/PageObjects/AppiumPageObjectMemberDecorator.cs @@ -18,8 +18,6 @@ using OpenQA.Selenium.Appium.iOS; using OpenQA.Selenium.Appium.PageObjects.Interceptors; using OpenQA.Selenium.Appium.PageObjects.Attributes; -using OpenQA.Selenium.Internal; -using OpenQA.Selenium.Remote; using SeleniumExtras.PageObjects; using System; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/PageObjects/ByFactory.cs b/src/Appium.Net/Appium/PageObjects/ByFactory.cs index f524cada6..e6e2a2299 100644 --- a/src/Appium.Net/Appium/PageObjects/ByFactory.cs +++ b/src/Appium.Net/Appium/PageObjects/ByFactory.cs @@ -18,7 +18,6 @@ using OpenQA.Selenium.Appium.PageObjects.Attributes; using OpenQA.Selenium.Appium.PageObjects.Attributes.Abstract; using OpenQA.Selenium.Appium.Windows; -using OpenQA.Selenium.Remote; using SeleniumExtras.PageObjects; using System; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/Service/AppiumLocalService.cs b/src/Appium.Net/Appium/Service/AppiumLocalService.cs index 3c411aaf9..5461fbefa 100644 --- a/src/Appium.Net/Appium/Service/AppiumLocalService.cs +++ b/src/Appium.Net/Appium/Service/AppiumLocalService.cs @@ -12,12 +12,12 @@ //See the License for the specific language governing permissions and //limitations under the License. -using System; -using System.Collections.Generic; using OpenQA.Selenium.Appium.Service.Exceptions; using OpenQA.Selenium.Remote; -using System.IO; +using System; +using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Net; using System.Runtime.CompilerServices; diff --git a/src/Appium.Net/Appium/Tizen/TizenCommandExecutionHelper.cs b/src/Appium.Net/Appium/Tizen/TizenCommandExecutionHelper.cs index 810bde276..a0b20a237 100644 --- a/src/Appium.Net/Appium/Tizen/TizenCommandExecutionHelper.cs +++ b/src/Appium.Net/Appium/Tizen/TizenCommandExecutionHelper.cs @@ -13,7 +13,6 @@ //limitations under the License. using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.Tizen diff --git a/src/Appium.Net/Appium/Tizen/TizenDriver.cs b/src/Appium.Net/Appium/Tizen/TizenDriver.cs index 9379c3375..990008d03 100644 --- a/src/Appium.Net/Appium/Tizen/TizenDriver.cs +++ b/src/Appium.Net/Appium/Tizen/TizenDriver.cs @@ -15,7 +15,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/Tizen/TizenElement.cs b/src/Appium.Net/Appium/Tizen/TizenElement.cs index 81a3b5e0e..1b7bf03d1 100644 --- a/src/Appium.Net/Appium/Tizen/TizenElement.cs +++ b/src/Appium.Net/Appium/Tizen/TizenElement.cs @@ -13,7 +13,6 @@ //limitations under the License. using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.Tizen diff --git a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs index f9091e164..48e02b6ef 100644 --- a/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs +++ b/src/Appium.Net/Appium/Tizen/TizenElementFactory.cs @@ -1,5 +1,4 @@ -using OpenQA.Selenium.Remote; - + namespace OpenQA.Selenium.Appium.Tizen { public class TizenElementFactory : CachedElementFactory diff --git a/src/Appium.Net/Appium/Windows/WindowsDriver.cs b/src/Appium.Net/Appium/Windows/WindowsDriver.cs index bec10bab3..12ce29312 100644 --- a/src/Appium.Net/Appium/Windows/WindowsDriver.cs +++ b/src/Appium.Net/Appium/Windows/WindowsDriver.cs @@ -19,7 +19,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; namespace OpenQA.Selenium.Appium.Windows { diff --git a/src/Appium.Net/Appium/Windows/WindowsElement.cs b/src/Appium.Net/Appium/Windows/WindowsElement.cs index 0cf03cd7b..973c79c7c 100644 --- a/src/Appium.Net/Appium/Windows/WindowsElement.cs +++ b/src/Appium.Net/Appium/Windows/WindowsElement.cs @@ -13,7 +13,6 @@ //limitations under the License. using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; using OpenQA.Selenium.Appium.Enums; using System.Collections.Generic; diff --git a/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs b/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs index 1c7ec3b31..7d2318a65 100644 --- a/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs +++ b/src/Appium.Net/Appium/Windows/WindowsElementFactory.cs @@ -1,5 +1,4 @@ -using OpenQA.Selenium.Remote; - + namespace OpenQA.Selenium.Appium.Windows { public class WindowsElementFactory : CachedElementFactory diff --git a/src/Appium.Net/Appium/iOS/IOSDriver.cs b/src/Appium.Net/Appium/iOS/IOSDriver.cs index 534051d49..f987107d2 100644 --- a/src/Appium.Net/Appium/iOS/IOSDriver.cs +++ b/src/Appium.Net/Appium/iOS/IOSDriver.cs @@ -15,7 +15,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; using OpenQA.Selenium.Appium.Service; -using OpenQA.Selenium.Remote; using System; using System.Drawing; using OpenQA.Selenium.Appium.iOS.Interfaces; diff --git a/src/Appium.Net/Appium/iOS/IOSElement.cs b/src/Appium.Net/Appium/iOS/IOSElement.cs index 733f767c2..1443dd078 100644 --- a/src/Appium.Net/Appium/iOS/IOSElement.cs +++ b/src/Appium.Net/Appium/iOS/IOSElement.cs @@ -14,7 +14,6 @@ using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Interfaces; -using OpenQA.Selenium.Remote; using System.Collections.Generic; namespace OpenQA.Selenium.Appium.iOS diff --git a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs index a9653e47c..45e1a3180 100644 --- a/src/Appium.Net/Appium/iOS/IOSElementFactory.cs +++ b/src/Appium.Net/Appium/iOS/IOSElementFactory.cs @@ -1,5 +1,4 @@ -using OpenQA.Selenium.Remote; - + namespace OpenQA.Selenium.Appium.iOS { public class IOSElementFactory : CachedElementFactory