diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml index 090cf23b33..d4a96c5f17 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml +++ b/samples/IntegrationTestApp/MainWindow.axaml @@ -167,6 +167,9 @@ + + + diff --git a/src/Avalonia.Controls/Automation/Peers/ScrollBarAutomationPeer.cs b/src/Avalonia.Controls/Automation/Peers/ScrollBarAutomationPeer.cs new file mode 100644 index 0000000000..b8406bf20c --- /dev/null +++ b/src/Avalonia.Controls/Automation/Peers/ScrollBarAutomationPeer.cs @@ -0,0 +1,29 @@ +using Avalonia.Controls.Primitives; + +namespace Avalonia.Automation.Peers +{ + public class ScrollBarAutomationPeer : RangeBaseAutomationPeer + { + public ScrollBarAutomationPeer(ScrollBar owner) : base(owner) + { + } + + override protected string GetClassNameCore() + { + return "ScrollBar"; + } + + override protected AutomationControlType GetAutomationControlTypeCore() + { + return AutomationControlType.ScrollBar; + } + + // AutomationControlType.ScrollBar must return IsContentElement false. + // See http://msdn.microsoft.com/en-us/library/ms743712.aspx + override protected bool IsContentElementCore() + { + return false; + } + + } +} diff --git a/src/Avalonia.Controls/Primitives/ScrollBar.cs b/src/Avalonia.Controls/Primitives/ScrollBar.cs index e524db5444..8b2321e40b 100644 --- a/src/Avalonia.Controls/Primitives/ScrollBar.cs +++ b/src/Avalonia.Controls/Primitives/ScrollBar.cs @@ -5,6 +5,7 @@ using Avalonia.Input; using Avalonia.Layout; using Avalonia.Threading; using Avalonia.Controls.Metadata; +using Avalonia.Automation.Peers; namespace Avalonia.Controls.Primitives { @@ -286,6 +287,8 @@ namespace Avalonia.Controls.Primitives } } + protected override AutomationPeer OnCreateAutomationPeer() => new ScrollBarAutomationPeer(this); + private void InvokeAfterDelay(Action handler, TimeSpan delay) { if (_timer != null) diff --git a/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs b/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs new file mode 100644 index 0000000000..e9d0a5d3a4 --- /dev/null +++ b/tests/Avalonia.IntegrationTests.Appium/ScrollBarTests.cs @@ -0,0 +1,33 @@ +using OpenQA.Selenium.Appium; +using Xunit; + +namespace Avalonia.IntegrationTests.Appium +{ + [Collection("Default")] + public class ScrollBarTests + { + private readonly AppiumDriver _session; + + public ScrollBarTests(DefaultAppFixture fixture) + { + _session = fixture.Session; + + var tabs = _session.FindElementByAccessibilityId("MainTabs"); + var tab = tabs.FindElementByName("ScrollBarTab"); + tab.Click(); + } + + [Fact] + public void ScrollBar_Increases_Value_By_LargeChange_When_IncreaseButton_Is_Clicked() + { + var button = _session.FindElementByAccessibilityId("MyScrollBar"); + Assert.True(double.Parse(button.Text) == 20); + + button.Click(); + + // Default LargeChange value is 10 so when clicking the IncreaseButton + // ScrollBar value should be increased by 10. + Assert.Equal(30, double.Parse(button.Text)); + } + } +}