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 @@
+
+
+
+
+ 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"));
}
}
}