Aller au contenu

Tâche Scroll To Element

Résumé

  • Nom interne : ScrollToElement
  • Catégorie : Android UI
  • Objectif : Répéter un balayage dans une direction jusqu'à trouver un élément correspondant à un sélecteur, ou épuisement d'un nombre maximum de tentatives.
  • Type de tâche : Normal

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

Description détaillée

La tâche Scroll To Element combine Scroll et une recherche d'élément en une seule boucle : elle vérifie d'abord si l'élément est déjà visible, et sinon, balaie une fois dans ScrollToElement_direction, attend ~400ms que l'interface se stabilise, puis revérifie - jusqu'à ScrollToElement_maxAttempts balayages. Comme Scroll, elle ne clique pas sur l'élément une fois trouvé - enchaînez avec une tâche Click In Element ensuite si besoin. Conserver cette séparation des responsabilités (défiler-jusqu'à-trouver vs. cliquer) reflète la scission intentionnelle de l'ancienne tâche combinée ScreenAutomator.


Paramètres d'entrée

Paramètre Type Requis Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
ScrollToElement_direction Enum / String (résolvable) Oui Up, Down, Left, Right Android 13 (API 33) -> Android 16 (API 36) 1.1.0 -> 1.1.0 ""
ScrollToElement_textSelector Enum / String (résolvable) Oui text, contentDescription, tooltipText, resourceId, className, hintText, anyOf Android 13 (API 33) -> Android 16 (API 36) 1.1.0 -> 1.1.0 ""
ScrollToElement_CompareType Enum / String (résolvable) Oui exactText, startWith, contain Android 13 (API 33) -> Android 16 (API 36) 1.1.0 -> 1.1.0 ""
ScrollToElement_Index Entier (résolvable) Non Index base 0 parmi les correspondances Android 13 (API 33) -> Android 16 (API 36) 1.1.0 -> 1.1.0 0
ScrollToElement_matchText String (résolvable) Oui La valeur à faire correspondre Android 13 (API 33) -> Android 16 (API 36) 1.1.0 -> 1.1.0 ""
ScrollToElement_maxAttempts Entier (résolvable) Non ≥ 0 balayages Android 13 (API 33) -> Android 16 (API 36) 1.1.0 -> 1.1.0 10

Paramètres de sortie

Cette tâche ne produit aucune variable de sortie. Elle retourne un VoidResult en cas de succès.


Exceptions

Code Nom de l'exception Description
SCREEN-AUTOMATOR-ERROR-003 Invalid Action Type ScrollToElement_direction n'est ni Up, Down, Left, ni Right.
SCREEN-AUTOMATOR-ERROR-006 Unsupported Text Selector ScrollToElement_textSelector n'est pas une valeur de sélecteur reconnue.
SCREEN-AUTOMATOR-ERROR-010 Screen Automator Service Not Connected Le service d'accessibilité AndroMate n'est pas activé/connecté.
SCREEN-AUTOMATOR-ERROR-011 Screen Automator Action Failed L'élément n'est jamais apparu en ScrollToElement_maxAttempts balayages - inclut la direction/sélecteur/compare/index/matchText/maxAttempts résolus dans le détail de l'erreur.

Diagramme d'exécution

flowchart TD
    Start([ScrollToElement]) --> CheckConnected{Service d'accessibilité\nconnecté ?}
    CheckConnected -->|Non| E1[SCREEN-AUTOMATOR-ERROR-010\nSERVICE_NOT_CONNECTED]
    CheckConnected -->|Oui| Check[Vérifier correspondance]
    Check --> Found{Trouvé ?}
    Found -->|Oui| Success([VoidResult])
    Found -->|Non| Attempts{tentative ==\nmaxAttempts ?}
    Attempts -->|Oui| E2[SCREEN-AUTOMATOR-ERROR-011\nACTION_FAILED]
    Attempts -->|Non| Swipe[Défiler d'un pas\ndans la direction] --> Wait[attendre 400ms] --> Check

    E1 --> Error([Exception])
    E2 --> Error

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style Swipe fill:#fff9c4
    style Check 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 d'abord : cherche une correspondance avec ScrollToElement_matchText avant tout défilement - réussit immédiatement si déjà visible.
  3. Défiler et réessayer : si non trouvé et qu'il reste des tentatives, balaie une fois dans ScrollToElement_direction, attend ~400ms, et revérifie.
  4. Abandonner : lève ACTION_FAILED une fois maxAttempts balayages effectués sans correspondance.

Exemples de code

Exemple 1 - Défiler vers le bas jusqu'à voir le lien "Terms of Service"

{
  "ScrollToElement": [
    {
      "id": "1",
      "title": "Trouver le lien Terms of Service",
      "ScrollToElement_direction": "Down",
      "ScrollToElement_textSelector": "text",
      "ScrollToElement_CompareType": "contain",
      "ScrollToElement_Index": 0,
      "ScrollToElement_matchText": "Terms of Service",
      "ScrollToElement_maxAttempts": 15
    }
  ]
}

Détails des paramètres d'entrée

1. Paramètre d'entrée : ScrollToElement_direction

Mêmes valeurs que Scroll > Scroll_direction : Up, Down, Left, Right.

Exemple

"ScrollToElement_direction": "Down"

2. Paramètre d'entrée : ScrollToElement_textSelector

Mêmes 7 valeurs que Click In Element > ClickInElement_textSelector, dont anyOf.

Exemple

"ScrollToElement_textSelector": "text"

3. Paramètre d'entrée : ScrollToElement_CompareType

exactText, startWith, ou contain (insensible à la casse).

Exemple

"ScrollToElement_CompareType": "contain"

4. Paramètre d'entrée : ScrollToElement_Index

Si plusieurs éléments correspondent, sélectionne le n-ième (base 0).

Exemple

"ScrollToElement_Index": 0

5. Paramètre d'entrée : ScrollToElement_matchText

La valeur à faire correspondre.

Exemple

"ScrollToElement_matchText": "Terms of Service"

6. Paramètre d'entrée : ScrollToElement_maxAttempts

Nombre maximum de balayages avant de lever ACTION_FAILED. Défaut 10.

Exemple

"ScrollToElement_maxAttempts": 15

Détails des paramètres de sortie

Cette tâche n'a pas de paramètres de sortie.


Exemple JSON complet

{
  "ScrollToElement": [
    {
      "id": "1",
      "title": "Défiler jusqu'au bouton Submit",
      "ScrollToElement_direction": "Down",
      "ScrollToElement_textSelector": "text",
      "ScrollToElement_CompareType": "exactText",
      "ScrollToElement_Index": 0,
      "ScrollToElement_matchText": "Submit",
      "ScrollToElement_maxAttempts": 10
    }
  ]
}