From da572c6c400c6aca25063a057a155848e50e9b3e Mon Sep 17 00:00:00 2001 From: leileizhang Date: Thu, 21 Aug 2025 18:53:30 +0800 Subject: [PATCH] [UI tests] Add accessibility IDs to Command Palette UI components for improved UI testing (#41295) ## Summary of the Pull Request Finding elements by name is often unstable; adding an accessibility ID is more reliable for UI tests. ## PR Checklist - [ ] Closes: #xxx - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx ## Detailed Description of the Pull Request / Additional comments ## Validation Steps Performed --- .../Controls/CommandBar.xaml | 3 +++ .../Controls/SearchBar.xaml | 1 + .../CommandPaletteTestBase.cs | 23 +++++++------------ .../Microsoft.CmdPal.UITests/IndexerTests.cs | 4 ++-- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml index aa14b0878a..aba9ed477d 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml @@ -165,6 +165,7 @@ x:Name="PrimaryButton" Padding="6,4,4,4" x:Load="{x:Bind IsLoaded, Mode=OneWay}" + AutomationProperties.AutomationId="PrimaryCommandButton" AutomationProperties.Name="{x:Bind ViewModel.PrimaryCommand.Name, Mode=OneWay}" Background="Transparent" Click="PrimaryButton_Clicked" @@ -184,6 +185,7 @@ x:Name="SecondaryButton" Padding="6,4,4,4" x:Load="{x:Bind IsLoaded, Mode=OneWay}" + AutomationProperties.AutomationId="SecondaryCommandButton" AutomationProperties.Name="{x:Bind ViewModel.SecondaryCommand.Name, Mode=OneWay}" Click="SecondaryButton_Clicked" Style="{StaticResource SubtleButtonStyle}" @@ -207,6 +209,7 @@ x:Name="MoreCommandsButton" x:Uid="MoreCommandsButton" Padding="6,4,4,4" + AutomationProperties.AutomationId="MoreContextMenuButton" Click="MoreCommandsButton_Clicked" Style="{StaticResource SubtleButtonStyle}" ToolTipService.ToolTip="Ctrl+K" diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml index 379ea6b03d..80eb1a3ad6 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml @@ -22,6 +22,7 @@ MinHeight="32" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" + AutomationProperties.AutomationId="MainSearchBox" KeyDown="FilterBox_KeyDown" PlaceholderText="{x:Bind CurrentPageViewModel.PlaceholderText, Converter={StaticResource PlaceholderTextConverter}, Mode=OneWay}" PreviewKeyDown="FilterBox_PreviewKeyDown" diff --git a/src/modules/cmdpal/Tests/Microsoft.CmdPal.UITests/CommandPaletteTestBase.cs b/src/modules/cmdpal/Tests/Microsoft.CmdPal.UITests/CommandPaletteTestBase.cs index ab7dac1a3a..a839c3e999 100644 --- a/src/modules/cmdpal/Tests/Microsoft.CmdPal.UITests/CommandPaletteTestBase.cs +++ b/src/modules/cmdpal/Tests/Microsoft.CmdPal.UITests/CommandPaletteTestBase.cs @@ -19,29 +19,22 @@ public class CommandPaletteTestBase : UITestBase { } - protected void SetSearchBox(string text) - { - Assert.AreEqual(this.Find("Type here to search...").SetText(text, true).Text, text); - } + protected void SetSearchBox(string text) => SetSearchBoxText(text); - protected void SetFilesExtensionSearchBox(string text) - { - Assert.AreEqual(this.Find("Search for files and folders...").SetText(text, true).Text, text); - } + protected void SetFilesExtensionSearchBox(string text) => SetSearchBoxText(text); - protected void SetCalculatorExtensionSearchBox(string text) - { - Assert.AreEqual(this.Find("Type an equation...").SetText(text, true).Text, text); - } + protected void SetCalculatorExtensionSearchBox(string text) => SetSearchBoxText(text); - protected void SetTimeAndDaterExtensionSearchBox(string text) + protected void SetTimeAndDaterExtensionSearchBox(string text) => SetSearchBoxText(text); + + private void SetSearchBoxText(string text) { - Assert.AreEqual(this.Find("Search values or type a custom time stamp...").SetText(text, true).Text, text); + Assert.AreEqual(this.Find(By.AccessibilityId("MainSearchBox")).SetText(text, true).Text, text); } protected void OpenContextMenu() { - var contextMenuButton = this.Find