Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 27 Next »

Pré-requis

  • Configurer le téléphone pour exécuter les tests : Settings > Developer > cocher « Enable UI Automation »

  • Télécharger l’environnement de développement pour macOS Xcode (disponible sur App Store)

  • Disposer de versions compatibles de Xcode, macOS et iOS : https://developer.apple.com/fr/support/xcode/ (éviter la version 13.3.1 d’iOS)

Pour tester un téléphone avec iOS 15.4, il est nécessaire d’avoir Xcode 13.3 et un macOS 12.3 Monterey. Cette version de macOS est disponible sur les MacBook Pro commercialisés à partir de 2015. Elle permet également de tester les téléphones ayant une version d’iOS antérieure.

Etape 1 : Installation du WebDriverAgent

WebDriverAgent est un serveur WebDriver initié par Facebook puis repris par Appium pour automatiser des actions utilisateur sur les appareils iOS. Ce projet constitue la base de notre solution d’automatisation.

L’installation se fait grâce à npm :

brew update
brew install node
npm install --global appium-webdriveragent

Le projet Xcode se trouve alors dans le répertoire node_modules : /usr/local/lib/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj

Etape 2 : Préparation du WebDriverAgent sur Xcode pour la première utilisation

  • Ouvrir un terminal et aller où se trouve le projet :

cd /usr/local/lib/node_modules/appium-webdriveragent/
  • Ouvrir le projet :

open WebDriverAgent.xcodeproj
  • Connecter le téléphone au Mac en filaire.

  • Connecter le téléphone et le Mac au même réseau wifi.

  • Window > Devices and Simulators : cliquer sur le nom de son iPhone et cocher la case "connect via network" (une icône “planète” doit apparaître à côté du nom du téléphone, si cela ne fonctionne pas plusieurs fois, désactiver et réactiver le wifi du Mac).

  • Une fois la connexion faite, retirer le câble entre l'iPhone et le Mac.

  • Dans le navigateur de projet à gauche dans Xcode, cliquer sur “WebDriverAgent”.

  • Sélectionner WebDriverAgentRunner parmi les targets, et l’onglet “Signing & Capabilities”.

  • Vérifier que le champ “Automatically manage signing” est coché.

  • Sélectionner une équipe de développement. On peut utiliser l’équipe Greenspector ou l’équipe associée à son identifiant Apple, comme sur l’exemple. On s’attend à une erreur au niveau du bundle identifier (package name) car celui-ci est déjà utilisé.

  • Basculer sur l’onglet “Build Settings” et renseigner un nouveau bundle identifier dans la section Packaging.

  • La section “Signing & Capabilities” est alors mise à jour.

  • Faire les mêmes actions en sélectionnant IntegrationApp parmi les targets.

  • Dans le choix de la cible en haut de Xcode, choisir WebDriverAgentRunner et le bon téléphone.

Etape 3 : Installation du WebDriverAgent sur le téléphone [Commencer directement à cette étape si Xcode est déjà configuré]

Si la connexion ne se fait pas automatiquement entre le téléphone et le Mac :

  • Connecter le téléphone au Mac en filaire.

  • Connecter le téléphone et le Mac au même réseau wifi (possibilité de faire un partage de connexion du Mac vers le téléphone).

  • Window > Devices and Simulators : cliquer sur le nom de son iPhone et cocher la case "connect via network" (une icône “planète” doit apparaître à côté du nom du téléphone, si cela ne fonctionne pas plusieurs fois, désactiver et réactiver le wifi du Mac).

  • Une fois la connexion faite, retirer le câble entre l'iPhone et le Mac.

  • Compiler le projet : Product > Build

  • Lancer le WebDriverAgent (WDA) : Product > Perform Action > Test Without Building
    Le WDA est installé sur le téléphone. On s’attend à une erreur car le développeur n’est pas identifié sur le téléphone. On l’autorise à partir de l’iPhone : Settings > General > Device management. On relance le test depuis Xcode : Product > Perform Action > Test Without Building. Le WebDriverAgent est alors prêt à recevoir des requêtes pour l’automatisation

  • Arrêter le test en cliquant sur l’icône carré.

Etape 4 : Lancement du WebDriverAgent à partir du testrunner

  • Récupérer le testrunner sur https://app.greenspector.com, dans l’onglet Modules, et le placer dans un dossier (par exemple “testrunner_files”).

  • Ajouter dans ce dossier les fichiers de configuration config_ios.yml et job_ios.yml, ainsi qu'un script gdsl avec l’extension “testgb”.

  • Modifier ces fichiers pour qu’ils correspondent à la mesure souhaitée.

Exemple d’un fichier config_ios.yml :

platform: ios # The platform you are testing on [mobile | pc]
resultPath: ./greenspector # The path where you want the Testrunner to save the tests results. defaults to ./greenspector/measures
target: # target bloc for iOS mode
  ip: 192.168.10.52 #Olivier’s iPhone
  udid: 42df71bb47bb61cca72559672128f1fbb5184a62 #Olivier’s iPhone
  name: Olivier's iPhone
  lang: en
  paths:
    webDriverAgent: /usr/local/lib/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj # Full path to WebDriverAgent xcodeproject
    ios-deploy: /usr/local/bin/ios-deploy # Path to ios-deploy. Leave this empty if ios-deploy is in your PATH
greenspector:
  server: https://app.greenspector.com # URL of your Greenspector instance
  token: XXXXX # Your private token registered on Greenspectors

Le champ udid correspond à l'identifiant unique de l'appareil, trouvable grâce à Xcode (Window > Devices and Simulators).

Exemple d’un fichier job_ios.yml :

mode: custom # apk | url | custom
greenspector:
  application:
    name: TestLeo # Your application's name
    version: "REFERENCE (iOS)" # Your application's version
job: # Custom job android apk
  testsSuites:   
    - name: suite1
      testFiles:
        - "./testreference.testgb"
  iterations: 1 # Number of iteration for each test case
  testTimeout: 30m0s # Timeout for the total duration of the test, default value is 30m, max value is 60m
  online: true # [true, false]
  modules:
    hardware_probe: false

Exemple d’un script gdsl simple testant l’application YouTube :

#Lancement de l'application
measureStart,CHRGT_homePage
applicationStart,com.google.ios.youtube
waitUntilText,Home
pause,1000
measureStop

#Pause sur la page d’accueil
measureStart,PAUSE_homePage
pause,30000
measureStop

#Ecriture de la recherche
measureStart,ACTION_writeResearch
clickByTextExact,Search
enterText,greenspector
measureStop

#Recherche d'une vidéo
measureStart,CHRGT_videos
clickByTextExact,Search
waitUntilText,Home
pause,1000
measureStop

#Arrêt de l’application
applicationKill,com.google.android.youtube

Pour trouver l’identifiant des applications installées sur le téléphone, taper la commande “ios-deploy -B”.

Pour transférer des fichiers .ipa de l’ordinateur vers le téléphone, télécharger le fichier binaire ideviceinstaller (https://github.com/libimobiledevice/ideviceinstaller ), puis taper la commande “ideviceinstaller --install [path_to_ipa_file]”.

  • Ouvrir un terminal à l’intérieur de ce dossier

  • Autoriser l’exécution du testrunner

chmod +x testrunner
  • Lancer le testrunner :

./testrunner --jobFile job_ios.yml --config config_ios.yml

Outils pour inspecter les applications et les sites web sur iOS

Démarche à suivre :

  • Ouvrir le projet WebDriverAgent sur Xcode

  • Lancer l’automatisation : Product > Perform Action > Test Without Building

  • Ouvrir Appium Server GUI

  • Cliquer sur “Start Server”

  • Ouvrir Appium Inspector

  • Compléter le champ “Remote Path” : /wd/hub

  • Compléter le champ “Json Representation” avec les informations relatives à votre téléphone :

{
  "platformName": "iOS",
  "platformVersion": "15.4",
  "udid": "00008020-000815E82E06002E",
  "bundleId": "com.google.ios.youtube",
  "deviceName": "iPhone de Olivier"
}
  • Cliquer sur “Start Session”

Sur Appium Inspector, l'écran du téléphone apparaît. Il est alors possible de sélectionner les éléments de l'écran pour visualiser leurs informations (name, label…), mais aussi de réaliser directement des scrolls et des clics. Les fonctions du type clickByText, searchByText, waitUntilText et setTextByText recherchent le label des éléments, puis le name.

Documentation du GDSL sur iOS

Voir Greenspector DSL for iOS

Erreurs possibles

A test configuration must be provided to _XCTestMain” sur Xcode

→ Problème du WebDriverAgent avec la version 13.3.1 de iOS. Mettre à jour le téléphone.

Error Domain=DTXProxyChannel Code=1 « (null) » UserInfo={DTXProxyChannelErrorMessage=Channel disconnected}

→ Il faut simplement réinsérer le câble de l’iPhone sur un autre port.

Testing failed: WebDriverAgentRunner: WebDriverAgentRunner-Runner.app encountered an error (Failed to install or launch the test runner).

→ Désinstaller le WebDriverAgent sur le téléphone, et le réinstaller en suivant la procédure habituelle (Voir l'étape 3).

xcodebuild: error: Unable to find a destination matching the provided destination specifier.

→ Il s’agit d’un problème de connexion entre le téléphone et l’ordinateur. Vérifier sur Xcode dans “Window > Devices and Simulators” si le téléphone est toujours connecté.

Could not get default session: Could not execute request Post “https://192.168.109.29:8100/session”: dial tcp 192.168.109.29:8100: i/o timeout.

→ Vérifier l’adresse IP renseignée dans le fichier config.yml.

Error when retrieving your licence: Get “https://app.greenspector.com/api/user/licence”: dial tcp: i/o timeout.

→ Relancer les mesures.

could not scroll down. Reason could not scroll from 500 to 200. Reason: Could not execute request Post “http://192.168.109.29:8100/session/B21FD5D6-8ADB-407B-9D23-8A06C1ED5DC7/wda/touch/perform”: EOF.

→ Exemple d’échec de commande GDSL. Relancer les mesures dans ce cas.

  • No labels