Browse Source

Refactored ComboBox integration tests.

Steven Kirk 3 years ago
parent
commit
ddb6ab977e

+ 7 - 11
samples/IntegrationTestApp/MainWindow.axaml

@@ -19,6 +19,7 @@
   </NativeMenu.Menu>
   <DockPanel>
     <NativeMenuBar DockPanel.Dock="Top"/>
+    
     <TabControl TabStripPlacement="Left" Name="MainTabs">
       <TabItem Header="Automation">
         <StackPanel>
@@ -32,6 +33,7 @@
           </TextBox>
         </StackPanel>
       </TabItem>
+      
       <TabItem Header="Button">
         <StackPanel>
           <Button Name="DisabledButton" IsEnabled="False">
@@ -57,18 +59,12 @@
 
       <TabItem Header="ComboBox">
         <StackPanel>
-          <ComboBox Name="UnselectedComboBox">
-            <ComboBoxItem>Foo</ComboBoxItem>
-            <ComboBoxItem>Bar</ComboBoxItem>
-          </ComboBox>
-          <ComboBox Name="SelectedIndex0ComboBox" SelectedIndex="0">
-            <ComboBoxItem>Foo</ComboBoxItem>
-            <ComboBoxItem>Bar</ComboBoxItem>
-          </ComboBox>
-          <ComboBox Name="SelectedIndex1ComboBox" SelectedIndex="1">
-            <ComboBoxItem>Foo</ComboBoxItem>
-            <ComboBoxItem>Bar</ComboBoxItem>
+          <ComboBox Name="ComboBox">
+            <ComboBoxItem>Item 0</ComboBoxItem>
+            <ComboBoxItem>Item 1</ComboBoxItem>
           </ComboBox>
+          <Button Name="ComboBoxSelectionClear">Clear Selection</Button>
+          <Button Name="ComboBoxSelectFirst">Select First</Button>
         </StackPanel>
       </TabItem>
       

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

@@ -13,6 +13,7 @@ namespace IntegrationTestApp
             InitializeComponent();
             InitializeViewMenu();
             this.AttachDevTools();
+            AddHandler(Button.ClickEvent, OnButtonClick);
         }
 
         private void InitializeComponent()
@@ -44,5 +45,15 @@ namespace IntegrationTestApp
             var clickedMenuItemTextBlock = this.FindControl<TextBlock>("ClickedMenuItem");
             clickedMenuItemTextBlock.Text = ((MenuItem)sender!).Header.ToString();
         }
+
+        private void OnButtonClick(object? sender, RoutedEventArgs e)
+        {
+            var source = e.Source as Button;
+
+            if (source?.Name == "ComboBoxSelectionClear")
+                this.FindControl<ComboBox>("ComboBox").SelectedIndex = -1;
+            if (source?.Name == "ComboBoxSelectFirst")
+                this.FindControl<ComboBox>("ComboBox").SelectedIndex = 0;
+        }
     }
 }

+ 63 - 11
tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs

@@ -1,4 +1,6 @@
-using OpenQA.Selenium.Appium;
+using System.Threading;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Appium;
 using OpenQA.Selenium.Appium.Mac;
 using Xunit;
 
@@ -19,32 +21,82 @@ namespace Avalonia.IntegrationTests.Appium
         }
 
         [Fact]
-        public void UnselectedComboBox()
+        public void Can_Change_Selection_Using_Mouse()
         {
-            var comboBox = _session.FindElementByAccessibilityId("UnselectedComboBox");
+            var comboBox = _session.FindElementByAccessibilityId("ComboBox");
 
+            _session.FindElementByAccessibilityId("ComboBoxSelectFirst").Click();
+            Assert.Equal("Item 0", comboBox.Text);
+
+            comboBox.Click();
+            _session.FindElementByName("Item 1").SendClick();
+
+            Assert.Equal("Item 1", comboBox.Text);
+        }
+
+        [Fact]
+        public void Can_Change_Selection_From_Unselected_Using_Mouse()
+        {
+            var comboBox = _session.FindElementByAccessibilityId("ComboBox");
+
+            _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click();
             Assert.Equal(string.Empty, comboBox.Text);
 
             comboBox.Click();
-            _session.FindElementByName("Bar").SendClick();
+            _session.FindElementByName("Item 0").SendClick();
 
-            Assert.Equal("Bar", comboBox.Text);
+            Assert.Equal("Item 0", comboBox.Text);
         }
 
         [Fact]
-        public void SelectedIndex0ComboBox()
+        public void Can_Change_Selection_With_Keyboard()
         {
-            var comboBox = _session.FindElementByAccessibilityId("SelectedIndex0ComboBox");
+            var comboBox = _session.FindElementByAccessibilityId("ComboBox");
+
+            _session.FindElementByAccessibilityId("ComboBoxSelectFirst").Click();
+            Assert.Equal("Item 0", comboBox.Text);
+
+            comboBox.SendKeys(Keys.LeftAlt + Keys.ArrowDown);
+            comboBox.SendKeys(Keys.ArrowDown);
 
-            Assert.Equal("Foo", comboBox.Text);
+            var item = _session.FindElementByName("Item 1");
+            item.SendKeys(Keys.Enter);
+
+            Assert.Equal("Item 1", comboBox.Text);
         }
 
         [Fact]
-        public void SelectedIndex1ComboBox()
+        public void Can_Change_Selection_With_Keyboard_From_Unselected()
         {
-            var comboBox = _session.FindElementByAccessibilityId("SelectedIndex1ComboBox");
+            var comboBox = _session.FindElementByAccessibilityId("ComboBox");
+
+            _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click();
+            Assert.Equal(string.Empty, comboBox.Text);
 
-            Assert.Equal("Bar", comboBox.Text);
+            comboBox.SendKeys(Keys.LeftAlt + Keys.ArrowDown);
+            comboBox.SendKeys(Keys.ArrowDown);
+
+            var item = _session.FindElementByName("Item 0");
+            item.SendKeys(Keys.Enter);
+
+            Assert.Equal("Item 0", comboBox.Text);
+        }
+
+        [Fact]
+        public void Can_Cancel_Keyboard_Selection_With_Escape()
+        {
+            var comboBox = _session.FindElementByAccessibilityId("ComboBox");
+
+            _session.FindElementByAccessibilityId("ComboBoxSelectionClear").Click();
+            Assert.Equal(string.Empty, comboBox.Text);
+
+            comboBox.SendKeys(Keys.LeftAlt + Keys.ArrowDown);
+            comboBox.SendKeys(Keys.ArrowDown);
+
+            var item = _session.FindElementByName("Item 0");
+            item.SendKeys(Keys.Escape);
+
+            Assert.Equal(string.Empty, comboBox.Text);
         }
     }
 }