Aller au contenu

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 :

  1. Vérifier la connexion : échoue immédiatement avec SERVICE_NOT_CONNECTED si le service d'accessibilité n'est pas activé.
  2. Vérifier do : lève CONNECTOR-TASK-ERROR-001 si le sous-workflow est manquant ou vide.
  3. Parcourir : visite chaque nœud de la fenêtre active, dans l'ordre de parcours.
  4. Par nœud : définit ceux des six champs *_variable_input qui sont non vides (texte, contentDescription, x/y centraux, isClickable, isLongClickable - en chaînes, isClickable/isLongClickable en "true"/"false"), puis exécute le sous-workflow "do" jusqu'à son terme.
  5. 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

"text_variable_input": "$text",
"x_variable_input": "$x",
"y_variable_input": "$y"

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" }
  ]
}