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