Files
PowerToys/doc/devdocs/UITests.md
dreamstart 9453e38881 UITestAutomation Framework (#37461)
* Add UITestAutomation framework

* add code comments

* Optimized code format

* Optimized code format

* Update commons and add keyboard manager ui test project

* Optimized code format

* test scope and fix fancyzone exe path

* Add readme

* Optimize helper functions and UI test method

* Fix spelling errors and restore module UI tests

* Restore Indent

* Update NOTICE.md

* Update comments to Session and Elements

* Update comments for Button and Window

* delete unnecessary code

* change FindElementByName to FindElmenet

* Update comments for ModuleConfigData

* Update readme and comments

* Remove extra comments

* change public property

* Optimize code readability

* add default Attach Function

* change attach function name

* Update comments to XML format

* Hide by internal functions

* Update readme

* Refine the framework

* Fix process start position and update readme

* Remove Enum PowerToysModuleWindow

* Update attach comments

* Update ModuleConfigData comments

---------

Co-authored-by: Zhaopeng Wang (from Dev Box) <zhaopengwang@microsoft.com>
Co-authored-by: Xiaofeng Wang (from Dev Box) <xiaofengwang@microsoft.com>
Co-authored-by: urnotdfs <709586527@qq.com>
2025-02-20 13:25:20 +08:00

2.9 KiB

UI tests framework

A specialized UI test framework for PowerToys that makes it easy to write UI tests for PowerToys modules or settings. Let's start writing UI tests!

Before running tests

Running tests

  • Exit PowerToys if it's running.

  • Open PowerToys.sln in Visual Studio and build the solution.

  • Run tests in the Test Explorer (Test > Test Explorer or Ctrl+E, T).

How to add the first UI tests for your modules

  • Create a new project and add the following references to the project file. Change the OutputPath to your own module's path.

    	<PropertyGroup>
    		<OutputType>Library</OutputType>
    		<!-- This is a UI test, so don't run as part of MSBuild -->
    		<RunVSTest>false</RunVSTest>
    	</PropertyGroup>
    
    	<PropertyGroup>
    		<OutputPath>..\..\..\..\$(Platform)\$(Configuration)\tests\KeyboardManagerUITests\</OutputPath>
    	</PropertyGroup>
    
    	<ItemGroup>
    	    <PackageReference Include="MSTest" />
    	    <ProjectReference Include="..\..\..\common\UITestAutomation\UITestAutomation.csproj" />
    	    <Folder Include="Properties\" />
      </ItemGroup>
    
  • Inherit your test class from UITestBase.

    Set Scope: The default scope starts from the PowerToys settings UI. If you want to start from your own module, set the constructor as shown below:

    Specify Scope:

    [TestClass]
    public class RunFancyZonesTest : UITestBase
    {
        public RunFancyZonesTest()
            : base(PowerToysModule.FancyZone)
        {
        }
    }
    
  • Then you can start using session to perform the UI operations.

Example

using Microsoft.PowerToys.UITest;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UITests_KeyboardManager
{
    [TestClass]
    public class RunKeyboardManagerUITests : UITestBase
    {
        [TestMethod]
        public void OpenKeyboardManagerEditor()
        {
            // Open KeyboardManagerEditor
            this.Session.Find<Button>(By.Name("Remap a key")).Click();
            this.Session.Attach("Remap keys");

            // Maximize window
            var window = Session.Find<Window>(By.Name("Remap keys")).Maximize();

            // Add Key Remapping
            this.Session.Find<Button>(By.Name("Add key remapping")).Click();
            window.Close();

            // Back to Settings
            this.Session.Attach(PowerToysModule.PowerToysSettings);
        }
    }
}

Extra tools and information

Accessibility Tools: While working on tests, you may need a tool that helps you to view the element's accessibility data, e.g. for finding the button to click. For this purpose, you could use AccessibilityInsights