A state represents a distinct screen, dialog, or condition of the application — a login screen, a dashboard, an open settings panel. In Qontinui's model, states are the nodes of a graph; transitions are the edges connecting them. Automation moves through this graph the way a traveler moves through a map of cities.
Qontinui does not track state by remembering which buttons were clicked. It determines the current state by looking at the screen and matching identifying images. This is what lets the engine recover when the application ends up somewhere unexpected.
A traditional finite state machine assumes exactly one state is active at a time. Real interfaces do not behave that way — a modal dialog opens over a dashboard, a toolbar and a sidebar and a content area are all present together. Qontinui's state model (built on the open-source MultiState library) embraces this directly.
Several states can be active at the same time. A dialog can be active alongside the screen it covers, and independent panels can each carry their own state.
Related states that belong together — a toolbar, sidebar, and content area that always appear as a unit — can be grouped so they activate and deactivate together.
When one state covers others (a modal over a page), the covered states are treated as occluded rather than destroyed. Closing the cover reveals them again.
Each state carries one or more identifying images — screenshots of UI elements unique to that state. To decide whether a state is active, the engine searches the current screen for those images using visual recognition.
Identifying images are the essential ingredient, but a state can also bundle other elements that describe its anatomy:
The visual templates that identify the state and provide click targets within it
Rectangular areas and point coordinates used to scope searches or position interactions
Text values associated with the state, used for input or verification
Note: This page covers the concepts. For the step-by-step of creating states, adding identifying images, and marking initial and final states in the builder, see Working with States.