#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 AppiumWebElement FindElementByTagName(this IFindsElement session, string criteria) => session.FindElement(By.TagName(criteria)); public static IReadOnlyList FindElementsByTagName(this IFindsElement session, string criteria) => session.FindElements(By.TagName(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 } }