Browse Source

Refactored Menu integration tests.

Steven Kirk 3 years ago
parent
commit
f6e06a6d15

+ 14 - 0
samples/IntegrationTestApp/MainWindow.axaml

@@ -71,6 +71,20 @@
           </ComboBox>
           </ComboBox>
         </StackPanel>
         </StackPanel>
       </TabItem>
       </TabItem>
+      
+      <TabItem Header="Menu">
+        <DockPanel>
+          <Menu DockPanel.Dock="Top">
+            <MenuItem Name="RootMenuItem" Header="_Root">0
+              <MenuItem Name="Child1MenuItem" Header="_Child 1" InputGesture="Ctrl+O" Click="MenuClicked"/>
+              <MenuItem Name="Child2MenuItem" Header="_Child 1">
+                <MenuItem Name="GrandchildMenuItem" Header="_Grandchild" Click="MenuClicked"/>
+              </MenuItem>
+            </MenuItem>
+          </Menu>
+          <TextBlock Name="ClickedMenuItem">None</TextBlock>
+        </DockPanel>
+      </TabItem>
     </TabControl>
     </TabControl>
   </DockPanel>
   </DockPanel>
 </Window>
 </Window>

+ 7 - 0
samples/IntegrationTestApp/MainWindow.axaml.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using Avalonia;
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls;
+using Avalonia.Interactivity;
 using Avalonia.Markup.Xaml;
 using Avalonia.Markup.Xaml;
 
 
 namespace IntegrationTestApp
 namespace IntegrationTestApp
@@ -37,5 +38,11 @@ namespace IntegrationTestApp
                 viewMenu.Menu.Items.Add(menuItem);
                 viewMenu.Menu.Items.Add(menuItem);
             }
             }
         }
         }
+
+        private void MenuClicked(object? sender, RoutedEventArgs e)
+        {
+            var clickedMenuItemTextBlock = this.FindControl<TextBlock>("ClickedMenuItem");
+            clickedMenuItemTextBlock.Text = ((MenuItem)sender!).Header.ToString();
+        }
     }
     }
 }
 }

+ 1 - 1
tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs

@@ -26,7 +26,7 @@ namespace Avalonia.IntegrationTests.Appium
             Assert.Equal(string.Empty, comboBox.Text);
             Assert.Equal(string.Empty, comboBox.Text);
 
 
             ((MacElement)comboBox).Click();
             ((MacElement)comboBox).Click();
-            _session.FindElementByName("Bar").ClickListItem();
+            _session.FindElementByName("Bar").SendClick();
 
 
             Assert.Equal("Bar", comboBox.Text);
             Assert.Equal("Bar", comboBox.Text);
         }
         }

+ 3 - 2
tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs

@@ -19,7 +19,7 @@ namespace Avalonia.IntegrationTests.Appium
                 _ => throw new ArgumentOutOfRangeException($"Unexpected IsChecked value.")
                 _ => 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))
             if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
             {
             {
@@ -27,7 +27,8 @@ namespace Avalonia.IntegrationTests.Appium
             }
             }
             else
             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.
                 // does.
                 var action = new Actions(element.WrappedDriver);
                 var action = new Actions(element.WrappedDriver);
                 action.MoveToElement(element);
                 action.MoveToElement(element);

+ 41 - 9
tests/Avalonia.IntegrationTests.Appium/MenuTests.cs

@@ -8,24 +8,56 @@ namespace Avalonia.IntegrationTests.Appium
     {
     {
         private readonly AppiumDriver<AppiumWebElement> _session;
         private readonly AppiumDriver<AppiumWebElement> _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]
         [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)]
         [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"));
         }
         }
     }
     }
 }
 }