screen — DOM queries

reference australia Updated Jun 25, 2026 2 min read r_run_ui_test_script_screen.md
Raw file servicenow.com

The screen API is the primary interface for finding elements on the page tested by a Run UI Test Script step. All query methods pierce shadow roots automatically, so they work with Now Experience components as well as classic Jelly and UI16 pages.

Query method variants

Each query type comes in the following variants.

Variant Returns Throws when missing? Async?
getBy* Single element Yes, throws immediately No
getAllBy* Array of elements Yes, if empty No
queryBy* Single element or null No No
queryAllBy* Array, which may be empty No No
findBy* Single element Yes, rejects the Promise Yes, polls until found
findAllBy* Array of elements Yes, if empty Yes, polls until found

Use findBy* when the element appears asynchronously, such as after an API response, animation, or navigation. Use getBy* when the element must already exist. Use queryBy* to check whether an element is absent.

Query types

Each variant supports the following query types.

Type Finds elements by Example
Role ARIA role, implicit or explicit screen.getByRole('button', { name: 'Save' })
Text Visible text content screen.findByText('Incident created')
LabelText Associated <label> text screen.getByLabelText('Short description')
PlaceholderText placeholder attribute screen.getByPlaceholderText('Search…')
AltText alt attribute screen.getByAltText('Company logo')
Title title attribute screen.getByTitle('Close dialog')
TestId data-testid attribute screen.getByTestId('submit-btn')
DisplayValue Current display value of a form control screen.getByDisplayValue('High')
Selector CSS selector, shadow-piercing screen.getBySelector('input[name="priority"]')

getByRole is the recommended default because it validates accessibility as it queries. Use getBySelector only when no accessible query matches.

screen.waitFor(callback, options?)

Polls callback until it stops throwing. Use this method to wait for a condition that isn't directly an element query.

JavaScript
await screen.waitFor(() => {  expect(screen.getByRole('status')).toHaveTextContent('Complete');});

Options: { timeout: 5000, interval: 50 }, in milliseconds.

screen.debug(element?)

Logs the outer HTML of element, or the whole page body when omitted, to the browser console, including shadow root contents. Use it when a query doesn't match what you expect.

Text
screen.debug(); // log the full pagescreen.debug(screen.getByRole('form')); // log a specific subtree

Shadow DOM traversal

All screen.getBy*, screen.findBy*, and screen.queryBy* queries automatically pierce shadow roots. Now Experience components render their content inside shadow roots, which are normally invisible to document.querySelector. The ATF testing library traverses these boundaries transparently, so you can query by role or text whether the element is in light DOM or shadow DOM.

getByRole resolves accessible names by reading shadow root text content when the host element's own text content is empty, matching the behavior that a screen reader reports.

getBySelector uses a custom shadow-piercing CSS selector engine that handles cross-shadow combinators, for example now-typeahead input.

Keywords screenDOM queriesgetByRolefindByTextshadow DOMRun UI Test Script
Search documentation
Search document titles and file paths on the australia branch