Apps, used as people use them, whatever they run on: launched, their controls tapped or clicked and filled, found by the names people see; what they show checked, waiting as apps take their time.
An app is registered by the pack of the platform it runs on: mobile-android and mobile-ios for phones, desktop-macos, desktop-windows and desktop-linux for desktops (the courier android app with the following properties:, the depot macos app with the following properties:). Every other step names the app the same way on every platform (the courier app, the depot app), so a feature for a desktop app lists its registration for each OS and runs unchanged on each: a registration for a platform the machine cannot run does nothing there. An app runs on one platform in a scenario; two apps may run on two, and a scenario can use a web app too.
Each scenario has a clean app: the platform pack resets the app, and what it keeps, before the scenario starts. Controls are found by the name people see: a button’s text, a field’s label, a list item’s or a row’s text. When no name tells a control apart, id= or xpath= finds it. An app’s files are a folder of the files pack whose owner is the app (app:depot).
Add it to a project with axx pack add app-core.
app-core.launch
Section titled “app-core.launch”When the {word} app is launchedLaunch the app, reset for the scenario by its platform’s pack (see the pack), or bring it to the front if it is already running.
| Parameter | Takes | For example |
|---|---|---|
{word} |
one word, with no spaces | parcels, PX-4101 |
Example:
When the courier app is launchedWhen the depot app is launchedSince 0.1.5.
app-core.restart
Section titled “app-core.restart”When the {word} app is restartedStop the app and start it again, keeping what it stored: what survives a restart, like a sign-in, is still there.
| Parameter | Takes | For example |
|---|---|---|
{word} |
one word, with no spaces | parcels, PX-4101 |
Example:
When the courier app is restartedSince 0.1.5.
app-core.tapped
Section titled “app-core.tapped”When the {string} {control} is tapped in the {word} appPress a control, found by the name people see, or by an id= or xpath= selector: a tap on a phone, a click on a desktop. “tapped” and “clicked” are the same step: either word works on every platform.
| Parameter | Takes | Values | For example |
|---|---|---|---|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |
{word} |
one word, with no spaces | parcels, PX-4101 |
Example:
When the "Sign in" button is tapped in the courier appWhen the "PX-MOB-9401" list item is tapped in the courier appSince 0.1.5.
app-core.clicked
Section titled “app-core.clicked”When the {string} {control} is clicked in the {word} appPress a control, found by the name people see, or by an id= or xpath= selector: a tap on a phone, a click on a desktop. “tapped” and “clicked” are the same step: either word works on every platform.
| Parameter | Takes | Values | For example |
|---|---|---|---|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |
{word} |
one word, with no spaces | parcels, PX-4101 |
Example:
When the "Register" button is clicked in the depot appWhen the "PX-DSK-4138" row is clicked in the depot appSince 0.2.0.
app-core.fill
Section titled “app-core.fill”When the {string} field in the {word} app is filled with {string}Replace what a field holds with a text, as typing it would. ${env:..} values are secrets: masked in logs and failures.
| Parameter | Takes | For example |
|---|---|---|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
{word} |
one word, with no spaces | parcels, PX-4101 |
Example:
When the "Courier ID" field in the courier app is filled with "CR-LEJ-12"Since 0.1.5.
app-core.scroll
Section titled “app-core.scroll”When the {string} {control} is scrolled into view in the {word} appScroll until a control shows: on a desktop, every area it is in, the outermost first; on a phone, the screen, down first, then up.
| Parameter | Takes | Values | For example |
|---|---|---|---|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |
{word} |
one word, with no spaces | parcels, PX-4101 |
Example:
When the "PX-MOB-9412" list item is scrolled into view in the courier appSince 0.1.5.
app-core.shows
Section titled “app-core.shows”Then [[within {duration} ]]the {word} app shows {string}Check that the app shows a text: in a control’s text or label, whitespace collapsed. It waits for the text (10 seconds, or within).
| Parameter | Takes | For example |
|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
{word} |
one word, with no spaces | parcels, PX-4101 |
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
Variants, the parts in [[...]] said or left out:
the {word} app shows {string}within {duration} the {word} app shows {string}
Example:
Then the courier app shows "Today's deliveries"Then within 20s the courier app shows "Delivered"Since 0.1.5.
app-core.hides
Section titled “app-core.hides”Then [[within {duration} ]]the {word} app does not show {string}Check that the app does not show a text, or no longer does: it waits for the text to go (10 seconds, or within).
| Parameter | Takes | For example |
|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
{word} |
one word, with no spaces | parcels, PX-4101 |
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
Variants, the parts in [[...]] said or left out:
the {word} app does not show {string}within {duration} the {word} app does not show {string}
Example:
Then the courier app does not show "PX-MOB-9401"Since 0.1.5.
app-core.control.shown
Section titled “app-core.control.shown”Then [[within {duration} ]]the {string} {control} is shown in the {word} appCheck that the app shows a control: it waits for it (10 seconds, or within).
| Parameter | Takes | Values | For example |
|---|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |
{word} |
one word, with no spaces | parcels, PX-4101 |
Variants, the parts in [[...]] said or left out:
the {string} {control} is shown in the {word} appwithin {duration} the {string} {control} is shown in the {word} app
Example:
Then the "Mark delivered" button is shown in the courier appSince 0.1.5.
app-core.control.enabled
Section titled “app-core.control.enabled”Then [[within {duration} ]]the {string} {control} is enabled in the {word} appCheck that a control can be used: it waits for it (10 seconds, or within).
| Parameter | Takes | Values | For example |
|---|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |
{word} |
one word, with no spaces | parcels, PX-4101 |
Variants, the parts in [[...]] said or left out:
the {string} {control} is enabled in the {word} appwithin {duration} the {string} {control} is enabled in the {word} app
Example:
Then the "Sign in" button is enabled in the courier appSince 0.1.5.
app-core.control.disabled
Section titled “app-core.control.disabled”Then [[within {duration} ]]the {string} {control} is disabled in the {word} appCheck that a control is shown but cannot be used, like a button until a form is complete.
| Parameter | Takes | Values | For example |
|---|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
|
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |
{word} |
one word, with no spaces | parcels, PX-4101 |
Variants, the parts in [[...]] said or left out:
the {string} {control} is disabled in the {word} appwithin {duration} the {string} {control} is disabled in the {word} app
Example:
Then the "Sign in" button is disabled in the courier appSince 0.1.5.
app-core.field.value
Section titled “app-core.field.value”Then [[within {duration} ]]the {string} field in the {word} app has the value {string}Check what a field holds: it waits for the value (10 seconds, or within). A password field holds its dots.
| Parameter | Takes | For example |
|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
{word} |
one word, with no spaces | parcels, PX-4101 |
Variants, the parts in [[...]] said or left out:
the {string} field in the {word} app has the value {string}within {duration} the {string} field in the {word} app has the value {string}
Example:
Then the "Courier ID" field in the courier app has the value "CR-LEJ-12"Since 0.1.5.
app-core.screenshot
Section titled “app-core.screenshot”Then [[within {duration} ]]the {word} app looks like the {string} screenshotCheck that the app looks like its screenshot, pixel by pixel (anti-aliasing aside), once it has settled.
- Each platform draws apps its own way, so each device or desktop has its own screenshot, named after it (
delivered.android-parcels-pixel.png); see the platform’s family pack for where they are kept. - Without one, the step takes it and fails: look at it, and keep it.
- When the app looks different, the step attaches the screenshot, the app and their difference.
- The check waits for the app to settle and look right: 10 seconds, or
within {duration}.
| Parameter | Takes | For example |
|---|---|---|
{duration} |
a duration in seconds (s) or minutes (m) |
5s, 2m |
{word} |
one word, with no spaces | parcels, PX-4101 |
{string} |
text in double or single quotes, which the step leaves out | "Get a quote", 'Express' |
Variants, the parts in [[...]] said or left out:
the {word} app looks like the {string} screenshotwithin {duration} the {word} app looks like the {string} screenshot
Example:
Then the courier app looks like the "delivered" screenshotSince 0.1.5.
Parameter types
Section titled “Parameter types”| Parameter | Takes | Values | For example |
|---|---|---|---|
{control} |
a kind of control an app shows, found by the name people see: a button by its text, a field by its label, a list item or a row by one of its texts, a menu item in its open menu, an element is anything, by its text or accessibility label; a phone’s notification is tapped, by a text in its title or its text. A kind an app’s platform does not have (a phone has no menu bar) fails the step |
button, field, checkbox, radio button, switch, tab, menu, menu item, list item, row, link, image, text, element, notification |
button, list item |