Skip to content

Query Methodology

Chris Fuentes edited this page Mar 24, 2016 · 15 revisions

Syntax

A Query is composed of a JSON object that contains specifiers. A specifier is a key-value pair that helps to specify which element(s) you are interested in finding. Supported specifiers are as follows:

  • coordinate : [ x, y ] OR { x: #, y : #} Specifies whatever element the OS returns at x, y
  • id : string
    Matches elements with a given accessibilityIdentifer
  • text : string Matches elements who have a given text, label, title, or placeholderValue
  • text_like : string As text, but diacritical- & case-insensitive substring match. E.g. text_like : 'NåNa' matches 'Banana'
  • property : "key=value" or { key: string, value: string } Uses predicates to match. E.g. property : 'title=banana' would match an object with the title property set to banana.
    The reason you'd use this over text is because text is a 4 part predicate and as such is a bit slower.
  • property_like : "key=value" or { key: string, value: string } As property but using diacritical- & case-insensitive substring match. See text_like
  • child : json Specifies that you are looking for a child element of whatever was matched by the current set of specifiers. The value is its own set of sub-specifiers, using the same possible keys as above. Can only match 1st generation children of the currently matched element(s)
  • descendent : json As child but can match descendants at any level.

Evaluation

In the XCUITestServer, queries are evaluated top to bottom in the view hierarchy, starting with the Application element (which is analogous to the root view or window of an application and contains all other views). A query may specify an element at a particular level or a descendent of that level, but never a parent/ascendent (this is a current limitation of XCUITest and iOS accessibility).

By default, you will always get results in an array form, even if there is only one element.

Examples:

Clone this wiki locally