Tâche For Each Element In Screen
Résumé
- Nom interne :
ForEachElementInScreen - Catégorie : Android UI
- Objectif : Exécuter un sous-workflow imbriqué une fois par nœud d'accessibilité actuellement à l'écran, en exposant le texte, la content-description, la position centrale et les indicateurs cliquables de chaque nœud dans des variables de boucle.
- Type de tâche : Connecteur - voir Aperçu des Tâches > Tâches Connecteur pour comprendre ce que cela implique avant de continuer.
Compatibilité
- Version AndroMate minimale :
1.1.0 - Version AndroMate maximale :
1.1.0 - Android minimum :
Android 13 (API 33) - Android testé maximum :
Android 16 (API 36) -
Fabricants supportés :
- Samsung (One UI 6.x / 7.x / 8.x)
- Autres fabricants - pas encore supportés (Xiaomi HyperOS et Google Pixel en cours d'adaptation)
- Permissions requises :
ACCESSIBILITY_SERVICE(ainsi que ce que requièrent les tâches placées dans"do")
Description détaillée
La tâche For Each Element In Screen parcourt l'arbre d'accessibilité de la fenêtre active dans l'ordre de parcours (le même ordre que Get Screen Elements) et exécute le sous-workflow imbriqué sous "do" une fois par nœud - l'équivalent, pour les éléments d'écran, de l'itération de liste de ForEachElement.
Chacune des six variables de sortie est indépendante et optionnelle : laissez un champ "*_variable_input" vide (ou omettez-le) pour ignorer celle-ci - ex. si seule la position vous intéresse, ne définissez pas text_variable_input. Contrairement à ForEachElement, un nom de variable non défini n'est jamais une erreur ; cela signifie simplement "ne pas exposer celle-ci."
Dans le graphe externe, ForEachElementInScreen se comporte comme une tâche normale - un lien entrant, un lien sortant "to", suivi une fois que tous les nœuds ont été traités.
Paramètres d'entrée
| Paramètre | Type | Requis | Valeurs possibles | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|---|
text_variable_input |
String | Non | Un nom de $variable, ou vide pour ignorer |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
contentDescription_variable_input |
String | Non | Un nom de $variable, ou vide pour ignorer |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
x_variable_input |
String | Non | Un nom de $variable, ou vide pour ignorer |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
y_variable_input |
String | Non | Un nom de $variable, ou vide pour ignorer |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
isClickable_variable_input |
String | Non | Un nom de $variable, ou vide pour ignorer |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
isLongClickable_variable_input |
String | Non | Un nom de $variable, ou vide pour ignorer |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
do |
Objet (sous-workflow) | Oui | Un objet workflow imbriqué - voir Le sous-workflow do d'Iterate pour sa forme (identique ici) |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | - |
Paramètres de sortie
La tâche For Each Element In Screen elle-même ne produit aucune sortie. Toute variable écrite par une tâche à l'intérieur de "do" met à jour le contexte partagé du workflow normalement, comme si cette tâche s'exécutait directement dans le graphe externe. Les six champs *_variable_input sont des variables de boucle par itération (voir Détails des paramètres de sortie), pas des sorties de tâche persistantes.
Exceptions
| Code | Nom de l'exception | Description |
|---|---|---|
SCREEN-AUTOMATOR-ERROR-010 |
Screen Automator Service Not Connected | Le service d'accessibilité AndroMate n'est pas activé/connecté. |
CONNECTOR-TASK-ERROR-001 |
No Sub Tasks | Le champ "do" est manquant ou vide - une tâche connector doit contenir un sous-workflow à exécuter. |
Note : un *_variable_input non défini n'est pas une erreur - cette sortie est simplement ignorée à chaque itération. Un écran vide (aucun nœud) n'est pas non plus une erreur - la boucle s'exécute alors zéro fois.
Diagramme d'exécution
flowchart TD
Start([ForEachElementInScreen]) --> CheckConnected{Service d'accessibilité\nconnecté ?}
CheckConnected -->|Non| E1[SCREEN-AUTOMATOR-ERROR-010\nSERVICE_NOT_CONNECTED]
CheckConnected -->|Oui| CheckDo{Sous-workflow do\nprésent ?}
CheckDo -->|Non| E2[CONNECTOR-TASK-ERROR-001\nNO_SUB_TASKS]
CheckDo -->|Oui| Walk["Parcourir l'arbre d'accessibilité\n(ordre de parcours)"]
Walk --> CheckNode{Encore des nœuds ?}
CheckNode -->|Non| Continue[Suivre le lien 'to' externe]
CheckNode -->|Oui| SetVars[Définir les *_variable_input\nrenseignés pour ce nœud]
SetVars --> RunSub[Exécuter le sous-workflow do]
RunSub --> CheckNode
Continue --> Success([VoidResult])
E1 --> Error([Exception])
E2 --> Error
style Start fill:#e3f2fd
style Success fill:#c8e6c9
style Error fill:#ffcdd2
style RunSub fill:#fff9c4
style SetVars fill:#c8e6c9
style Walk fill:#f3e5f5
Fonctionnement :
- Vérifier la connexion : échoue immédiatement avec
SERVICE_NOT_CONNECTEDsi le service d'accessibilité n'est pas activé. - Vérifier
do: lèveCONNECTOR-TASK-ERROR-001si le sous-workflow est manquant ou vide. - Parcourir : visite chaque nœud de la fenêtre active, dans l'ordre de parcours.
- Par nœud : définit ceux des six champs
*_variable_inputqui sont non vides (texte, contentDescription, x/y centraux, isClickable, isLongClickable - en chaînes,isClickable/isLongClickableen"true"/"false"), puis exécute le sous-workflow"do"jusqu'à son terme. - Continuer : une fois tous les nœuds traités (ou immédiatement, si l'écran n'en a aucun), le moteur suit le lien
"to"externe.
Exemples de code
Exemple 1 - Journaliser le texte de chaque élément cliquable
{
"Start": [
{
"id": "0",
"variables": [
{ "variableName": "$text", "variableValue": "", "is_kpi": false },
{ "variableName": "$clickable", "variableValue": "", "is_kpi": false }
]
}
],
"ForEachElementInScreen": [
{
"id": "1",
"title": "Journaliser les éléments cliquables",
"text_variable_input": "$text",
"isClickable_variable_input": "$clickable",
"do": {
"StartSubTask": [{ "id": "sub-0" }],
"TextReport": [
{ "id": "sub-1", "texte": "$text", "texte_type": "Info Text" }
],
"End": [{ "id": "sub-100" }],
"Links": [
{ "from": "sub-0", "to": "sub-1" },
{ "from": "sub-1", "to": "sub-100" }
]
}
}
],
"End": [{ "id": "100" }],
"Links": [
{ "from": "0", "to": "1" },
{ "from": "1", "to": "100" }
]
}
Détails des paramètres d'entrée
1-6. Paramètres d'entrée : text_variable_input, contentDescription_variable_input, x_variable_input, y_variable_input, isClickable_variable_input, isLongClickable_variable_input
Chacun nomme une $variable qui reçoit une information sur le nœud courant, à chaque itération. Les six sont indépendants - ne définissez que ceux dont vous avez besoin.
Exemple
7. Paramètre d'entrée : do
Le sous-workflow imbriqué, exécuté une fois par nœud. Voir Le sous-workflow do d'Iterate pour sa forme.
Détails des paramètres de sortie
Cette tâche n'a pas de sortie persistante propre. À chaque itération, avant d'exécuter "do", elle écrit dans celles de ces variables que vous avez nommées :
| Variable | Valeur |
|---|---|
text_variable_input |
Le texte visible du nœud, ou vide si aucun. |
contentDescription_variable_input |
La content-description du nœud, ou vide si aucune. |
x_variable_input |
Le X central des limites du nœud à l'écran (le point à utiliser dans Click In (x, y)). |
y_variable_input |
Le Y central des limites du nœud à l'écran. |
isClickable_variable_input |
"true" ou "false" (AndroMateContext n'a pas de type booléen - stocké en chaîne). |
isLongClickable_variable_input |
"true" ou "false", comme ci-dessus. |
Exemple JSON complet
Clique sur le premier élément dont le texte est exactement "Allow", trouvé en parcourant tous les éléments de l'écran :
{
"Start": [
{
"id": "0",
"variables": [
{ "variableName": "$text", "variableValue": "", "is_kpi": false },
{ "variableName": "$x", "variableValue": "", "is_kpi": false },
{ "variableName": "$y", "variableValue": "", "is_kpi": false }
]
}
],
"ForEachElementInScreen": [
{
"id": "1",
"title": "Trouver et cliquer Allow",
"text_variable_input": "$text",
"x_variable_input": "$x",
"y_variable_input": "$y",
"do": {
"StartSubTask": [{ "id": "sub-0" }],
"CompareStrings": [
{ "id": "sub-1", "var_x": "$text", "var_y": "Allow", "compare_type": "exactText" }
],
"ClickInXY": [
{ "id": "sub-2", "ClickInXY_X": "$x", "ClickInXY_Y": "$y" }
],
"End": [{ "id": "sub-100" }],
"Links": [
{ "from": "sub-0", "to": "sub-1" },
{ "from": "sub-1", "to": "sub-2", "condition": "true" },
{ "from": "sub-1", "to": "sub-100", "condition": "false" },
{ "from": "sub-2", "to": "sub-100" }
]
}
}
],
"End": [{ "id": "100" }],
"Links": [
{ "from": "0", "to": "1" },
{ "from": "1", "to": "100" }
]
}