Browse Source

Make integrational tests compatible with Appium 2 (#15570)

* Make it work on macOS

* Revert most of changes

This reverts commit 3526c6f601.

* Polyfill appium2, make it usable with both versions

* Revert unrelated changes

* Fix slider incompatibility
release/11.1.3
Max Katz 2 years ago
parent
commit
23abe25d74
  1. 96
      tests/Avalonia.IntegrationTests.Appium/AppiumDriverEx.cs
  2. 2
      tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs
  3. 9
      tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
  4. 2
      tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs
  5. 2
      tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs
  6. 2
      tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs
  7. 8
      tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs
  8. 2
      tests/Avalonia.IntegrationTests.Appium/GestureTests.cs
  9. 2
      tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs
  10. 2
      tests/Avalonia.IntegrationTests.Appium/MenuTests.cs
  11. 2
      tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs
  12. 2
      tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs
  13. 2
      tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs
  14. 6
      tests/Avalonia.IntegrationTests.Appium/SliderTests.cs
  15. 2
      tests/Avalonia.IntegrationTests.Appium/WindowTests.cs
  16. 2
      tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs

96
tests/Avalonia.IntegrationTests.Appium/AppiumDriverEx.cs

@ -0,0 +1,96 @@
#if APPIUM1
global using AppiumDriver = OpenQA.Selenium.Appium.AppiumDriver<OpenQA.Selenium.Appium.AppiumWebElement>;
global using WindowsDriver = OpenQA.Selenium.Appium.Windows.WindowsDriver<OpenQA.Selenium.Appium.AppiumWebElement>;
global using MacDriver = OpenQA.Selenium.Appium.Mac.MacDriver<OpenQA.Selenium.Appium.AppiumWebElement>;
#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<AppiumWebElement> 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<AppiumWebElement> 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<AppiumWebElement> 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<AppiumWebElement> 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<AppiumWebElement> 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
}
}

2
tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs

@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class AutomationTests public class AutomationTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public AutomationTests(DefaultAppFixture fixture) public AutomationTests(DefaultAppFixture fixture)
{ {

9
tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj

@ -3,14 +3,19 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework> <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<IsRunningAppium2 Condition="'$(IsRunningAppium2)' == ''">false</IsRunningAppium2>
<DefineConstants Condition="'$(IsRunningAppium2)' == 'false'">$(DefineConstants);APPIUM1</DefineConstants>
<DefineConstants Condition="'$(IsRunningAppium2)' == 'true'">$(DefineConstants);APPIUM2</DefineConstants>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" /> <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Appium.WebDriver" Version="4.4.0" /> <PackageReference Include="Appium.WebDriver" Version="4.4.0" Condition="'$(IsRunningAppium2)' == 'false'" />
<PackageReference Include="Appium.WebDriver" Version="5.0.0-rc.8" Condition="'$(IsRunningAppium2)' == 'true'" />
<PackageReference Include="Xunit.Extensions.Ordering" Version="1.4.5" /> <PackageReference Include="Xunit.Extensions.Ordering" Version="1.4.5" />
</ItemGroup> </ItemGroup>

2
tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs

@ -7,7 +7,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class ButtonTests public class ButtonTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public ButtonTests(DefaultAppFixture fixture) public ButtonTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs

@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class CheckBoxTests public class CheckBoxTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public CheckBoxTests(DefaultAppFixture fixture) public CheckBoxTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs

@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium
{ {
public abstract class ComboBoxTests public abstract class ComboBoxTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public ComboBoxTests(DefaultAppFixture fixture) public ComboBoxTests(DefaultAppFixture fixture)
{ {

8
tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs

@ -4,8 +4,6 @@ using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium.Enums;
using OpenQA.Selenium.Appium.Mac;
using OpenQA.Selenium.Appium.Windows;
namespace Avalonia.IntegrationTests.Appium namespace Avalonia.IntegrationTests.Appium
{ {
@ -21,7 +19,7 @@ namespace Avalonia.IntegrationTests.Appium
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{ {
ConfigureWin32Options(options); ConfigureWin32Options(options);
Session = new WindowsDriver<AppiumWebElement>( Session = new WindowsDriver(
new Uri("http://127.0.0.1:4723"), new Uri("http://127.0.0.1:4723"),
options); options);
@ -33,7 +31,7 @@ namespace Avalonia.IntegrationTests.Appium
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{ {
ConfigureMacOptions(options); ConfigureMacOptions(options);
Session = new MacDriver<AppiumWebElement>( Session = new MacDriver(
new Uri("http://127.0.0.1:4723/wd/hub"), new Uri("http://127.0.0.1:4723/wd/hub"),
options); options);
} }
@ -59,7 +57,7 @@ namespace Avalonia.IntegrationTests.Appium
options.AddAdditionalCapability("appium:showServerLogs", true); options.AddAdditionalCapability("appium:showServerLogs", true);
} }
public AppiumDriver<AppiumWebElement> Session { get; } public AppiumDriver Session { get; }
public void Dispose() public void Dispose()
{ {

2
tests/Avalonia.IntegrationTests.Appium/GestureTests.cs

@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class GestureTests public class GestureTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public GestureTests(DefaultAppFixture fixture) public GestureTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs

@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class ListBoxTests public class ListBoxTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public ListBoxTests(DefaultAppFixture fixture) public ListBoxTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/MenuTests.cs

@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public abstract class MenuTests public abstract class MenuTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public MenuTests(DefaultAppFixture fixture) public MenuTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs

@ -7,7 +7,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class NativeMenuTests public class NativeMenuTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public NativeMenuTests(DefaultAppFixture fixture) public NativeMenuTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs

@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class RadioButtonTests public class RadioButtonTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public RadioButtonTests(DefaultAppFixture fixture) public RadioButtonTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs

@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class ScrollBarTests public class ScrollBarTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public ScrollBarTests(DefaultAppFixture fixture) public ScrollBarTests(DefaultAppFixture fixture)
{ {

6
tests/Avalonia.IntegrationTests.Appium/SliderTests.cs

@ -9,7 +9,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class SliderTests public class SliderTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public SliderTests(DefaultAppFixture fixture) public SliderTests(DefaultAppFixture fixture)
{ {
@ -72,7 +72,7 @@ namespace Avalonia.IntegrationTests.Appium
var thumb = slider.FindElementByAccessibilityId("thumb"); var thumb = slider.FindElementByAccessibilityId("thumb");
var initialThumbRect = thumb.Rect; 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 value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture));
var boundValue = double.Parse( var boundValue = double.Parse(
@ -93,7 +93,7 @@ namespace Avalonia.IntegrationTests.Appium
var thumb = slider.FindElementByAccessibilityId("thumb"); var thumb = slider.FindElementByAccessibilityId("thumb");
var initialThumbRect = thumb.Rect; 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 value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture));
var boundValue = double.Parse( var boundValue = double.Parse(

2
tests/Avalonia.IntegrationTests.Appium/WindowTests.cs

@ -15,7 +15,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class WindowTests public class WindowTests
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public WindowTests(DefaultAppFixture fixture) public WindowTests(DefaultAppFixture fixture)
{ {

2
tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs

@ -14,7 +14,7 @@ namespace Avalonia.IntegrationTests.Appium
[Collection("Default")] [Collection("Default")]
public class WindowTests_MacOS public class WindowTests_MacOS
{ {
private readonly AppiumDriver<AppiumWebElement> _session; private readonly AppiumDriver _session;
public WindowTests_MacOS(DefaultAppFixture fixture) public WindowTests_MacOS(DefaultAppFixture fixture)
{ {

Loading…
Cancel
Save