Browse Source

Added a few ListBox tests.

ui-automation-test
Steven Kirk 4 years ago
parent
commit
261f46ea74
  1. 9
      samples/IntegrationTestApp/MainWindow.axaml
  2. 8
      samples/IntegrationTestApp/MainWindow.axaml.cs
  3. 4
      tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs
  4. 10
      tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs
  5. 103
      tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs

9
samples/IntegrationTestApp/MainWindow.axaml

@ -67,6 +67,15 @@
<Button Name="ComboBoxSelectFirst">Select First</Button>
</StackPanel>
</TabItem>
<TabItem Header="ListBox">
<DockPanel>
<StackPanel DockPanel.Dock="Bottom">
<Button Name="ListBoxSelectionClear">Clear Selection</Button>
</StackPanel>
<ListBox Name="BasicListBox" Items="{Binding ListBoxItems}" SelectionMode="Multiple"/>
</DockPanel>
</TabItem>
<TabItem Header="Menu">
<DockPanel>

8
samples/IntegrationTestApp/MainWindow.axaml.cs

@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
@ -14,8 +16,12 @@ namespace IntegrationTestApp
InitializeViewMenu();
this.AttachDevTools();
AddHandler(Button.ClickEvent, OnButtonClick);
ListBoxItems = Enumerable.Range(0, 100).Select(x => "Item " + x).ToList();
DataContext = this;
}
public List<string> ListBoxItems { get; }
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
@ -54,6 +60,8 @@ namespace IntegrationTestApp
this.FindControl<ComboBox>("BasicComboBox").SelectedIndex = -1;
if (source?.Name == "ComboBoxSelectFirst")
this.FindControl<ComboBox>("BasicComboBox").SelectedIndex = 0;
if (source?.Name == "ListBoxSelectionClear")
this.FindControl<ListBox>("BasicListBox").SelectedIndex = -1;
}
}
}

4
tests/Avalonia.IntegrationTests.Appium/ComboBoxTests.cs

@ -1,7 +1,5 @@
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Mac;
using Xunit;
namespace Avalonia.IntegrationTests.Appium

10
tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs

@ -1,13 +1,16 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.MultiTouch;
using OpenQA.Selenium.Interactions;
namespace Avalonia.IntegrationTests.Appium
{
internal static class ElementExtensions
{
public static IReadOnlyList<AppiumWebElement> GetChildren(this AppiumWebElement element) =>
element.FindElementsByXPath("*/*");
public static string GetComboBoxValue(this AppiumWebElement element)
{
return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ?
@ -37,10 +40,7 @@ namespace Avalonia.IntegrationTests.Appium
// 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);
action.Click();
action.Perform();
new Actions(element.WrappedDriver).MoveToElement(element).Click().Perform();
}
}

103
tests/Avalonia.IntegrationTests.Appium/ListBoxTests.cs

@ -0,0 +1,103 @@
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Interactions;
using Xunit;
namespace Avalonia.IntegrationTests.Appium
{
[Collection("Default")]
public class ListBoxTests
{
private readonly AppiumDriver<AppiumWebElement> _session;
public ListBoxTests(TestAppFixture fixture)
{
_session = fixture.Session;
var tabs = _session.FindElementByAccessibilityId("MainTabs");
var tab = tabs.FindElementByName("ListBox");
tab.Click();
}
[Fact]
public void Can_Select_Item_By_Clicking()
{
var listBox = GetTarget();
var item2 = listBox.FindElementByName("Item 2");
var item4 = listBox.FindElementByName("Item 4");
Assert.False(item2.Selected);
Assert.False(item4.Selected);
item2.SendClick();
Assert.True(item2.Selected);
Assert.False(item4.Selected);
item4.SendClick();
Assert.False(item2.Selected);
Assert.True(item4.Selected);
}
// WinAppDriver seems unable to consistently send a Ctrl key.
[PlatformFact(SkipOnWindows = true)]
public void Can_Select_Items_By_Ctrl_Clicking()
{
var listBox = GetTarget();
var item2 = listBox.FindElementByName("Item 2");
var item4 = listBox.FindElementByName("Item 4");
Assert.False(item2.Selected);
Assert.False(item4.Selected);
new Actions(_session)
.Click(item2)
.KeyDown(Keys.Control)
.Click(item4)
.KeyUp(Keys.Control)
.Perform();
Assert.True(item2.Selected);
Assert.True(item4.Selected);
}
[Fact]
public void Can_Select_Range_By_Shift_Clicking()
{
var listBox = GetTarget();
var item2 = listBox.FindElementByName("Item 2");
var item3 = listBox.FindElementByName("Item 3");
var item4 = listBox.FindElementByName("Item 4");
Assert.False(item2.Selected);
Assert.False(item3.Selected);
Assert.False(item4.Selected);
new Actions(_session)
.Click(item2)
.KeyDown(Keys.Shift)
.Click(item4)
.KeyUp(Keys.Shift)
.Perform();
Assert.True(item2.Selected);
Assert.True(item3.Selected);
Assert.True(item4.Selected);
}
[Fact]
public void Is_Virtualized()
{
var listBox = GetTarget();
var children = listBox.GetChildren();
Assert.True(children.Count < 100);
}
private AppiumWebElement GetTarget()
{
_session.FindElementByAccessibilityId("ListBoxSelectionClear").Click();
return _session.FindElementByAccessibilityId("BasicListBox");
}
}
}
Loading…
Cancel
Save