Appium und moderne mobile Frameworks: Automatisierungsherausforderungen verstehen

Die Automatisierung mobiler Anwendungen hat sich im letzten Jahrzehnt deutlich weiterentwickelt, vor allem dank Frameworks wie Appium, die es Teams ermöglichen, Apps mit vertrauten Sprachen und Tools zu automatisieren. Gleichzeitig haben moderne UI-Frameworks wie React Native, Flutter und Jetpack Compose die Entwicklung mobiler Anwendungen grundlegend verändert, indem sie einen Großteil der nativen UI-Schicht abstrahieren.

Diese Frameworks beschleunigen zwar die Entwicklung, können aber auch unerwartete Herausforderungen für die Testautomatisierung mit sich bringen – insbesondere dann, wenn UI-Elemente dynamisch generiert werden oder keine stabilen Kennungen besitzen.

Das Verständnis dafür, wie moderne Frameworks UI-Elemente für Automatisierungstools zugänglich machen, kann Teams dabei helfen, Anwendungen zu entwerfen, die sowohl entwicklerfreundlich als auch automatisierungsfreundlich sind.

Wie mobile Automatisierungstools UI-Elemente identifizieren

Automatisierungs-Frameworks wie z. B. Appium Interaktion mit mobilen Anwendungen über die vom Betriebssystem bereitgestellten nativen Automatisierungsframeworks.

Beispielsweise:

  • Android: UIAutomator2
  • iOS: XCUITest

Diese nativen Frameworks stellen die UI-Hierarchie der Anwendung Automatisierungstools zur Verfügung. Testskripte interagieren mit Elementen dieser Hierarchie mithilfe von Selektoren wie beispielsweise:

  • Barrierefreiheits-IDs
  • Ressourcen-IDs
  • XPath-Ausdrücke
  • Klassennamen

Unter diesen werden Barrierefreiheitskennungen häufig empfohlen, da sie in der Regel über Builds und UI-Änderungen hinweg stabil bleiben.

Für Leser, die Appium noch nicht kennen, bietet sich hier eine Übersicht an Appium-Architektur hier.

Moderne UI-Frameworks und Locator-Stabilität

Frameworks wie React Native, Flutter und Jetpack Compose bieten Abstraktionsschichten, die es Entwicklern ermöglichen, UI-Code effizienter zu schreiben. Allerdings generieren diese Frameworks native UI-Komponenten häufig dynamisch zur Laufzeit.

Als Ergebnis:

  • Die Struktur der UI-Hierarchie kann sich zwischen verschiedenen Builds ändern.
  • Einige Elemente legen möglicherweise keine stabilen Kennungen offen.
  • Automatisch generierte Ansichtsstrukturen können die Zuverlässigkeit des Ortungsgeräts beeinträchtigen.

Das bedeutet nicht, dass diese Frameworks schwer zu automatisieren sind. Vielmehr unterstreicht es die Bedeutung von explizite Definition stabiler Bezeichner für UI-Elemente von denen automatisierte Tests abhängen.

Dies hat auch Auswirkungen auf neuere Funktionen wie KI-basierte Selbstheilung. Diese Systeme benötigen eine gewisse Stabilität der Anwendungsstruktur, um zu erkennen, wann sich ein Locator tatsächlich geändert hat. Wenn sich Kennungen und UI-Hierarchien zwischen verschiedenen Builds deutlich verändern, muss möglicherweise bei jeder Ausführung eine „Reparatur“ durchgeführt werden, was die Effektivität automatisierter Wiederherstellungsmechanismen verringert.

Instabilität der Kennungen über verschiedene Builds hinweg

Eine häufige Ursache für Instabilität in der Automatisierung ist, dass UI-Elemente auf Kennungen angewiesen sind, die sich zwischen verschiedenen Builds ändern.

Anwendungen:

  • Elemente ohne definierte Barrierefreiheitskennungen
  • Dynamisch generierte Ansichtsstrukturen
  • Aus der internen Komponentenhierarchie abgeleitete Kennungen

In solchen Fällen können automatisierte Tests in einem Build erfolgreich sein, in einem anderen jedoch fehlschlagen, weil sich die zugrunde liegende UI-Struktur geändert hat.

Dies ist besonders häufig bei modernen UI-Frameworks der Fall, bei denen die gerenderten nativen Komponenten je nach Layout-Aktualisierungen oder Framework-Optimierungen unterschiedlich sein können.

Beispiel: Stabile Identifikatoren in React Native

Frameworks wie React Native bieten Eigenschaften, die es Entwicklern ermöglichen, stabile Kennungen für die Automatisierung bereitzustellen.

Beispielsweise:

<Button 
  testID="login_button" 
  title="Login" 
/>

Dieser Identifikator wird für Automatisierungs-Frameworks zugänglich und ermöglicht es Tests, das Element zuverlässig zu lokalisieren.

Die Verwendung solcher expliziter Kennungen gewährleistet, dass die Tests auch dann stabil bleiben, wenn sich das UI-Layout im Laufe der Zeit weiterentwickelt.

Zugänglichkeit und Testbarkeit gehen oft Hand in Hand.

Die Verwendung von Barrierefreiheitskennungen ist nicht nur für die Automatisierung von Vorteil. Sie verbessert auch die Benutzerfreundlichkeit für Nutzer, die auf Hilfstechnologien wie Bildschirmleseprogramme angewiesen sind.

Beides Apple , Google empfehlen, aussagekräftige Barrierefreiheitsbezeichnungen und -kennungen anzuzeigen in Mobile Anwendungen zur Verbesserung der Zugänglichkeit.

In der Praxis bedeutet dies, dass die Gestaltung von UI-Elementen unter Berücksichtigung der Barrierefreiheit oft zu Verbesserungen führt. gleichzeitige Zuverlässigkeit der Automatisierung.

Praktischer Debugging-Tipp: Untersuchen Sie die UI-Hierarchie

Wenn sich Locatoren in verschiedenen Builds uneinheitlich verhalten, kann die Untersuchung der UI-Hierarchie Aufschluss darüber geben, wie Elemente für Automatisierungstools zugänglich gemacht werden.

Zu den Hilfsmitteln hierfür gehören:

  • Appium Inspector
  • Xcode Accessibility Inspector
  • Android UIAutomator Viewer
  • Android Studio Layout Inspector

Mithilfe dieser Tools können Tester die UI-Struktur untersuchen und Folgendes überprüfen:

  • Ob Elemente stabile Zugänglichkeitskennungen offenlegen
  • Ob sich Kennungen zwischen verschiedenen Builds ändern
  • Ob die UI-Hierarchie dynamisch generierte Komponenten enthält

Oftmals lässt sich die Ursache für die Instabilität des Locators viel leichter identifizieren, wenn man einfach die UI-Hierarchie überprüft.

Bewährte Verfahren für QA-Ingenieure

QA-Ingenieure können die Zuverlässigkeit der Automatisierung verbessern, indem sie einige wichtige Praktiken befolgen:

  • Bevorzugen Zugänglichkeitskennungen über XPath-Locators
  • Stabilität des Locators über mehrere Builds hinweg validieren
  • Arbeiten Sie mit Entwicklern zusammen, um stabile Kennungen zu definieren.
  • Verwenden Sie UI-Inspektionswerkzeuge, um Locator-Strategien zu überprüfen.

Automatisierungsframeworks sind zwar leistungsstark, aber sie hängen stark davon ab, wie UI-Elemente von der Anwendung bereitgestellt werden.

Bewährte Vorgehensweisen für mobile Entwickler

Entwickler können die Testbarkeit deutlich verbessern, indem sie die Automatisierung bereits bei der UI-Entwicklung berücksichtigen.

Hilfreiche Praktiken sind:

  • Definition expliziter Barrierefreiheitskennungen für wichtige UI-Elemente
  • Vermeidung dynamisch generierter Kennungen
  • Konsistente Kennungen über verschiedene Builds hinweg beibehalten
  • Dokumentation der von Automatisierungstests verwendeten Kennungen

Wenn Entwickler die Testbarkeit als Teil des UI-Designprozesses betrachten, wird die Automatisierung wesentlich stabiler und wartungsfreundlicher.

Automatisierung als Teil von Continuous Testing

In modernen Entwicklungspipelines ist die mobile Automatisierung oft Teil einer umfassenderen Strategie für kontinuierliches Testen, bei der automatisierte Tests während des gesamten Entwicklungslebenszyklus ausgeführt werden.

Teams, die die Automatisierung über große Geräteflotten hinweg skalieren möchten, kombinieren häufig Frameworks wie Appium mit Gerätefarm-Plattformen, die die Ausführung mobiler Automatisierungen im großen Maßstab unterstützen. Dies ermöglicht Tests auf verschiedenen Geräten und Betriebssystemversionen.

Mehr über erfahren Digital.ai Testplattform hier: https://docs.digital.ai/continuous-testing/

Fazit

Moderne mobile Frameworks wie React Native, Flutter und Jetpack Compose haben die Produktivität von Entwicklern deutlich gesteigert. Ihre Abstraktionsschichten können jedoch mitunter Probleme bei der Automatisierung verursachen, wenn die Testbarkeit während der Entwicklung nicht berücksichtigt wird.

Für eine zuverlässige Automatisierung profitieren sowohl QA-Ingenieure als auch Entwickler von der Behandlung Testidentifikatoren als Kernbestandteil des UI-Designs, und nicht ein nachträglicher Einfall.

Stabile Barrierefreiheitskennungen verbessern die Zuverlässigkeit der Automatisierung mit Tools wie Appium und unterstützen gleichzeitig eine bessere Barrierefreiheit für echte Benutzer.

Wenn Teams frühzeitig bei der Testbarkeit zusammenarbeiten – indem sie stabile Identifikatoren offenlegen, dynamische Locators vermeiden und die UI-Hierarchie validieren – wird die mobile Automatisierung über verschiedene Builds hinweg wesentlich vorhersehbarer und wartungsfreundlicher.

In vielen Fällen liegt der Unterschied zwischen fehleranfälliger und zuverlässiger Automatisierung nicht im Testwerkzeug selbst, sondern darin, wie testbar die Benutzeroberfläche der Anwendung gestaltet ist.

Auch interessant