diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml index 57f8971aab..b33b2c21e0 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml +++ b/samples/IntegrationTestApp/MainWindow.axaml @@ -71,6 +71,20 @@ + + + + + 0 + + + + + + + None + + diff --git a/samples/IntegrationTestApp/MainWindow.axaml.cs b/samples/IntegrationTestApp/MainWindow.axaml.cs index 5cff7ccdbc..8079472ad8 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml.cs +++ b/samples/IntegrationTestApp/MainWindow.axaml.cs @@ -1,6 +1,7 @@ using System; using Avalonia; using Avalonia.Controls; +using Avalonia.Interactivity; using Avalonia.Markup.Xaml; namespace IntegrationTestApp @@ -37,5 +38,11 @@ namespace IntegrationTestApp viewMenu.Menu.Items.Add(menuItem); } } + + private void MenuClicked(object? sender, RoutedEventArgs e) + { + var clickedMenuItemTextBlock = this.FindControl("ClickedMenuItem"); + clickedMenuItemTextBlock.Text = ((MenuItem)sender!).Header.ToString(); + } } } diff --git a/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs b/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs index 746a919162..cc72c5ce88 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs @@ -26,7 +26,7 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal(string.Empty, comboBox.Text); ((MacElement)comboBox).Click(); - _session.FindElementByName("Bar").ClickListItem(); + _session.FindElementByName("Bar").SendClick(); Assert.Equal("Bar", comboBox.Text); } diff --git a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs index 9e91422c38..0d31e1de27 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs @@ -19,7 +19,7 @@ namespace Avalonia.IntegrationTests.Appium _ => throw new ArgumentOutOfRangeException($"Unexpected IsChecked value.") }; - public static void ClickListItem(this AppiumWebElement element) + public static void SendClick(this AppiumWebElement element) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { @@ -27,7 +27,8 @@ namespace Avalonia.IntegrationTests.Appium } else { - // List items don't respond to performClick on MacOS, so instead send a physical click as VoiceOver + // 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 // does. var action = new Actions(element.WrappedDriver); action.MoveToElement(element); diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index 4a0e5d76ba..e9a433b975 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -8,24 +8,56 @@ namespace Avalonia.IntegrationTests.Appium { private readonly AppiumDriver _session; - public MenuTests(TestAppFixture fixture) => _session = fixture.Session; + public MenuTests(TestAppFixture fixture) + { + _session = fixture.Session; + + var tabs = _session.FindElementByAccessibilityId("MainTabs"); + var tab = tabs.FindElementByName("Menu"); + tab.Click(); + } + + [Fact] + public void Click_Child() + { + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + + rootMenuItem.SendClick(); + + var childMenuItem = _session.FindElementByAccessibilityId("Child1MenuItem"); + childMenuItem.SendClick(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Child 1", clickedMenuItem.Text); + } [Fact] - public void File() + public void Click_Grandchild() { - var fileMenu = _session.FindElementByAccessibilityId("FileMenu"); + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + + rootMenuItem.SendClick(); - Assert.Equal("File", fileMenu.Text); + var childMenuItem = _session.FindElementByAccessibilityId("Child2MenuItem"); + childMenuItem.SendClick(); + + var grandchildMenuItem = _session.FindElementByAccessibilityId("GrandchildMenuItem"); + grandchildMenuItem.SendClick(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Grandchild", clickedMenuItem.Text); } [PlatformFact(SkipOnOSX = true)] - public void OpenMenu_AcceleratorKey() + public void Child_AcceleratorKey() { - var fileMenu = _session.FindElementByAccessibilityId("FileMenu"); - fileMenu.Click(); + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + + rootMenuItem.SendClick(); + + var childMenuItem = _session.FindElementByAccessibilityId("Child1MenuItem"); - var openMenu = fileMenu.FindElementByAccessibilityId("OpenMenu"); - Assert.Equal("Ctrl+O", openMenu.GetAttribute("AcceleratorKey")); + Assert.Equal("Ctrl+O", childMenuItem.GetAttribute("AcceleratorKey")); } } }