diff --git a/samples/IntegrationTestApp/IntegrationTestApp.csproj b/samples/IntegrationTestApp/IntegrationTestApp.csproj index 77bfa828a7..dedad227a3 100644 --- a/samples/IntegrationTestApp/IntegrationTestApp.csproj +++ b/samples/IntegrationTestApp/IntegrationTestApp.csproj @@ -4,6 +4,8 @@ $(AvsCurrentTargetFramework) enable $(NoWarn);AVP1012 + true + @@ -22,6 +24,8 @@ + + diff --git a/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs b/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs index 4d8760ad61..6599bb3342 100644 --- a/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs @@ -1,4 +1,5 @@ -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using Xunit; namespace Avalonia.IntegrationTests.Appium @@ -6,14 +7,14 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class AutomationTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public AutomationTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Automation"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Automation")); tab.Click(); } @@ -22,15 +23,15 @@ namespace Avalonia.IntegrationTests.Appium { // AutomationID can be specified by the Name or AutomationProperties.AutomationId // properties, with the latter taking precedence. - var byName = _session.FindElementByAccessibilityId("TextBlockWithName"); - var byAutomationId = _session.FindElementByAccessibilityId("TextBlockWithNameAndAutomationId"); + var byName = _session.FindElement(MobileBy.AccessibilityId("TextBlockWithName")); + var byAutomationId = _session.FindElement(MobileBy.AccessibilityId("TextBlockWithNameAndAutomationId")); } [Fact] public void LabeledBy() { - var label = _session.FindElementByAccessibilityId("TextBlockAsLabel"); - var labeledTextBox = _session.FindElementByAccessibilityId("LabeledByTextBox"); + var label = _session.FindElement(MobileBy.AccessibilityId("TextBlockAsLabel")); + var labeledTextBox = _session.FindElement(MobileBy.AccessibilityId("LabeledByTextBox")); Assert.Equal("Label for TextBox", label.Text); Assert.Equal("Label for TextBox", labeledTextBox.GetName()); diff --git a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj index a3c19c98b2..a97ded2aae 100644 --- a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj +++ b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj @@ -10,7 +10,7 @@ - + diff --git a/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs b/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs index fc2325b29e..cdea4352a5 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ButtonTests.cs @@ -1,4 +1,5 @@ using System.Runtime.InteropServices; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using Xunit; @@ -7,21 +8,21 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class ButtonTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ButtonTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Button"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Button")); tab.Click(); } [Fact] public void DisabledButton() { - var button = _session.FindElementByAccessibilityId("DisabledButton"); + var button = _session.FindElement(MobileBy.AccessibilityId("DisabledButton")); Assert.Equal("Disabled Button", button.Text); Assert.False(button.Enabled); @@ -30,7 +31,7 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void EffectivelyDisabledButton() { - var button = _session.FindElementByAccessibilityId("EffectivelyDisabledButton"); + var button = _session.FindElement(MobileBy.AccessibilityId("EffectivelyDisabledButton")); Assert.Equal("Effectively Disabled Button", button.Text); Assert.False(button.Enabled); @@ -39,7 +40,7 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void BasicButton() { - var button = _session.FindElementByAccessibilityId("BasicButton"); + var button = _session.FindElement(MobileBy.AccessibilityId("BasicButton")); Assert.Equal("Basic Button", button.Text); Assert.True(button.Enabled); @@ -48,7 +49,7 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void ButtonWithTextBlock() { - var button = _session.FindElementByAccessibilityId("ButtonWithTextBlock"); + var button = _session.FindElement(MobileBy.AccessibilityId("ButtonWithTextBlock")); Assert.Equal("Button with TextBlock", button.Text); } @@ -56,7 +57,7 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void ButtonWithAcceleratorKey() { - var button = _session.FindElementByAccessibilityId("ButtonWithAcceleratorKey"); + var button = _session.FindElement(MobileBy.AccessibilityId("ButtonWithAcceleratorKey")); Assert.Equal("Ctrl+B", button.GetAttribute("AcceleratorKey")); } diff --git a/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs index 6c154fa268..6a133d8e73 100644 --- a/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/CheckBoxTests.cs @@ -1,4 +1,5 @@ -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using Xunit; namespace Avalonia.IntegrationTests.Appium @@ -6,21 +7,21 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class CheckBoxTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public CheckBoxTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("CheckBox"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("CheckBox")); tab.Click(); } [Fact] public void UncheckedCheckBox() { - var checkBox = _session.FindElementByAccessibilityId("UncheckedCheckBox"); + var checkBox = _session.FindElement(MobileBy.AccessibilityId("UncheckedCheckBox")); Assert.Equal("Unchecked", checkBox.GetName()); Assert.Equal(false, checkBox.GetIsChecked()); @@ -32,7 +33,7 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void CheckedCheckBox() { - var checkBox = _session.FindElementByAccessibilityId("CheckedCheckBox"); + var checkBox = _session.FindElement(MobileBy.AccessibilityId("CheckedCheckBox")); Assert.Equal("Checked", checkBox.GetName()); Assert.Equal(true, checkBox.GetIsChecked()); @@ -44,7 +45,7 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void ThreeStateCheckBox() { - var checkBox = _session.FindElementByAccessibilityId("ThreeStateCheckBox"); + var checkBox = _session.FindElement(MobileBy.AccessibilityId("ThreeStateCheckBox")); Assert.Equal("ThreeState", checkBox.GetName()); Assert.Null(checkBox.GetIsChecked()); diff --git a/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs index 9e35d366d2..ea9ab432da 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs @@ -6,27 +6,27 @@ namespace Avalonia.IntegrationTests.Appium { public abstract class ComboBoxTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ComboBoxTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("ComboBox"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("ComboBox")); tab.Click(); } [Fact] public void Can_Change_Selection_Using_Mouse() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); - _session.FindElementByAccessibilityId("ComboBoxSelectFirst").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectFirst")).Click(); Assert.Equal("Item 0", comboBox.GetComboBoxValue()); comboBox.Click(); - _session.FindElementByName("Item 1").SendClick(); + _session.FindElement(MobileBy.Name("Item 1")).SendClick(); Assert.Equal("Item 1", comboBox.GetComboBoxValue()); } @@ -34,13 +34,13 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void Can_Change_Selection_From_Unselected_Using_Mouse() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); - _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectionClear")).Click(); Assert.Equal(string.Empty, comboBox.GetComboBoxValue()); comboBox.Click(); - _session.FindElementByName("Item 0").SendClick(); + _session.FindElement(MobileBy.Name("Item 0")).SendClick(); Assert.Equal("Item 0", comboBox.GetComboBoxValue()); } @@ -48,13 +48,13 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void Can_Change_Selection_With_Keyboard_When_Closed() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); - var wrap = _session.FindElementByAccessibilityId("ComboBoxWrapSelection"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); + var wrap = _session.FindElement(MobileBy.AccessibilityId("ComboBoxWrapSelection")); if (wrap.GetIsChecked() != false) wrap.Click(); - _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectionClear")).Click(); comboBox.SendKeys(Keys.ArrowDown); Assert.Equal("Item 0", comboBox.GetComboBoxValue()); @@ -75,13 +75,13 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void Can_Change_Wrapping_Selection_With_Keyboard_When_Closed() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); - var wrap = _session.FindElementByAccessibilityId("ComboBoxWrapSelection"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); + var wrap = _session.FindElement(MobileBy.AccessibilityId("ComboBoxWrapSelection")); if (wrap.GetIsChecked() != true) wrap.Click(); - _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectionClear")).Click(); comboBox.SendKeys(Keys.ArrowDown); Assert.Equal("Item 0", comboBox.GetComboBoxValue()); @@ -105,15 +105,15 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void Can_Change_Selection_When_Open_With_Keyboard() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); - _session.FindElementByAccessibilityId("ComboBoxSelectFirst").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectFirst")).Click(); Assert.Equal("Item 0", comboBox.GetComboBoxValue()); comboBox.SendKeys(Keys.LeftAlt + Keys.ArrowDown); comboBox.SendKeys(Keys.ArrowDown); - var item = _session.FindElementByName("Item 1"); + var item = _session.FindElement(MobileBy.Name("Item 1")); item.SendKeys(Keys.Enter); Assert.Equal("Item 1", comboBox.GetComboBoxValue()); @@ -122,15 +122,15 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void Can_Change_Selection_When_Open_With_Keyboard_From_Unselected() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); - _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectionClear")).Click(); Assert.Equal(string.Empty, comboBox.GetComboBoxValue()); comboBox.SendKeys(Keys.LeftAlt + Keys.ArrowDown); comboBox.SendKeys(Keys.ArrowDown); - var item = _session.FindElementByName("Item 0"); + var item = _session.FindElement(MobileBy.Name("Item 0")); item.SendKeys(Keys.Enter); Assert.Equal("Item 0", comboBox.GetComboBoxValue()); @@ -139,15 +139,15 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void Can_Cancel_Keyboard_Selection_With_Escape() { - var comboBox = _session.FindElementByAccessibilityId("BasicComboBox"); + var comboBox = _session.FindElement(MobileBy.AccessibilityId("BasicComboBox")); - _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click(); + _session.FindElement(MobileBy.AccessibilityId("ComboBoxSelectionClear")).Click(); Assert.Equal(string.Empty, comboBox.GetComboBoxValue()); comboBox.SendKeys(Keys.LeftAlt + Keys.ArrowDown); comboBox.SendKeys(Keys.ArrowDown); - var item = _session.FindElementByName("Item 0"); + var item = _session.FindElement(MobileBy.Name("Item 0")); item.SendKeys(Keys.Escape); Assert.Equal(string.Empty, comboBox.GetComboBoxValue()); diff --git a/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs b/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs index bdc5ca5f41..55c2f14d97 100644 --- a/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs +++ b/tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs @@ -21,7 +21,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 +33,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); } @@ -46,20 +46,20 @@ namespace Avalonia.IntegrationTests.Appium protected virtual void ConfigureWin32Options(AppiumOptions options) { var path = Path.GetFullPath(TestAppPath); - options.AddAdditionalCapability(MobileCapabilityType.App, path); - options.AddAdditionalCapability(MobileCapabilityType.PlatformName, MobilePlatform.Windows); - options.AddAdditionalCapability(MobileCapabilityType.DeviceName, "WindowsPC"); + options.AddAdditionalAppiumOption(MobileCapabilityType.App, path); + options.AddAdditionalAppiumOption(MobileCapabilityType.PlatformName, MobilePlatform.Windows); + options.AddAdditionalAppiumOption(MobileCapabilityType.DeviceName, "WindowsPC"); } protected virtual void ConfigureMacOptions(AppiumOptions options) { - options.AddAdditionalCapability("appium:bundleId", TestAppBundleId); - options.AddAdditionalCapability(MobileCapabilityType.PlatformName, MobilePlatform.MacOS); - options.AddAdditionalCapability(MobileCapabilityType.AutomationName, "mac2"); - options.AddAdditionalCapability("appium:showServerLogs", true); + options.AddAdditionalAppiumOption("appium:bundleId", TestAppBundleId); + options.AddAdditionalAppiumOption("appium:showServerLogs", true); + options.AutomationName = "mac2"; + options.PlatformName = MobilePlatform.MacOS; } - public AppiumDriver Session { get; } + public AppiumDriver Session { get; } public void Dispose() { diff --git a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs index 99c30085d6..6b52c8b963 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs @@ -12,40 +12,40 @@ using Xunit; namespace Avalonia.IntegrationTests.Appium { public record class WindowChrome( - AppiumWebElement? Close, - AppiumWebElement? Minimize, - AppiumWebElement? Maximize, - AppiumWebElement? FullScreen); + AppiumElement? Close, + AppiumElement? Minimize, + AppiumElement? Maximize, + AppiumElement? FullScreen); internal static class ElementExtensions { - public static IReadOnlyList GetChildren(this AppiumWebElement element) => - element.FindElementsByXPath("*/*"); + public static IReadOnlyList GetChildren(this AppiumElement element) => + element.FindElements(MobileBy.XPath("*/*")); - public static WindowChrome GetChromeButtons(this AppiumWebElement window) + public static WindowChrome GetChromeButtons(this AppiumElement window) { if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - var closeButton = window.FindElementsByAccessibilityId("_XCUI:CloseWindow").FirstOrDefault(); - var fullscreenButton = window.FindElementsByAccessibilityId("_XCUI:FullScreenWindow").FirstOrDefault(); - var minimizeButton = window.FindElementsByAccessibilityId("_XCUI:MinimizeWindow").FirstOrDefault(); - var zoomButton = window.FindElementsByAccessibilityId("_XCUI:ZoomWindow").FirstOrDefault(); + var closeButton = window.FindElements(MobileBy.AccessibilityId("_XCUI:CloseWindow")).FirstOrDefault(); + var fullscreenButton = window.FindElements(MobileBy.AccessibilityId("_XCUI:FullScreenWindow")).FirstOrDefault(); + var minimizeButton = window.FindElements(MobileBy.AccessibilityId("_XCUI:MinimizeWindow")).FirstOrDefault(); + var zoomButton = window.FindElements(MobileBy.AccessibilityId("_XCUI:ZoomWindow")).FirstOrDefault(); return new(closeButton, minimizeButton, zoomButton, fullscreenButton); } throw new NotSupportedException("GetChromeButtons not supported on this platform."); } - public static string GetComboBoxValue(this AppiumWebElement element) + public static string GetComboBoxValue(this AppiumElement element) { return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? element.Text : element.GetAttribute("value"); } - public static string GetName(this AppiumWebElement element) => GetAttribute(element, "Name", "title"); + public static string GetName(this AppiumElement element) => GetAttribute(element, "Name", "title"); - public static bool? GetIsChecked(this AppiumWebElement element) => + public static bool? GetIsChecked(this AppiumElement element) => GetAttribute(element, "Toggle.ToggleState", "value") switch { "0" => false, @@ -54,11 +54,11 @@ namespace Avalonia.IntegrationTests.Appium _ => throw new ArgumentOutOfRangeException($"Unexpected IsChecked value.") }; - public static bool GetIsFocused(this AppiumWebElement element) + public static bool GetIsFocused(this AppiumElement element) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - var active = element.WrappedDriver.SwitchTo().ActiveElement() as AppiumWebElement; + var active = element.WrappedDriver.SwitchTo().ActiveElement() as AppiumElement; return element.Id == active?.Id; } else @@ -75,7 +75,7 @@ namespace Avalonia.IntegrationTests.Appium /// /// An object which when disposed will cause the newly opened window to close. /// - public static IDisposable OpenWindowWithClick(this AppiumWebElement element) + public static IDisposable OpenWindowWithClick(this AppiumElement element) { var session = element.WrappedDriver; @@ -83,7 +83,7 @@ namespace Avalonia.IntegrationTests.Appium { var oldHandle = session.CurrentWindowHandle; var oldHandles = session.WindowHandles.ToList(); - var oldChildWindows = session.FindElements(By.XPath("//Window")); + var oldChildWindows = session.FindElements(MobileBy.XPath("//Window")); element.Click(); @@ -105,7 +105,7 @@ namespace Avalonia.IntegrationTests.Appium // If a new window handle hasn't been added to the session then it's likely // that a child window was opened. These don't appear in session.WindowHandles // so we have to use an XPath query to get hold of it. - var newChildWindows = session.FindElements(By.XPath("//Window")); + var newChildWindows = session.FindElements(MobileBy.XPath("//Window")); var childWindow = Assert.Single(newChildWindows.Except(oldChildWindows)); return Disposable.Create(() => @@ -116,7 +116,7 @@ namespace Avalonia.IntegrationTests.Appium } else { - var oldWindows = session.FindElements(By.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")); + var oldWindows = session.FindElements(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")); var oldWindowTitles = oldWindows.ToDictionary(x => x.Text); element.Click(); @@ -124,7 +124,7 @@ namespace Avalonia.IntegrationTests.Appium // Wait for animations to run. Thread.Sleep(1000); - var newWindows = session.FindElements(By.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")); + var newWindows = session.FindElements(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")); // Try to find the new window by looking for a window with a title that didn't exist before the button // was clicked. Sometimes it seems that when a window becomes fullscreen, all other windows in the @@ -141,18 +141,18 @@ namespace Avalonia.IntegrationTests.Appium { // TODO: We should be able to use Cmd+W here but Avalonia apps don't seem to have this shortcut // set up by default. - var windows = session.FindElements(By.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")); + var windows = session.FindElements(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")); var text = windows.Select(x => x.Text).ToList(); - var newWindow = session.FindElements(By.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")) + var newWindow = session.FindElements(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")) .First(x => x.Text == newWindowTitle); - var close = ((AppiumWebElement)newWindow).FindElementByAccessibilityId("_XCUI:CloseWindow"); + var close = ((AppiumElement)newWindow).FindElement(MobileBy.AccessibilityId("_XCUI:CloseWindow")); close!.Click(); Thread.Sleep(1000); }); } } - public static void SendClick(this AppiumWebElement element) + public static void SendClick(this AppiumElement element) { // The Click() method seems to correspond to accessibilityPerformPress on macOS but certain controls // such as list items don't support this action, so instead simulate a physical click as VoiceOver @@ -160,12 +160,12 @@ namespace Avalonia.IntegrationTests.Appium new Actions(element.WrappedDriver).MoveToElement(element).Click().Perform(); } - public static void MovePointerOver(this AppiumWebElement element) + public static void MovePointerOver(this AppiumElement element) { new Actions(element.WrappedDriver).MoveToElement(element).Perform(); } - public static string GetAttribute(AppiumWebElement element, string windows, string macOS) + public static string GetAttribute(AppiumElement element, string windows, string macOS) { return element.GetAttribute(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? windows : macOS); } diff --git a/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs b/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs index 775ee723cb..c33eb83939 100644 --- a/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/GestureTests.cs @@ -1,5 +1,6 @@ using System; using System.Threading; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Interactions; using Xunit; @@ -9,24 +10,24 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class GestureTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public GestureTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Gestures"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Gestures")); tab.Click(); - var clear = _session.FindElementByAccessibilityId("ResetGestures"); + var clear = _session.FindElement(MobileBy.AccessibilityId("ResetGestures")); clear.Click(); } [Fact] public void Tapped_Is_Raised() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session).Click(border).Perform(); @@ -36,8 +37,8 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void Tapped_Is_Raised_Slow() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session).ClickAndHold(border).Perform(); @@ -51,8 +52,8 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void Tapped_Is_Not_Raised_For_Drag() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session) .ClickAndHold(border) @@ -66,8 +67,8 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void DoubleTapped_Is_Raised() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session).DoubleClick(border).Perform(); @@ -77,8 +78,8 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows | TestPlatforms.Linux)] public void DoubleTapped_Is_Raised_2() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session).ClickAndHold(border).Release().Perform(); @@ -101,8 +102,8 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void DoubleTapped_Is_Raised_Not_Raised_If_Too_Slow() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session).ClickAndHold(border).Release().Perform(); @@ -117,8 +118,8 @@ namespace Avalonia.IntegrationTests.Appium public void DoubleTapped_Is_Raised_After_Control_Changes() { // #8733 - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session) .MoveToElement(border) @@ -135,8 +136,8 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void RightTapped_Is_Raised() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); new Actions(_session).ContextClick(border).Perform(); @@ -146,8 +147,8 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.MacOS)] public void RightTapped_Is_Raised_2() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); var device = new PointerInputDevice(PointerKind.Mouse); var b = new ActionBuilder(); @@ -163,8 +164,8 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.MacOS)] public void RightTapped_Is_Not_Raised_For_Drag() { - var border = _session.FindElementByAccessibilityId("GestureBorder"); - var lastGesture = _session.FindElementByAccessibilityId("LastGesture"); + var border = _session.FindElement(MobileBy.AccessibilityId("GestureBorder")); + var lastGesture = _session.FindElement(MobileBy.AccessibilityId("LastGesture")); var device = new PointerInputDevice(PointerKind.Mouse); var b = new ActionBuilder(); diff --git a/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs index 5c81c20af1..c6d5cb9a47 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs @@ -9,14 +9,14 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class ListBoxTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ListBoxTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("ListBox"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("ListBox")); tab.Click(); } @@ -24,8 +24,8 @@ namespace Avalonia.IntegrationTests.Appium public void Can_Select_Item_By_Clicking() { var listBox = GetTarget(); - var item2 = listBox.FindElementByName("Item 2"); - var item4 = listBox.FindElementByName("Item 4"); + var item2 = listBox.FindElement(MobileBy.Name("Item 2")); + var item4 = listBox.FindElement(MobileBy.Name("Item 4")); Assert.False(item2.Selected); Assert.False(item4.Selected); @@ -43,8 +43,8 @@ namespace Avalonia.IntegrationTests.Appium public void Can_Select_Items_By_Ctrl_Clicking() { var listBox = GetTarget(); - var item2 = listBox.FindElementByName("Item 2"); - var item4 = listBox.FindElementByName("Item 4"); + var item2 = listBox.FindElement(MobileBy.Name("Item 2")); + var item4 = listBox.FindElement(MobileBy.Name("Item 4")); Assert.False(item2.Selected); Assert.False(item4.Selected); @@ -65,9 +65,9 @@ namespace Avalonia.IntegrationTests.Appium public void Can_Select_Range_By_Shift_Clicking() { var listBox = GetTarget(); - var item2 = listBox.FindElementByName("Item 2"); - var item3 = listBox.FindElementByName("Item 3"); - var item4 = listBox.FindElementByName("Item 4"); + var item2 = listBox.FindElement(MobileBy.Name("Item 2")); + var item3 = listBox.FindElement(MobileBy.Name("Item 3")); + var item4 = listBox.FindElement(MobileBy.Name("Item 4")); Assert.False(item2.Selected); Assert.False(item3.Selected); @@ -94,10 +94,10 @@ namespace Avalonia.IntegrationTests.Appium Assert.True(children.Count < 100); } - private AppiumWebElement GetTarget() + private AppiumElement GetTarget() { - _session.FindElementByAccessibilityId("ListBoxSelectionClear").Click(); - return _session.FindElementByAccessibilityId("BasicListBox"); + _session.FindElement(MobileBy.AccessibilityId("ListBoxSelectionClear")).Click(); + return _session.FindElement(MobileBy.AccessibilityId("BasicListBox")); } } } diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index 5f57dfbc19..2fa58fbe87 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -9,51 +9,51 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public abstract class MenuTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public MenuTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Menu"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Menu")); tab.Click(); - var reset = _session.FindElementByAccessibilityId("MenuClickedMenuItemReset"); + var reset = _session.FindElement(MobileBy.AccessibilityId("MenuClickedMenuItemReset")); reset.Click(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("None", clickedMenuItem.Text); } [Fact] public void Click_Child() { - var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + var rootMenuItem = _session.FindElement(MobileBy.AccessibilityId("RootMenuItem")); rootMenuItem.SendClick(); - var childMenuItem = _session.FindElementByAccessibilityId("Child1MenuItem"); + var childMenuItem = _session.FindElement(MobileBy.AccessibilityId("Child1MenuItem")); childMenuItem.SendClick(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Child 1", clickedMenuItem.Text); } [Fact] public void Click_Grandchild() { - var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + var rootMenuItem = _session.FindElement(MobileBy.AccessibilityId("RootMenuItem")); rootMenuItem.SendClick(); - var childMenuItem = _session.FindElementByAccessibilityId("Child2MenuItem"); + var childMenuItem = _session.FindElement(MobileBy.AccessibilityId("Child2MenuItem")); childMenuItem.SendClick(); - var grandchildMenuItem = _session.FindElementByAccessibilityId("GrandchildMenuItem"); + var grandchildMenuItem = _session.FindElement(MobileBy.AccessibilityId("GrandchildMenuItem")); grandchildMenuItem.SendClick(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Grandchild", clickedMenuItem.Text); } @@ -67,7 +67,7 @@ namespace Avalonia.IntegrationTests.Appium .SendKeys(Keys.Down + Keys.Enter) .Perform(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Child 1", clickedMenuItem.Text); } @@ -81,7 +81,7 @@ namespace Avalonia.IntegrationTests.Appium .SendKeys(Keys.Down + Keys.Down + Keys.Right + Keys.Enter) .Perform(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Grandchild", clickedMenuItem.Text); } @@ -95,7 +95,7 @@ namespace Avalonia.IntegrationTests.Appium .SendKeys("rc") .Perform(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Child 1", clickedMenuItem.Text); } @@ -109,14 +109,14 @@ namespace Avalonia.IntegrationTests.Appium .SendKeys("rhg") .Perform(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Grandchild", clickedMenuItem.Text); } [PlatformFact(TestPlatforms.Windows)] public void Select_Child_With_Click_Arrow_Keys() { - var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + var rootMenuItem = _session.FindElement(MobileBy.AccessibilityId("RootMenuItem")); rootMenuItem.SendClick(); MovePointerOutOfTheWay(); @@ -125,14 +125,14 @@ namespace Avalonia.IntegrationTests.Appium .SendKeys(Keys.Down + Keys.Enter) .Perform(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Child 1", clickedMenuItem.Text); } [PlatformFact(TestPlatforms.Windows)] public void Select_Grandchild_With_Click_Arrow_Keys() { - var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + var rootMenuItem = _session.FindElement(MobileBy.AccessibilityId("RootMenuItem")); rootMenuItem.SendClick(); MovePointerOutOfTheWay(); @@ -141,18 +141,18 @@ namespace Avalonia.IntegrationTests.Appium .SendKeys(Keys.Down + Keys.Down + Keys.Right + Keys.Enter) .Perform(); - var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + var clickedMenuItem = _session.FindElement(MobileBy.AccessibilityId("ClickedMenuItem")); Assert.Equal("_Grandchild", clickedMenuItem.Text); } [PlatformFact(TestPlatforms.Windows)] public void Child_AcceleratorKey() { - var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + var rootMenuItem = _session.FindElement(MobileBy.AccessibilityId("RootMenuItem")); rootMenuItem.SendClick(); - var childMenuItem = _session.FindElementByAccessibilityId("Child1MenuItem"); + var childMenuItem = _session.FindElement(MobileBy.AccessibilityId("Child1MenuItem")); Assert.Equal("Ctrl+O", childMenuItem.GetAttribute("AcceleratorKey")); } @@ -161,12 +161,12 @@ namespace Avalonia.IntegrationTests.Appium public void PointerOver_Does_Not_Steal_Focus() { // Issue #7906 - var textBox = _session.FindElementByAccessibilityId("MenuFocusTest"); + var textBox = _session.FindElement(MobileBy.AccessibilityId("MenuFocusTest")); textBox.Click(); Assert.True(textBox.GetIsFocused()); - var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + var rootMenuItem = _session.FindElement(MobileBy.AccessibilityId("RootMenuItem")); rootMenuItem.MovePointerOver(); Assert.True(textBox.GetIsFocused()); @@ -177,8 +177,8 @@ namespace Avalonia.IntegrationTests.Appium // Move the pointer to the menu tab item so that it's not over the menu in preparation // for key press tests. This prevents the mouse accidentially selecting the wrong item // by hovering. - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Menu"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Menu")); tab.MovePointerOver(); } diff --git a/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs index 290ebf70e6..7b1f985e05 100644 --- a/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/NativeMenuTests.cs @@ -1,4 +1,5 @@ using System.Threading; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using Xunit; @@ -7,29 +8,29 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class NativeMenuTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public NativeMenuTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Automation"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Automation")); tab.Click(); } [PlatformFact(TestPlatforms.MacOS)] public void MacOS_View_Menu_Select_Button_Tab() { - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var buttonTab = tabs.FindElementByName("Button"); - var menuBar = _session.FindElementByXPath("/XCUIElementTypeApplication/XCUIElementTypeMenuBar"); - var viewMenu = menuBar.FindElementByName("View"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var buttonTab = tabs.FindElement(MobileBy.Name("Button")); + var menuBar = _session.FindElement(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeMenuBar")); + var viewMenu = menuBar.FindElement(MobileBy.Name("View")); Assert.False(buttonTab.Selected); viewMenu.Click(); - var buttonMenu = viewMenu.FindElementByName("Button"); + var buttonMenu = viewMenu.FindElement(MobileBy.Name("Button")); buttonMenu.Click(); Assert.True(buttonTab.Selected); @@ -38,14 +39,14 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.Windows)] public void Win32_View_Menu_Select_Button_Tab() { - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var buttonTab = tabs.FindElementByName("Button"); - var viewMenu = _session.FindElementByXPath("//MenuItem[@Name='View']"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var buttonTab = tabs.FindElement(MobileBy.Name("Button")); + var viewMenu = _session.FindElement(MobileBy.XPath("//MenuItem[@Name='View']")); Assert.False(buttonTab.Selected); viewMenu.Click(); - var buttonMenu = viewMenu.FindElementByName("Button"); + var buttonMenu = viewMenu.FindElement(MobileBy.Name("Button")); buttonMenu.Click(); Assert.True(buttonTab.Selected); @@ -54,42 +55,42 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.MacOS)] public void MacOS_Sanitizes_Access_Key_Markers_When_Included_In_Menu_Title() { - var menuBar = _session.FindElementByXPath("/XCUIElementTypeApplication/XCUIElementTypeMenuBar"); + var menuBar = _session.FindElement(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeMenuBar")); - Assert.True(menuBar.FindElementsByName("_Options").Count == 0); - Assert.True(menuBar.FindElementsByName("Options").Count == 1); + Assert.True(menuBar.FindElements(MobileBy.Name("_Options")).Count == 0); + Assert.True(menuBar.FindElements(MobileBy.Name("Options")).Count == 1); } [PlatformFact(TestPlatforms.Windows)] public void Win32_Avalonia_Menu_Has_ToolTip_If_Defined() { - var viewMenu = _session.FindElementByXPath("//MenuItem[@Name='View']"); + var viewMenu = _session.FindElement(MobileBy.XPath("//MenuItem[@Name='View']")); viewMenu.Click(); - var buttonMenuItem = viewMenu.FindElementByName("Button"); + var buttonMenuItem = viewMenu.FindElement(MobileBy.Name("Button")); buttonMenuItem.MovePointerOver(); // Wait for tooltip to open. Thread.Sleep(2000); - var toolTipCandidates = _session.FindElementsByClassName("TextBlock"); + var toolTipCandidates = _session.FindElements(MobileBy.ClassName("TextBlock")); Assert.Contains(toolTipCandidates, x => x.Text == "Tip:Button"); } [PlatformFact(TestPlatforms.MacOS, Skip = "Flaky test")] public void MacOS_Native_Menu_Has_ToolTip_If_Defined() { - var menuBar = _session.FindElementByXPath("/XCUIElementTypeApplication/XCUIElementTypeMenuBar"); - var viewMenu = menuBar.FindElementByName("View"); + var menuBar = _session.FindElement(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeMenuBar")); + var viewMenu = menuBar.FindElement(MobileBy.Name("View")); viewMenu.Click(); - var buttonMenuItem = viewMenu.FindElementByName("Button"); + var buttonMenuItem = viewMenu.FindElement(MobileBy.Name("Button")); buttonMenuItem.MovePointerOver(); // Wait for tooltip to open. Thread.Sleep(4000); - var toolTipCandidates = _session.FindElementsByClassName("XCUIElementTypeStaticText"); + var toolTipCandidates = _session.FindElements(MobileBy.ClassName("XCUIElementTypeStaticText")); Assert.Contains(toolTipCandidates, x => x.Text == "Tip:Button"); } } diff --git a/tests/Avalonia.IntegrationTests.Appium/OverlayPopupsAppFixture.cs b/tests/Avalonia.IntegrationTests.Appium/OverlayPopupsAppFixture.cs index 1f8646888d..65fceabfc3 100644 --- a/tests/Avalonia.IntegrationTests.Appium/OverlayPopupsAppFixture.cs +++ b/tests/Avalonia.IntegrationTests.Appium/OverlayPopupsAppFixture.cs @@ -7,13 +7,13 @@ namespace Avalonia.IntegrationTests.Appium protected override void ConfigureWin32Options(AppiumOptions options) { base.ConfigureWin32Options(options); - options.AddAdditionalCapability("appArguments", "--overlayPopups"); + options.AddAdditionalAppiumOption("appArguments", "--overlayPopups"); } protected override void ConfigureMacOptions(AppiumOptions options) { base.ConfigureMacOptions(options); - options.AddAdditionalCapability("appium:arguments", new[] { "--overlayPopups" }); + options.AddAdditionalAppiumOption("appium:arguments", new[] { "--overlayPopups" }); } } } diff --git a/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs b/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs index 26a8577cb0..46af701e29 100644 --- a/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/RadioButtonTests.cs @@ -1,4 +1,5 @@ -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using Xunit; namespace Avalonia.IntegrationTests.Appium @@ -6,21 +7,21 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class RadioButtonTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public RadioButtonTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - tabs.FindElementByName("RadioButton").Click(); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + tabs.FindElement(MobileBy.Name("RadioButton")).Click(); } [Fact] public void RadioButton_IsChecked_True_When_Clicked() { - var button = _session.FindElementByAccessibilityId("BasicRadioButton"); + var button = _session.FindElement(MobileBy.AccessibilityId("BasicRadioButton")); Assert.False(button.GetIsChecked()); button.Click(); Assert.True(button.GetIsChecked()); @@ -29,8 +30,8 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void ThreeState_RadioButton_IsChecked_False_When_Other_ThreeState_RadioButton_Checked() { - var button1 = _session.FindElementByAccessibilityId("ThreeStatesRadioButton1"); - var button2 = _session.FindElementByAccessibilityId("ThreeStatesRadioButton2"); + var button1 = _session.FindElement(MobileBy.AccessibilityId("ThreeStatesRadioButton1")); + var button2 = _session.FindElement(MobileBy.AccessibilityId("ThreeStatesRadioButton2")); Assert.True(button1.GetIsChecked()); Assert.False(button2.GetIsChecked()); button2.Click(); diff --git a/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs b/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs index 9d5df2fb46..e02248eb13 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs @@ -1,4 +1,5 @@ -using OpenQA.Selenium.Appium; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; using Xunit; namespace Avalonia.IntegrationTests.Appium @@ -6,21 +7,21 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class ScrollBarTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public ScrollBarTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("ScrollBar"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("ScrollBar")); tab.Click(); } [Fact] public void ScrollBar_Increases_Value_By_LargeChange_When_IncreaseButton_Is_Clicked() { - var button = _session.FindElementByAccessibilityId("MyScrollBar"); + var button = _session.FindElement(MobileBy.AccessibilityId("MyScrollBar")); Assert.True(double.Parse(button.Text) == 20); button.Click(); diff --git a/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs b/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs index fa83ee199c..6d304fa449 100644 --- a/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/SliderTests.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using OpenQA.Selenium; using OpenQA.Selenium.Appium; using OpenQA.Selenium.Interactions; using Xunit; @@ -9,32 +10,32 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class SliderTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public SliderTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Slider"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Slider")); tab.Click(); - var reset = _session.FindElementByAccessibilityId("ResetSliders"); + var reset = _session.FindElement(MobileBy.AccessibilityId("ResetSliders")); reset.Click(); } [Fact] public void Horizontal_Changes_Value_Dragging_Thumb_Right() { - var slider = _session.FindElementByAccessibilityId("HorizontalSlider"); - var thumb = slider.FindElementByAccessibilityId("thumb"); + var slider = _session.FindElement(MobileBy.AccessibilityId("HorizontalSlider")); + var thumb = slider.FindElement(MobileBy.AccessibilityId("thumb")); var initialThumbRect = thumb.Rect; new Actions(_session).ClickAndHold(thumb).MoveByOffset(100, 0).Release().Perform(); var value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture)); var boundValue = double.Parse( - _session.FindElementByAccessibilityId("HorizontalSliderValue").Text, + _session.FindElement(MobileBy.AccessibilityId("HorizontalSliderValue")).Text, CultureInfo.InvariantCulture); Assert.True(value > 50); @@ -47,15 +48,15 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void Horizontal_Changes_Value_Dragging_Thumb_Left() { - var slider = _session.FindElementByAccessibilityId("HorizontalSlider"); - var thumb = slider.FindElementByAccessibilityId("thumb"); + var slider = _session.FindElement(MobileBy.AccessibilityId("HorizontalSlider")); + var thumb = slider.FindElement(MobileBy.AccessibilityId("thumb")); var initialThumbRect = thumb.Rect; new Actions(_session).ClickAndHold(thumb).MoveByOffset(-100, 0).Release().Perform(); var value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture)); var boundValue = double.Parse( - _session.FindElementByAccessibilityId("HorizontalSliderValue").Text, + _session.FindElement(MobileBy.AccessibilityId("HorizontalSliderValue")).Text, CultureInfo.InvariantCulture); Assert.True(value < 50); @@ -68,15 +69,15 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void Horizontal_Changes_Value_When_Clicking_Increase_Button() { - var slider = _session.FindElementByAccessibilityId("HorizontalSlider"); - var thumb = slider.FindElementByAccessibilityId("thumb"); + var slider = _session.FindElement(MobileBy.AccessibilityId("HorizontalSlider")); + var thumb = slider.FindElement(MobileBy.AccessibilityId("thumb")); var initialThumbRect = thumb.Rect; - new Actions(_session).MoveToElement(slider, 100, 0, MoveToElementOffsetOrigin.Center).Click().Perform(); + new Actions(_session).MoveToElement(slider, 100, 0).Click().Perform(); var value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture)); var boundValue = double.Parse( - _session.FindElementByAccessibilityId("HorizontalSliderValue").Text, + _session.FindElement(MobileBy.AccessibilityId("HorizontalSliderValue")).Text, CultureInfo.InvariantCulture); Assert.True(value > 50); @@ -89,15 +90,15 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void Horizontal_Changes_Value_When_Clicking_Decrease_Button() { - var slider = _session.FindElementByAccessibilityId("HorizontalSlider"); - var thumb = slider.FindElementByAccessibilityId("thumb"); + var slider = _session.FindElement(MobileBy.AccessibilityId("HorizontalSlider")); + var thumb = slider.FindElement(MobileBy.AccessibilityId("thumb")); var initialThumbRect = thumb.Rect; - new Actions(_session).MoveToElement(slider, -100, 0, MoveToElementOffsetOrigin.Center).Click().Perform(); + new Actions(_session).MoveToElement(slider, -100, 0).Click().Perform(); var value = Math.Round(double.Parse(slider.Text, CultureInfo.InvariantCulture)); var boundValue = double.Parse( - _session.FindElementByAccessibilityId("HorizontalSliderValue").Text, + _session.FindElement(MobileBy.AccessibilityId("HorizontalSliderValue")).Text, CultureInfo.InvariantCulture); Assert.True(value < 50); diff --git a/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs b/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs index eece0d4c17..48c3b80641 100644 --- a/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs @@ -15,14 +15,14 @@ namespace Avalonia.IntegrationTests.Appium [Collection("Default")] public class WindowTests { - private readonly AppiumDriver _session; + private readonly AppiumDriver _session; public WindowTests(DefaultAppFixture fixture) { _session = fixture.Session; - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Window"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Window")); tab.Click(); } @@ -90,8 +90,8 @@ namespace Avalonia.IntegrationTests.Appium { try { - _session.FindElementByAccessibilityId("CurrentWindowState").SendClick(); - _session.FindElementByAccessibilityId("WindowStateNormal").SendClick(); + _session.FindElement(MobileBy.AccessibilityId("CurrentWindowState")).SendClick(); + _session.FindElement(MobileBy.AccessibilityId("WindowStateNormal")).SendClick(); // Wait for animations to run. if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) @@ -110,12 +110,12 @@ namespace Avalonia.IntegrationTests.Appium { using (OpenWindow(new Size(400, 400), ShowWindowMode.NonOwned, WindowStartupLocation.Manual)) { - var windowState = _session.FindElementByAccessibilityId("CurrentWindowState"); + var windowState = _session.FindElement(MobileBy.AccessibilityId("CurrentWindowState")); Assert.Equal("Normal", windowState.GetComboBoxValue()); - var window = _session.FindElements(By.XPath("//Window")).First(); + var window = _session.FindElements(MobileBy.XPath("//Window")).First(); new Actions(_session) .KeyDown(Keys.Meta) @@ -126,7 +126,7 @@ namespace Avalonia.IntegrationTests.Appium var original = GetWindowInfo(); windowState.Click(); - _session.FindElementByName("Minimized").SendClick(); + _session.FindElement(MobileBy.Name("Minimized")).SendClick(); new Actions(_session) .KeyDown(Keys.Alt) @@ -147,8 +147,8 @@ namespace Avalonia.IntegrationTests.Appium { using (OpenWindow(new Size(4000, 2200), ShowWindowMode.NonOwned, WindowStartupLocation.Manual)) { - var screenRectTextBox = _session.FindElementByAccessibilityId("CurrentClientSize"); - var measuredWithTextBlock = _session.FindElementByAccessibilityId("CurrentMeasuredWithText"); + var screenRectTextBox = _session.FindElement(MobileBy.AccessibilityId("CurrentClientSize")); + var measuredWithTextBlock = _session.FindElement(MobileBy.AccessibilityId("CurrentMeasuredWithText")); var measuredWithString = measuredWithTextBlock.Text; var workingAreaString = screenRectTextBox.Text; @@ -167,17 +167,17 @@ namespace Avalonia.IntegrationTests.Appium public void ShowMode(ShowWindowMode mode) { using var window = OpenWindow(null, mode, WindowStartupLocation.Manual); - var windowState = _session.FindElementByAccessibilityId("CurrentWindowState"); + var windowState = _session.FindElement(MobileBy.AccessibilityId("CurrentWindowState")); var original = GetWindowInfo(); Assert.Equal("Normal", windowState.GetComboBoxValue()); windowState.Click(); - _session.FindElementByAccessibilityId("WindowStateMaximized").SendClick(); + _session.FindElement(MobileBy.AccessibilityId("WindowStateMaximized")).SendClick(); Assert.Equal("Maximized", windowState.GetComboBoxValue()); windowState.Click(); - _session.FindElementByAccessibilityId("WindowStateNormal").SendClick(); + _session.FindElement(MobileBy.AccessibilityId("WindowStateNormal")).SendClick(); var current = GetWindowInfo(); Assert.Equal(original.Position, current.Position); @@ -187,7 +187,7 @@ namespace Avalonia.IntegrationTests.Appium if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || mode == ShowWindowMode.NonOwned) { windowState.Click(); - _session.FindElementByAccessibilityId("WindowStateFullScreen").SendClick(); + _session.FindElement(MobileBy.AccessibilityId("WindowStateFullScreen")).SendClick(); Assert.Equal("FullScreen", windowState.GetComboBoxValue()); current = GetWindowInfo(); @@ -197,7 +197,7 @@ namespace Avalonia.IntegrationTests.Appium windowState.SendClick(); - _session.FindElementByAccessibilityId("WindowStateNormal").SendClick(); + _session.FindElement(MobileBy.AccessibilityId("WindowStateNormal")).SendClick(); current = GetWindowInfo(); Assert.Equal(original.Position, current.Position); @@ -210,7 +210,7 @@ namespace Avalonia.IntegrationTests.Appium { var clientSize = new Size(400, 400); using var window = OpenWindow(clientSize, ShowWindowMode.NonOwned, WindowStartupLocation.CenterScreen, extendClientArea: true); - var windowState = _session.FindElementByAccessibilityId("CurrentWindowState"); + var windowState = _session.FindElement(MobileBy.AccessibilityId("CurrentWindowState")); var current = GetWindowInfo(); Assert.Equal(current.ClientSize, clientSize); @@ -219,11 +219,11 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void TransparentWindow() { - var showTransparentWindow = _session.FindElementByAccessibilityId("ShowTransparentWindow"); + var showTransparentWindow = _session.FindElement(MobileBy.AccessibilityId("ShowTransparentWindow")); showTransparentWindow.Click(); Thread.Sleep(1000); - var window = _session.FindElementByAccessibilityId("TransparentWindow"); + var window = _session.FindElement(MobileBy.AccessibilityId("TransparentWindow")); var screenshot = window.GetScreenshot(); window.Click(); @@ -239,12 +239,12 @@ namespace Avalonia.IntegrationTests.Appium [Fact] public void TransparentPopup() { - var showTransparentWindow = _session.FindElementByAccessibilityId("ShowTransparentPopup"); + var showTransparentWindow = _session.FindElement(MobileBy.AccessibilityId("ShowTransparentPopup")); showTransparentWindow.Click(); Thread.Sleep(1000); - var window = _session.FindElementByAccessibilityId("TransparentPopupBackground"); - var container = window.FindElementByAccessibilityId("PopupContainer"); + var window = _session.FindElement(MobileBy.AccessibilityId("TransparentPopupBackground")); + var container = window.FindElement(MobileBy.AccessibilityId("PopupContainer")); var screenshot = container.GetScreenshot(); window.Click(); @@ -268,20 +268,20 @@ namespace Avalonia.IntegrationTests.Appium { using (OpenWindow(null, mode, WindowStartupLocation.Manual, canResize: false, extendClientArea: extendClientArea)) { - var secondaryWindow = GetWindow("SecondaryWindow"); - AppiumWebElement? maximizeButton; + var secondaryWindow = GetWindow(_session, "SecondaryWindow"); + AppiumElement? maximizeButton; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { maximizeButton = extendClientArea ? - secondaryWindow.FindElementByXPath("//Button[@Name='Maximize']") : - secondaryWindow.FindElementByXPath("//TitleBar/Button[2]"); + secondaryWindow.FindElement(MobileBy.XPath("//Button[@Name='Maximize']")) : + secondaryWindow.FindElement(MobileBy.XPath("//TitleBar/Button[2]")); } else { maximizeButton = mode == ShowWindowMode.NonOwned ? - secondaryWindow.FindElementByAccessibilityId("_XCUI:FullScreenWindow") : - secondaryWindow.FindElementByAccessibilityId("_XCUI:ZoomWindow"); + secondaryWindow.FindElement(MobileBy.AccessibilityId("_XCUI:FullScreenWindow")) : + secondaryWindow.FindElement(MobileBy.AccessibilityId("_XCUI:ZoomWindow")); } Assert.False(maximizeButton.Enabled); @@ -375,13 +375,13 @@ namespace Avalonia.IntegrationTests.Appium bool canResize = true, bool extendClientArea = false) { - var sizeTextBox = _session.FindElementByAccessibilityId("ShowWindowSize"); - var modeComboBox = _session.FindElementByAccessibilityId("ShowWindowMode"); - var locationComboBox = _session.FindElementByAccessibilityId("ShowWindowLocation"); - var stateComboBox = _session.FindElementByAccessibilityId("ShowWindowState"); - var canResizeCheckBox = _session.FindElementByAccessibilityId("ShowWindowCanResize"); - var showButton = _session.FindElementByAccessibilityId("ShowWindow"); - var extendClientAreaCheckBox = _session.FindElementByAccessibilityId("ShowWindowExtendClientAreaToDecorationsHint"); + var sizeTextBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowSize")); + var modeComboBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowMode")); + var locationComboBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowLocation")); + var stateComboBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowState")); + var canResizeCheckBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowCanResize")); + var showButton = _session.FindElement(MobileBy.AccessibilityId("ShowWindow")); + var extendClientAreaCheckBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowExtendClientAreaToDecorationsHint")); if (size.HasValue) sizeTextBox.SendKeys($"{size.Value.Width}, {size.Value.Height}"); @@ -389,19 +389,19 @@ namespace Avalonia.IntegrationTests.Appium if (modeComboBox.GetComboBoxValue() != mode.ToString()) { modeComboBox.Click(); - _session.FindElementByName(mode.ToString()).SendClick(); + _session.FindElement(MobileBy.Name(mode.ToString())).SendClick(); } if (locationComboBox.GetComboBoxValue() != location.ToString()) { locationComboBox.Click(); - _session.FindElementByName(location.ToString()).SendClick(); + _session.FindElement(MobileBy.Name(location.ToString())).SendClick(); } if (stateComboBox.GetComboBoxValue() != state.ToString()) { stateComboBox.Click(); - _session.FindElementByAccessibilityId($"ShowWindowState{state}").SendClick(); + _session.FindElement(MobileBy.AccessibilityId($"ShowWindowState{state}")).SendClick(); } if (canResizeCheckBox.GetIsChecked() != canResize) @@ -413,18 +413,18 @@ namespace Avalonia.IntegrationTests.Appium return showButton.OpenWindowWithClick(); } - private AppiumWebElement GetWindow(string identifier) + internal static AppiumElement GetWindow(AppiumDriver session, string identifier) { if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { // The Avalonia a11y tree currently exposes two nested Window elements, this is a bug and should be fixed // but in the meantime use the `parent::' selector to return the parent "real" window. - return _session.FindElementByXPath( - $"XCUIElementTypeWindow//*[@identifier='{identifier}']/parent::XCUIElementTypeWindow"); + return session.FindElement(MobileBy.XPath( + $"XCUIElementTypeWindow//*[@identifier='{identifier}']/parent::XCUIElementTypeWindow")); } else { - return _session.FindElementByXPath($"//Window[@AutomationId='{identifier}']"); + return session.FindElement(MobileBy.XPath($"//Window[@AutomationId='{identifier}']")); } } @@ -432,7 +432,7 @@ namespace Avalonia.IntegrationTests.Appium { PixelRect? ReadOwnerRect() { - var text = _session.FindElementByAccessibilityId("CurrentOwnerRect").Text; + var text = _session.FindElement(MobileBy.AccessibilityId("CurrentOwnerRect")).Text; return !string.IsNullOrWhiteSpace(text) ? PixelRect.Parse(text) : null; } @@ -443,13 +443,13 @@ namespace Avalonia.IntegrationTests.Appium try { return new( - Size.Parse(_session.FindElementByAccessibilityId("CurrentClientSize").Text), - Size.Parse(_session.FindElementByAccessibilityId("CurrentFrameSize").Text), - PixelPoint.Parse(_session.FindElementByAccessibilityId("CurrentPosition").Text), + Size.Parse(_session.FindElement(MobileBy.AccessibilityId("CurrentClientSize")).Text), + Size.Parse(_session.FindElement(MobileBy.AccessibilityId("CurrentFrameSize")).Text), + PixelPoint.Parse(_session.FindElement(MobileBy.AccessibilityId("CurrentPosition")).Text), ReadOwnerRect(), - PixelRect.Parse(_session.FindElementByAccessibilityId("CurrentScreenRect").Text), - double.Parse(_session.FindElementByAccessibilityId("CurrentScaling").Text), - Enum.Parse(_session.FindElementByAccessibilityId("CurrentWindowState").Text)); + PixelRect.Parse(_session.FindElement(MobileBy.AccessibilityId("CurrentScreenRect")).Text), + double.Parse(_session.FindElement(MobileBy.AccessibilityId("CurrentScaling")).Text), + Enum.Parse(_session.FindElement(MobileBy.AccessibilityId("CurrentWindowState")).Text)); } catch (OpenQA.Selenium.NoSuchElementException) when (retry++ < 3) { diff --git a/tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs b/tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs index 247198b254..b18559ec29 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) { @@ -26,8 +26,8 @@ namespace Avalonia.IntegrationTests.Appium { try { - var tabs = _session.FindElementByAccessibilityId("MainTabs"); - var tab = tabs.FindElementByName("Window"); + var tabs = _session.FindElement(MobileBy.AccessibilityId("MainTabs")); + var tab = tabs.FindElement(MobileBy.Name("Window")); tab.Click(); return; } @@ -44,7 +44,7 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.MacOS)] public void WindowOrder_Modal_Dialog_Stays_InFront_Of_Parent() { - var mainWindow = _session.FindElementByAccessibilityId("MainWindow"); + var mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Modal, WindowStartupLocation.Manual)) { @@ -83,7 +83,7 @@ namespace Avalonia.IntegrationTests.Appium public void WindowOrder_Modal_Dialog_Stays_InFront_Of_Parent_When_In_Fullscreen() { var mainWindow = GetWindow("MainWindow"); - var fullScreen = mainWindow.FindElementByAccessibilityId("_XCUI:FullScreenWindow"); + var fullScreen = mainWindow.FindElement(MobileBy.AccessibilityId("_XCUI:FullScreenWindow")); fullScreen.Click(); @@ -99,14 +99,14 @@ namespace Avalonia.IntegrationTests.Appium } finally { - _session.FindElementByAccessibilityId("ExitFullscreen").Click(); + _session.FindElement(MobileBy.AccessibilityId("ExitFullscreen")).Click(); } } [PlatformFact(TestPlatforms.MacOS)] public void WindowOrder_Owned_Dialog_Stays_InFront_Of_Parent() { - var mainWindow = _session.FindElementByAccessibilityId("MainWindow"); + var mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Owned, WindowStartupLocation.Manual)) { @@ -119,16 +119,16 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.MacOS)] public void WindowOrder_Owned_Dialog_Stays_InFront_Of_FullScreen_Parent() { - var mainWindow = _session.FindElementByAccessibilityId("MainWindow"); + var mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); // Enter fullscreen - mainWindow.FindElementByAccessibilityId("EnterFullscreen").Click(); + mainWindow.FindElement(MobileBy.AccessibilityId("EnterFullscreen")).Click(); // Wait for fullscreen transition. Thread.Sleep(1000); // Make sure we entered fullscreen. - var windowState = mainWindow.FindElementByAccessibilityId("MainWindowState"); + var windowState = mainWindow.FindElement(MobileBy.AccessibilityId("MainWindowState")); Assert.Equal("FullScreen", windowState.Text); // Open child window. @@ -140,14 +140,14 @@ namespace Avalonia.IntegrationTests.Appium } // Exit fullscreen by menu shortcut Command+R - mainWindow.FindElementByAccessibilityId("ExitFullscreen").Click(); + mainWindow.FindElement(MobileBy.AccessibilityId("ExitFullscreen")).Click(); // Wait for restore transition. Thread.Sleep(1000); // Make sure we exited fullscreen. - mainWindow = _session.FindElementByAccessibilityId("MainWindow"); - windowState = mainWindow.FindElementByAccessibilityId("MainWindowState"); + mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); + windowState = mainWindow.FindElement(MobileBy.AccessibilityId("MainWindowState")); Assert.Equal("Normal", windowState.Text); } @@ -167,21 +167,21 @@ namespace Avalonia.IntegrationTests.Appium public void Does_Not_Switch_Space_From_FullScreen_To_Main_Desktop_When_FullScreen_Window_Clicked() { // Issue #9565 - var mainWindow = _session.FindElementByAccessibilityId("MainWindow"); - AppiumWebElement windowState; + var mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); + AppiumElement windowState; // Open child window. using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Owned, WindowStartupLocation.Manual)) { // Enter fullscreen - mainWindow.FindElementByAccessibilityId("EnterFullscreen").Click(); + mainWindow.FindElement(MobileBy.AccessibilityId("EnterFullscreen")).Click(); // Wait for fullscreen transition. Thread.Sleep(1000); // Make sure we entered fullscreen. - mainWindow = _session.FindElementByAccessibilityId("MainWindow"); - windowState = mainWindow.FindElementByAccessibilityId("MainWindowState"); + mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); + windowState = mainWindow.FindElement(MobileBy.AccessibilityId("MainWindowState")); Assert.Equal("FullScreen", windowState.Text); // Click on main window @@ -189,22 +189,22 @@ namespace Avalonia.IntegrationTests.Appium // Failed here due to #9565: main window is no longer visible as the main space is now shown instead // of the fullscreen space. - mainWindow.FindElementByAccessibilityId("ExitFullscreen").Click(); + mainWindow.FindElement(MobileBy.AccessibilityId("ExitFullscreen")).Click(); // Wait for restore transition. Thread.Sleep(1000); } // Make sure we exited fullscreen. - mainWindow = _session.FindElementByAccessibilityId("MainWindow"); - windowState = mainWindow.FindElementByAccessibilityId("MainWindowState"); + mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); + windowState = mainWindow.FindElement(MobileBy.AccessibilityId("MainWindowState")); Assert.Equal("Normal", windowState.Text); } [PlatformFact(TestPlatforms.MacOS)] public void WindowOrder_NonOwned_Window_Does_Not_Stay_InFront_Of_Parent() { - var mainWindow = _session.FindElementByAccessibilityId("MainWindow"); + var mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); using (OpenWindow(new PixelSize(800, 100), ShowWindowMode.NonOwned, WindowStartupLocation.Manual)) { @@ -214,7 +214,7 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal(2, secondaryWindowIndex); - var sendToBack = _session.FindElementByAccessibilityId("SendToBack"); + var sendToBack = _session.FindElement(MobileBy.AccessibilityId("SendToBack")); sendToBack.Click(); } } @@ -275,7 +275,7 @@ namespace Avalonia.IntegrationTests.Appium using (OpenWindow(new PixelSize(200, 100), mode, WindowStartupLocation.Manual)) { var secondaryWindow = GetWindow("SecondaryWindow"); - var miniaturizeButton = secondaryWindow.FindElementByAccessibilityId("_XCUI:MinimizeWindow"); + var miniaturizeButton = secondaryWindow.FindElement(MobileBy.AccessibilityId("_XCUI:MinimizeWindow")); Assert.False(miniaturizeButton.Enabled); } @@ -289,19 +289,19 @@ namespace Avalonia.IntegrationTests.Appium using (OpenWindow(new PixelSize(200, 100), mode, WindowStartupLocation.Manual)) { var secondaryWindow = GetWindow("SecondaryWindow"); - var miniaturizeButton = secondaryWindow.FindElementByAccessibilityId("_XCUI:MinimizeWindow"); + var miniaturizeButton = secondaryWindow.FindElement(MobileBy.AccessibilityId("_XCUI:MinimizeWindow")); miniaturizeButton.Click(); Thread.Sleep(1000); - var hittable = _session.FindElementsByXPath("/XCUIElementTypeApplication/XCUIElementTypeWindow") + var hittable = _session.FindElements(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")) .Select(x => x.GetAttribute("hittable")).ToList(); Assert.Equal(new[] { "true", "false" }, hittable); - _session.FindElementByAccessibilityId("RestoreAll").Click(); + _session.FindElement(MobileBy.AccessibilityId("RestoreAll")).Click(); Thread.Sleep(1000); - hittable = _session.FindElementsByXPath("/XCUIElementTypeApplication/XCUIElementTypeWindow") + hittable = _session.FindElements(MobileBy.XPath("/XCUIElementTypeApplication/XCUIElementTypeWindow")) .Select(x => x.GetAttribute("hittable")).ToList(); Assert.Equal(new[] { "true", "true" }, hittable); } @@ -310,30 +310,30 @@ namespace Avalonia.IntegrationTests.Appium [PlatformFact(TestPlatforms.MacOS)] public void Hidden_Child_Window_Is_Not_Reshown_When_Parent_Clicked() { - var mainWindow = _session.FindElementByAccessibilityId("MainWindow"); + var mainWindow = _session.FindElement(MobileBy.AccessibilityId("MainWindow")); // We don't use dispose to close the window here, because it seems that hiding and re-showing a window // causes Appium to think it's a different window. OpenWindow(null, ShowWindowMode.Owned, WindowStartupLocation.Manual); var secondaryWindow = GetWindow("SecondaryWindow"); - var hideButton = secondaryWindow.FindElementByAccessibilityId("HideButton"); + var hideButton = secondaryWindow.FindElement(MobileBy.AccessibilityId("HideButton")); hideButton.Click(); - var windows = _session.FindElementsByXPath("XCUIElementTypeWindow"); + var windows = _session.FindElements(MobileBy.XPath("XCUIElementTypeWindow")); Assert.Single(windows); mainWindow.Click(); - windows = _session.FindElementsByXPath("XCUIElementTypeWindow"); + windows = _session.FindElements(MobileBy.XPath("XCUIElementTypeWindow")); Assert.Single(windows); - _session.FindElementByAccessibilityId("RestoreAll").Click(); + _session.FindElement(MobileBy.AccessibilityId("RestoreAll")).Click(); // Close the window manually. secondaryWindow = GetWindow("SecondaryWindow"); - secondaryWindow.FindElementByAccessibilityId("_XCUI:CloseWindow").Click(); + secondaryWindow.FindElement(MobileBy.AccessibilityId("_XCUI:CloseWindow")).Click(); } [PlatformFact(TestPlatforms.MacOS)] @@ -347,16 +347,16 @@ namespace Avalonia.IntegrationTests.Appium // The XPath of the title bar text _should_ be "XCUIElementTypeStaticText" // but Appium seems to put a fake node between the window and the title bar // https://stackoverflow.com/a/71914227/6448 - var titleBar = secondaryWindow.FindElementsByXPath("/*/XCUIElementTypeStaticText").Count; + var titleBar = secondaryWindow.FindElements(MobileBy.XPath("/*/XCUIElementTypeStaticText")).Count; Assert.Equal(0, titleBar); - secondaryWindow.FindElementByAccessibilityId("CurrentSystemDecorations").Click(); - _session.FindElementByAccessibilityId("SystemDecorationsNone").SendClick(); - secondaryWindow.FindElementByAccessibilityId("CurrentSystemDecorations").Click(); - _session.FindElementByAccessibilityId("SystemDecorationsFull").SendClick(); + secondaryWindow.FindElement(MobileBy.AccessibilityId("CurrentSystemDecorations")).Click(); + _session.FindElement(MobileBy.AccessibilityId("SystemDecorationsNone")).SendClick(); + secondaryWindow.FindElement(MobileBy.AccessibilityId("CurrentSystemDecorations")).Click(); + _session.FindElement(MobileBy.AccessibilityId("SystemDecorationsFull")).SendClick(); - titleBar = secondaryWindow.FindElementsByXPath("/*/XCUIElementTypeStaticText").Count; + titleBar = secondaryWindow.FindElements(MobileBy.XPath("/*/XCUIElementTypeStaticText")).Count; Assert.Equal(0, titleBar); } } @@ -393,8 +393,8 @@ namespace Avalonia.IntegrationTests.Appium { if (decorations != SystemDecorations.Full) { - secondaryWindow.FindElementByAccessibilityId("CurrentSystemDecorations").Click(); - _session.FindElementByAccessibilityId("SystemDecorationsFull").SendClick(); + secondaryWindow.FindElement(MobileBy.AccessibilityId("CurrentSystemDecorations")).Click(); + _session.FindElement(MobileBy.AccessibilityId("SystemDecorationsFull")).SendClick(); } } } @@ -408,13 +408,13 @@ namespace Avalonia.IntegrationTests.Appium SystemDecorations systemDecorations = SystemDecorations.Full, bool extendClientArea = false) { - var sizeTextBox = _session.FindElementByAccessibilityId("ShowWindowSize"); - var modeComboBox = _session.FindElementByAccessibilityId("ShowWindowMode"); - var locationComboBox = _session.FindElementByAccessibilityId("ShowWindowLocation"); - var canResizeCheckBox = _session.FindElementByAccessibilityId("ShowWindowCanResize"); - var showButton = _session.FindElementByAccessibilityId("ShowWindow"); - var systemDecorationsComboBox = _session.FindElementByAccessibilityId("ShowWindowSystemDecorations"); - var extendClientAreaCheckBox = _session.FindElementByAccessibilityId("ShowWindowExtendClientAreaToDecorationsHint"); + var sizeTextBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowSize")); + var modeComboBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowMode")); + var locationComboBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowLocation")); + var canResizeCheckBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowCanResize")); + var showButton = _session.FindElement(MobileBy.AccessibilityId("ShowWindow")); + var systemDecorationsComboBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowSystemDecorations")); + var extendClientAreaCheckBox = _session.FindElement(MobileBy.AccessibilityId("ShowWindowExtendClientAreaToDecorationsHint")); if (size.HasValue) sizeTextBox.SendKeys($"{size.Value.Width}, {size.Value.Height}"); @@ -422,13 +422,13 @@ namespace Avalonia.IntegrationTests.Appium if (modeComboBox.GetComboBoxValue() != mode.ToString()) { modeComboBox.Click(); - _session.FindElementByName(mode.ToString()).SendClick(); + _session.FindElement(MobileBy.Name(mode.ToString())).SendClick(); } if (locationComboBox.GetComboBoxValue() != location.ToString()) { locationComboBox.Click(); - _session.FindElementByName(location.ToString()).SendClick(); + _session.FindElement(MobileBy.Name(location.ToString())).SendClick(); } if (canResizeCheckBox.GetIsChecked() != canResize) @@ -437,7 +437,7 @@ namespace Avalonia.IntegrationTests.Appium if (systemDecorationsComboBox.GetComboBoxValue() != systemDecorations.ToString()) { systemDecorationsComboBox.Click(); - _session.FindElementByName(systemDecorations.ToString()).SendClick(); + _session.FindElement(MobileBy.Name(systemDecorations.ToString())).SendClick(); } if (extendClientAreaCheckBox.GetIsChecked() != extendClientArea) @@ -446,18 +446,18 @@ namespace Avalonia.IntegrationTests.Appium return showButton.OpenWindowWithClick(); } - private AppiumWebElement GetWindow(string identifier) + private AppiumElement GetWindow(string identifier) { // The Avalonia a11y tree currently exposes two nested Window elements, this is a bug and should be fixed // but in the meantime use the `parent::' selector to return the parent "real" window. - return _session.FindElementByXPath( - $"XCUIElementTypeWindow//*[@identifier='{identifier}']/parent::XCUIElementTypeWindow"); + return _session.FindElement(MobileBy.XPath( + $"XCUIElementTypeWindow//*[@identifier='{identifier}']/parent::XCUIElementTypeWindow")); } private int GetWindowOrder(string identifier) { var window = GetWindow(identifier); - var order = window.FindElementByXPath("//*[@identifier='CurrentOrder']"); + var order = window.FindElement(MobileBy.XPath("//*[@identifier='CurrentOrder']")); return int.Parse(order.Text); }