diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml index fe1487a7f2..0b5c20b849 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml +++ b/samples/IntegrationTestApp/MainWindow.axaml @@ -87,7 +87,10 @@ - None + + None + + diff --git a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs index 15e22f4424..290811d2a1 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs @@ -29,6 +29,12 @@ namespace Avalonia.IntegrationTests.Appium _ => throw new ArgumentOutOfRangeException($"Unexpected IsChecked value.") }; + public static bool GetIsFocused(this AppiumWebElement element) + { + var active = element.WrappedDriver.SwitchTo().ActiveElement() as AppiumWebElement; + return element.Id == active?.Id; + } + public static void SendClick(this AppiumWebElement element) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -44,6 +50,11 @@ namespace Avalonia.IntegrationTests.Appium } } + public static void MovePointerOver(this AppiumWebElement element) + { + new Actions(element.WrappedDriver).MoveToElement(element).Perform(); + } + public static string GetAttribute(AppiumWebElement element, string windows, string macOS) { return element.GetAttribute(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? windows : macOS); diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index e9a433b975..0562611a5b 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -59,5 +59,20 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal("Ctrl+O", childMenuItem.GetAttribute("AcceleratorKey")); } + + [Fact] + public void PointerOver_Does_Not_Steal_Focus() + { + // Issue #7906 + var textBox = _session.FindElementByAccessibilityId("MenuFocusTest"); + textBox.Click(); + + Assert.True(textBox.GetIsFocused()); + + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + rootMenuItem.MovePointerOver(); + + Assert.True(textBox.GetIsFocused()); + } } }