name: ui5-controls description: > This skill should be used when "finding UI5 controls", "interacting with controls", "asserting control state", or working with "selector syntax", "SmartField inner controls", or "custom matchers". Covers id, controlType, properties, bindingPath, ancestor selectors and core Praman fixture methods. version: 0.1.0
UI5 Controls
Selector Interface
Build selectors using the UI5Selector interface:
id-- control ID (stable, preferred when available)controlType-- fully qualified UI5 class (e.g.,sap.m.Button)properties-- key-value pairs matching control propertiesbindingPath--{ modelName?, propertyPath }for model-bound controlsancestor-- parent selector to scope discoverydescendant-- child selector to scope discoverysearchOpenDialogs-- settruefor controls inside dialogs/popovers
Selector Priority
Use this order when choosing selectors:
id-- most stable, use when the app defines stable IDscontrolType+properties-- reliable for buttons, labels, titlesbindingPath-- best for form fields bound to OData propertiesancestor-scoped -- narrow results when multiple controls match
Never use generated IDs (e.g., __button0, __field2-inner). These are unstable.
Core Methods
Interact with controls through the ui5 fixture:
ui5.control(selector)-- find single control, returns typed proxyui5.controls(selector)-- find multiple controlsui5.click(selector)-- click a controlui5.fill(selector, value)-- set value + fire change eventui5.press(selector)-- trigger press event (buttons)ui5.select(selector, key)-- select item in dropdown/comboboxui5.getText(selector)-- read text propertyui5.getValue(selector)-- read value propertyui5.waitForUI5()-- wait for pending async operations to settle
Call ui5.waitForUI5() after every interaction that triggers server requests or UI updates.
SmartField Pattern
Target SmartField directly by controlType: 'sap.ui.comp.smartfield.SmartField' with bindingPath. Do not target inner controls (sap.m.Input, sap.m.ComboBox) inside SmartFields -- they are generated dynamically and have unstable IDs.
Custom Matchers
Assert control state with Praman's custom expect matchers:
toHaveUI5Text(expected)-- control text matchestoBeUI5Visible()-- control is visible in DOMtoBeUI5Enabled()-- control is enabled (not read-only)toHaveUI5Property(name, value)-- arbitrary property checktoHaveUI5ValueState(state)-- value state (Error, Warning, Success, None)
Use these instead of Playwright's toBeVisible() or toHaveText() for UI5 controls.
Refer to references/ for selector strategy and control type tables. Refer to examples/ for interaction patterns.