~4 min4 / 5

Desktop Recording

Desktop recording uses the Windows UI Automation (UIA3) framework — via FlaUI — to identify every element you interact with and generate structured XML selectors. It works with any Windows application that exposes accessibility information.

Supported Application Types

FrameworkExamplesNotes
Win32Notepad, Calculator, legacy ERP systemsFull UIA3 support
WPFModern .NET desktop appsBest AutomationId coverage
WinForms.NET WinForms appsGood support; use Name when AutomationId is missing
UWPWindows Store apps, SettingsAuto-detected via ApplicationFrameWindow; requires accessibility enabled
Electron / ChromiumVS Code, Slack, DiscordAuto-triggers accessibility init on first hover; then full UIA tree is available
SAP GUISAP desktop clientRequires SAP Scripting API enabled on server

Desktop Recording Steps

  1. In Studio, click Record → Desktop
  2. The Recording Indicator appears — hover over the target application
  3. Click on the first element you want to automate — a selector is captured for it
  4. Continue performing actions; each is added to the recording list in real time
  5. Press Shift+F2 or click Stop to finish
  6. Activities are inserted on the canvas inside a Use Application Browser container scoped to the detected process

How Selectors Are Generated

For each captured element, the recorder:

  1. Walks the UIA tree from the clicked element up to the window root — collecting one ElementInfo per level
  2. Filters out noise containers (generic Pane, Custom, Group without meaningful identifiers)
  3. Selects the best attribute at each level: automationidcontroltypenameidx
  4. Limits the chain to 4–5 segments to avoid over-specificity
  5. For Electron/Chromium apps, appends a webctrl segment with the DOM element attributes
Electron / VS Code appsElectron apps use a Chromium core with an accessibility bridge. On first hover, Studio sends an accessibility enable command to the process. After a short delay (1–2 seconds), the full UIA tree becomes available and element capture works normally.
Was this helpful?