AppiumDriverEx.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #if APPIUM1
  2. global using AppiumDriver = OpenQA.Selenium.Appium.AppiumDriver<OpenQA.Selenium.Appium.AppiumWebElement>;
  3. global using WindowsDriver = OpenQA.Selenium.Appium.Windows.WindowsDriver<OpenQA.Selenium.Appium.AppiumWebElement>;
  4. global using MacDriver = OpenQA.Selenium.Appium.Mac.MacDriver<OpenQA.Selenium.Appium.AppiumWebElement>;
  5. #elif APPIUM2
  6. global using AppiumWebElement = OpenQA.Selenium.Appium.AppiumElement;
  7. global using AppiumDriver = OpenQA.Selenium.Appium.AppiumDriver;
  8. global using WindowsDriver = OpenQA.Selenium.Appium.Windows.WindowsDriver;
  9. global using MacDriver = OpenQA.Selenium.Appium.Mac.MacDriver;
  10. #endif
  11. using System;
  12. using System.Collections.Generic;
  13. using OpenQA.Selenium;
  14. using OpenQA.Selenium.Appium;
  15. using OpenQA.Selenium.Appium.Enums;
  16. using OpenQA.Selenium.Interactions;
  17. using OpenQA.Selenium.Internal;
  18. namespace Avalonia.IntegrationTests.Appium;
  19. public static class AppiumDriverEx
  20. {
  21. #if APPIUM2
  22. public static AppiumElement FindElement(this IFindsElement @this, By by)
  23. {
  24. return @this switch
  25. {
  26. AppiumDriver driver => driver.FindElement(by),
  27. AppiumElement driver => driver.FindElement(by),
  28. _ => throw new ArgumentOutOfRangeException(nameof(@this), @this, null)
  29. };
  30. }
  31. public static IReadOnlyList<AppiumWebElement> FindElements(this IFindsElement @this, By by)
  32. {
  33. return @this switch
  34. {
  35. AppiumDriver driver => driver.FindElements(by),
  36. AppiumElement driver => driver.FindElements(by),
  37. _ => throw new ArgumentOutOfRangeException(nameof(@this), @this, null)
  38. };
  39. }
  40. public static AppiumWebElement FindElementByAccessibilityId(this IFindsElement session, string criteria) =>
  41. session.FindElement(MobileBy.AccessibilityId(criteria));
  42. public static IReadOnlyList<AppiumWebElement> FindElementsByAccessibilityId(this IFindsElement session,
  43. string criteria) =>
  44. session.FindElements(MobileBy.AccessibilityId(criteria));
  45. public static AppiumWebElement FindElementByName(this IFindsElement session, string criteria) =>
  46. session.FindElement(MobileBy.Name(criteria));
  47. public static IReadOnlyList<AppiumWebElement> FindElementsByName(this IFindsElement session, string criteria) =>
  48. session.FindElements(MobileBy.Name(criteria));
  49. public static AppiumWebElement FindElementByXPath(this IFindsElement session, string criteria) =>
  50. session.FindElement(By.XPath(criteria));
  51. public static IReadOnlyList<AppiumWebElement> FindElementsByXPath(this IFindsElement session, string criteria) =>
  52. session.FindElements(By.XPath(criteria));
  53. public static AppiumWebElement FindElementByClassName(this IFindsElement session, string criteria) =>
  54. session.FindElement(By.ClassName(criteria));
  55. public static IReadOnlyList<AppiumWebElement> FindElementsByClassName(this IFindsElement session, string criteria) =>
  56. session.FindElements(By.ClassName(criteria));
  57. public static AppiumWebElement FindElementByTagName(this IFindsElement session, string criteria) =>
  58. session.FindElement(By.TagName(criteria));
  59. public static IReadOnlyList<AppiumWebElement> FindElementsByTagName(this IFindsElement session, string criteria) =>
  60. session.FindElements(By.TagName(criteria));
  61. public static void AddAdditionalCapability(this AppiumOptions options, string name, object value)
  62. {
  63. if (name == MobileCapabilityType.AutomationName)
  64. {
  65. options.AutomationName = value.ToString();
  66. }
  67. else if (name == MobileCapabilityType.PlatformName)
  68. {
  69. options.PlatformName = value.ToString();
  70. }
  71. else
  72. {
  73. options.AddAdditionalAppiumOption(name, value);
  74. }
  75. }
  76. #endif
  77. public static Actions MoveToElementCenter(this Actions actions, AppiumWebElement element, int xOffset, int yOffset)
  78. {
  79. #if APPIUM2
  80. // It's always Center in Appium 2
  81. return actions.MoveToElement(element, xOffset, yOffset);
  82. #else
  83. return actions.MoveToElement(element, xOffset, yOffset, MoveToElementOffsetOrigin.Center);
  84. #endif
  85. }
  86. }