diff --git a/PowerToys.sln b/PowerToys.sln
index 4a94baa77f..645c8cd930 100644
--- a/PowerToys.sln
+++ b/PowerToys.sln
@@ -786,6 +786,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.Window
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.UnitTestBase", "src\modules\cmdpal\Tests\Microsoft.CmdPal.Ext.UnitTestsBase\Microsoft.CmdPal.Ext.UnitTestBase.csproj", "{00D8659C-2068-40B6-8B86-759CD6284BBB}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{E11826E1-76DF-42AC-985C-164CC2EE57A1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScreenRuler.UITests", "src\modules\MeasureTool\Tests\ScreenRuler.UITests\ScreenRuler.UITests.csproj", "{66C069F8-C548-4CA6-8CDE-239104D68E88}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
@@ -2840,6 +2844,18 @@ Global
{00D8659C-2068-40B6-8B86-759CD6284BBB}.Release|ARM64.Build.0 = Release|ARM64
{00D8659C-2068-40B6-8B86-759CD6284BBB}.Release|x64.ActiveCfg = Release|x64
{00D8659C-2068-40B6-8B86-759CD6284BBB}.Release|x64.Build.0 = Release|x64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|ARM64.Build.0 = Debug|ARM64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|ARM64.Deploy.0 = Debug|ARM64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|x64.ActiveCfg = Debug|x64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|x64.Build.0 = Debug|x64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|x64.Deploy.0 = Debug|x64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Release|ARM64.ActiveCfg = Release|ARM64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Release|ARM64.Build.0 = Release|ARM64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Release|ARM64.Deploy.0 = Release|ARM64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Release|x64.ActiveCfg = Release|x64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Release|x64.Build.0 = Release|x64
+ {66C069F8-C548-4CA6-8CDE-239104D68E88}.Release|x64.Deploy.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -3150,6 +3166,8 @@ Global
{E816D7AF-4688-4ECB-97CC-3D8E798F3828} = {8EF25507-2575-4ADE-BF7E-D23376903AB8}
{E816D7B0-4688-4ECB-97CC-3D8E798F3829} = {8EF25507-2575-4ADE-BF7E-D23376903AB8}
{00D8659C-2068-40B6-8B86-759CD6284BBB} = {8EF25507-2575-4ADE-BF7E-D23376903AB8}
+ {E11826E1-76DF-42AC-985C-164CC2EE57A1} = {7AC943C9-52E8-44CF-9083-744D8049667B}
+ {66C069F8-C548-4CA6-8CDE-239104D68E88} = {E11826E1-76DF-42AC-985C-164CC2EE57A1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0}
diff --git a/src/modules/MeasureTool/Tests/ScreenRuler.UITests/ActivationTest.cs b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/ActivationTest.cs
new file mode 100644
index 0000000000..433cd1d084
--- /dev/null
+++ b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/ActivationTest.cs
@@ -0,0 +1,68 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Globalization;
+using System.Threading.Tasks;
+using Microsoft.PowerToys.UITest;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace ScreenRuler.UITests
+{
+ [TestClass]
+ public class ActivationTest : UITestBase
+ {
+ public ActivationTest()
+ : base(PowerToysModule.PowerToysSettings, WindowSize.Large)
+ {
+ }
+
+ ///
+ /// Test MeasureTool keyboard shortcuts
+ ///
+ /// -
+ /// Validating toolbar appears when MeasureTool is activated
+ ///
+ /// -
+ /// Validating Ctrl+1 activates Bounds tool
+ ///
+ /// -
+ /// Validating Escape closes the toolbar
+ ///
+ ///
+ ///
+ [TestMethod("MeasureTool.Shortcuts.ActivateToolbar")]
+ [TestCategory("Measure Tool #1")]
+ public void TestActivateMeasureTool()
+ {
+ // Launch PowerToys Settings
+ LaunchFromSetting();
+
+ // Enable MeasureTool
+ var foundCustom = this.Find("Screen Ruler");
+ Assert.IsNotNull(foundCustom, "Screen Ruler group not found.");
+
+ // Toggle on MeasureTool
+ foundCustom.Find("Enable Measure Tool").Toggle(true);
+ Task.Delay(1000).Wait();
+ }
+
+ private void LaunchFromSetting()
+ {
+ this.Session.SetMainWindowSize(WindowSize.Medium);
+
+ // Navigate to Measure Tool settings
+ if (this.FindAll("Screen Ruler", 2000).Count == 0)
+ {
+ // Expand Utilities list-group if needed
+ this.Find("Utilities").Click();
+ Task.Delay(1000).Wait();
+ }
+
+ Task.Delay(1000).Wait();
+ this.Find("Screen Ruler").Click();
+ Task.Delay(2000).Wait();
+ }
+ }
+}
diff --git a/src/modules/MeasureTool/Tests/ScreenRuler.UITests/Package.appxmanifest b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/Package.appxmanifest
new file mode 100644
index 0000000000..4a13746a50
--- /dev/null
+++ b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/Package.appxmanifest
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+ ScreenRuler.UITests
+ gkhmyznikov
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/MeasureTool/Tests/ScreenRuler.UITests/ScreenRuler.UITests.csproj b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/ScreenRuler.UITests.csproj
new file mode 100644
index 0000000000..bf5ce9b47d
--- /dev/null
+++ b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/ScreenRuler.UITests.csproj
@@ -0,0 +1,23 @@
+
+
+
+ PowerToys.MeasureToolUI.UITests
+ PowerToys.MeasureToolUI.UITests
+ false
+ true
+ enable
+ Library
+
+
+ false
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\tests\PowerToys.MeasureToolUI.UITests\
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/modules/MeasureTool/Tests/ScreenRuler.UITests/app.manifest b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/app.manifest
new file mode 100644
index 0000000000..b15e30cce2
--- /dev/null
+++ b/src/modules/MeasureTool/Tests/ScreenRuler.UITests/app.manifest
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PerMonitorV2
+
+
+
\ No newline at end of file