Browse Source

Added failing integration test for #7906.

Steven Kirk 3 years ago
parent
commit
69f96d5b44

+ 4 - 1
samples/IntegrationTestApp/MainWindow.axaml

@@ -87,7 +87,10 @@
               </MenuItem>
             </MenuItem>
           </Menu>
-          <TextBlock Name="ClickedMenuItem">None</TextBlock>
+          <StackPanel>
+            <TextBlock Name="ClickedMenuItem">None</TextBlock>
+            <TextBox Name="MenuFocusTest"/>
+          </StackPanel>
         </DockPanel>
       </TabItem>
     </TabControl>

+ 11 - 0
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);

+ 15 - 0
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());
+        }
     }
 }