diff --git a/tests/Avalonia.IntegrationTests.Appium/AppiumDriverEx.cs b/tests/Avalonia.IntegrationTests.Appium/AppiumDriverEx.cs new file mode 100644 index 0000000000..7e513bed11 --- /dev/null +++ b/tests/Avalonia.IntegrationTests.Appium/AppiumDriverEx.cs @@ -0,0 +1,96 @@ +#if APPIUM1 +global using AppiumDriver = OpenQA.Selenium.Appium.AppiumDriver; +global using WindowsDriver = OpenQA.Selenium.Appium.Windows.WindowsDriver; +global using MacDriver = OpenQA.Selenium.Appium.Mac.MacDriver; +#elif APPIUM2 +global using AppiumWebElement = OpenQA.Selenium.Appium.AppiumElement; +global using AppiumDriver = OpenQA.Selenium.Appium.AppiumDriver; +global using WindowsDriver = OpenQA.Selenium.Appium.Windows.WindowsDriver; +global using MacDriver = OpenQA.Selenium.Appium.Mac.MacDriver; +#endif + +using System; +using System.Collections.Generic; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; +using OpenQA.Selenium.Appium.Enums; +using OpenQA.Selenium.Interactions; +using OpenQA.Selenium.Internal; + +namespace Avalonia.IntegrationTests.Appium; + +public static class AppiumDriverEx +{ +#if APPIUM2 + public static AppiumElement FindElement(this IFindsElement @this, By by) + { + return @this switch + { + AppiumDriver driver => driver.FindElement(by), + AppiumElement driver => driver.FindElement(by), + _ => throw new ArgumentOutOfRangeException(nameof(@this), @this, null) + }; + } + + public static IReadOnlyList FindElements(this IFindsElement @this, By by) + { + return @this switch + { + AppiumDriver driver => driver.FindElements(by), + AppiumElement driver => driver.FindElements(by), + _ => throw new ArgumentOutOfRangeException(nameof(@this), @this, null) + }; + } + + public static AppiumWebElement FindElementByAccessibilityId(this IFindsElement session, string criteria) => + session.FindElement(MobileBy.AccessibilityId(criteria)); + + public static IReadOnlyList FindElementsByAccessibilityId(this IFindsElement session, + string criteria) => + session.FindElements(MobileBy.AccessibilityId(criteria)); + + public static AppiumWebElement FindElementByName(this IFindsElement session, string criteria) => + session.FindElement(MobileBy.Name(criteria)); + + public static IReadOnlyList FindElementsByName(this IFindsElement session, string criteria) => + session.FindElements(MobileBy.Name(criteria)); + + public static AppiumWebElement FindElementByXPath(this IFindsElement session, string criteria) => + session.FindElement(By.XPath(criteria)); + + public static IReadOnlyList FindElementsByXPath(this IFindsElement session, string criteria) => + session.FindElements(By.XPath(criteria)); + + public static AppiumWebElement FindElementByClassName(this IFindsElement session, string criteria) => + session.FindElement(By.ClassName(criteria)); + + public static IReadOnlyList FindElementsByClassName(this IFindsElement session, string criteria) => + session.FindElements(By.ClassName(criteria)); + + public static void AddAdditionalCapability(this AppiumOptions options, string name, object value) + { + if (name == MobileCapabilityType.AutomationName) + { + options.AutomationName = value.ToString(); + } + else if (name == MobileCapabilityType.PlatformName) + { + options.PlatformName = value.ToString(); + } + else + { + options.AddAdditionalAppiumOption(name, value); + } + } +#endif + + public static Actions MoveToElementCenter(this Actions actions, AppiumWebElement element, int xOffset, int yOffset) + { +#if APPIUM2 + // It's always Center in Appium 2 + return actions.MoveToElement(element, xOffset, yOffset); +#else + return actions.MoveToElement(element, xOffset, yOffset, MoveToElementOffsetOrigin.Center); +#endif + } +} diff --git a/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs b/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs index 4d8760ad61..ce6e10807d 100644 --- a/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs @@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class AutomationTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public AutomationTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj index a3c19c98b2..e2b13d800a 100644 --- a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj +++ b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj @@ -3,14 +3,19 @@ $(AvsCurrentTargetFramework) enable + + false + $(DefineConstants);APPIUM1 + $(DefineConstants);APPIUM2 - + - + + diff --git a/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs b/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs index fc2325b29e..22b68732c7 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs @@ -7,7 +7,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class ButtonTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ButtonTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs index 6c154fa268..490210ae31 100644 --- a/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs @@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class CheckBoxTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public CheckBoxTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs index 9e35d366d2..231a50c89b 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs @@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium { public abstract class ComboBoxTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ComboBoxTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs b/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs index bdc5ca5f41..02f4ea11c5 100644 --- a/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs +++ b/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs @@ -4,8 +4,6 @@ using System.IO; using System.Runtime.InteropServices; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Enums; -using OpenQA.Selenium.Appium.Mac; -using OpenQA.Selenium.Appium.Windows; namespace Avalonia.IntegrationTests.Appium { @@ -21,7 +19,7 @@ namespace Avalonia.IntegrationTests.Appium if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { ConfigureWin32Options(options); - Session = new WindowsDriver( + Session = new WindowsDriver( new Uri("http://127.0.0.1:4723"), options); @@ -33,7 +31,7 @@ namespace Avalonia.IntegrationTests.Appium else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { ConfigureMacOptions(options); - Session = new MacDriver( + Session = new MacDriver( new Uri("http://127.0.0.1:4723/wd/hub"), options); } @@ -59,7 +57,7 @@ namespace Avalonia.IntegrationTests.Appium options.AddAdditionalCapability("appium:showServerLogs", true); } - public AppiumDriver Session { get; } + public AppiumDriver Session { get; } public void Dispose() { diff --git a/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs b/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs index 775ee723cb..0fc8a68f44 100644 --- a/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs @@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class GestureTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public GestureTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs index 5c81c20af1..24a02a7844 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs @@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class ListBoxTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ListBoxTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index 5f57dfbc19..f9fa9312ee 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public abstract class MenuTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public MenuTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs index 290ebf70e6..ec4f9d705d 100644 --- a/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs @@ -7,7 +7,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class NativeMenuTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public NativeMenuTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs b/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs index 26a8577cb0..c58c57bddc 100644 --- a/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs @@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class RadioButtonTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public RadioButtonTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs b/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs index 9d5df2fb46..1a285c5ce6 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs @@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class ScrollBarTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ScrollBarTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs b/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs index fa83ee199c..1eede63aae 100644 --- a/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs @@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class SliderTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public SliderTests(DefaultAppFixture fixture) { @@ -72,7 +72,7 @@ namespace Avalonia.IntegrationTests.Appium var thumb = slider.FindElementByAccessibilityId("thumb"); var initialThumbRect = thumb.Rect; - new Actions(_session).MoveToElement(slider, 100, 0, MoveToElementOffsetOrigin.Center).Click().Perform(); + new Actions(_session).MoveToElementCenter(slider, 100, 0).Click().Perform(); var value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture)); var boundValue = double.Parse( @@ -93,7 +93,7 @@ namespace Avalonia.IntegrationTests.Appium var thumb = slider.FindElementByAccessibilityId("thumb"); var initialThumbRect = thumb.Rect; - new Actions(_session).MoveToElement(slider, -100, 0, MoveToElementOffsetOrigin.Center).Click().Perform(); + new Actions(_session).MoveToElementCenter(slider, -100, 0).Click().Perform(); var value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture)); var boundValue = double.Parse( diff --git a/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs b/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs index eece0d4c17..e172980981 100644 --- a/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs @@ -15,7 +15,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class WindowTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public WindowTests(DefaultAppFixture fixture) { diff --git a/tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs b/tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs index 247198b254..53a41f5d46 100644 --- a/tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs +++ b/tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs @@ -14,7 +14,7 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class WindowTests_MacOS { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public WindowTests_MacOS(DefaultAppFixture fixture) {