Automation: press buttons automatically
The --automation
argument allows to apply a set of actions (eg. button press)
when a condition is met (usually some text is displayed on the screen). It is
especially useful to automate app testing.
A JSON file is expected (either a JSON document or a path prefixed by file:
).
Rules
Rules are a list of rules. Each rule is a dictionary with the following valid keys:
text
: expected text (string)regexp
: regular expression matching the expected text (string)x
: x-coordinate of the text (int)y
: y-coordinate of the text (int)conditions
: list of conditions, described belowactions
: list of actions, described below
Each key is optional.
Actions
4 actions are available:
[ "button", num, pressed ]
: press (pressed=true
) or release (pressed=false
) a button (num=1
for left,num=2
for right)[ "finger", x, y, touched ]
: touch (touched=true
) or release (touched=false
) the screen (x
andy
coordinates)[ "setbool", varname, value ]
: set a variable whose name isvarname
to a boolean value (eithertrue
orfalse
)[ "exit" ]
: exit speculos
The actions of a rule are executed if and only if each rule option matches.
These actions are applied successively according to the ordering of the actions
list.
The actions of the first rule matched are applied. Further matching rules are discarded (it allows to implement a default rule).
Conditions
Conditions are a list of variables of tuple (varname, value)
where varname
is a variable name and value
a boolean. These variables are set by the
setbool
action and by default an unset variable is equal to false
.
If a non-empty conditions
list is specified in the rule, each condition should
be met (as well as the other options) to allow the actions to be applied.
Example
As an example, one can consider the following automation JSON file:
{
"version": 1,
"rules": [
{
"text": "Application",
"x": 35,
"y": 3,
"conditions": [
[ "seen", false ]
],
"actions": [
[ "button", 2, true ],
[ "button", 2, false ],
[ "setbool", "seen", true ]
]
},
{
"regexp": "\\d+",
"actions": [
[ "exit" ]
]
},
{
"actions": [
[ "setbool", "default_match", true ]
]
}
]
}
The first rule matches only if:
the text displayed at
(35, 3)
isApplication
this rule was never matched before (because the variable
seen
is set totrue
in theactions
and expected to befalse
in theconditions
)
If the first rule is matched, the right button (2
) is pressed then released
(true
then false
) and the variable seen
is set to true
.
The second rules matches if the text is a number (regular expression \d+
)
displayed at any coordinates (no x
nor y
specified). The action exit
makes
speculos exit without any confirmation.
The last rule is a default rule (there are no options). If no previous rule is
matched, the variable default_match
is set to true
.