2013-03-26 5 views
6

Ich versuche mit Appium zum Testen der mobilen Anwendungen meines Unternehmens zu beginnen. Ich möchte die Python-Bindungen verwenden, um die Skripte zu schreiben, und ich muss mit Android-Apps beginnen.Auflisten aller Elemente in Selenium Python Bindings für Appium

Ich habe die Appium Beispiele alle arbeiten. Ich kann grunt android ausführen und die Tests funktionieren, und ich kann die android.py Beispielanwendung ausführen.

Aber ich bin ein totaler Neuling und ich habe kein klares Bild, wie man die Kontrollen in den Apps meines Unternehmens identifizieren kann. Ich habe Erfahrung mit Python, also dachte ich mir, ich würde einfach eine Liste von Steuerelementen erstellen und sie inspizieren.

Ich stecke fest! Alle Methoden wie driver.find_elements_by_tag_name() erfordern eine spezifische Kennung (oder zumindest habe ich keine Wildcard gefunden, die funktioniert).

Wie kann ich den Appium-Baum der Elemente, die die Android-App im Test darstellt, überprüfen? Wie kann ich alle Elemente aufzählen, damit ich sie inspizieren kann? Gibt es einen Baum, den ich laufen kann, um alle Elemente in der App zu finden?

Ich hatte gehofft, ich könnte die Elemente herausfinden, ohne den Quellcode für die Apps zu erhalten, die Anwendungen in Eclipse zu erstellen, etc., aber ich kann das bei Bedarf tun.

P.S. Ich würde es vorziehen, Python zu benutzen, wäre aber offen dafür, etwas anderes zu benutzen, um die Introspektion durchzuführen, wenn das besser funktioniert. Ich könnte immer noch die eigentlichen Tests in Python schreiben, wenn die andere Sprache nicht irgendwie besser wäre.

Antwort

2

Ich möchte immer noch eine Möglichkeit, die Selenium-Schnittstelle von Python zu untersuchen. Aber ich habe einen praktikablen Weg gefunden, um ein klares Bild davon zu bekommen, wie die App aufgebaut ist, und es ist ziemlich einfach, dann herauszufinden, wie man die Selenium-Tests schreibt.

Aktivieren Sie zunächst Ihre App, entweder auf einem echten Gerät, das an Ihren Android-Entwicklungscomputer angeschlossen ist, oder in einem Emulator. Wenn Sie adb devices ausführen, möchten Sie ein einzelnes Gerät sehen, das Ihre App ausführt. Führen Sie als nächstes das uiautomatorviewer Werkzeug aus, und klicken Sie dann auf das Symbol Device Screenshot Symbolleiste. (Es gibt nur zwei Symbolleistensymbole: das erste ist das Open Symbol und sieht wie ein Dateiordner aus und das gewünschte Bild sieht wie ein Stapel von Mobiltelefonen aus.)

Sobald Sie das getan haben, ein Bild Ihrer App erscheint, mit einem Screenshot auf der linken Seite und einem durchsuchbaren Baum auf der rechten Seite. Die Gliederung zeigt alle Steuerelemente der App zusammen mit ihren Textbeschriftungen und anderen Informationen (z. B. ob die clickable-Eigenschaft true oder false für diese Steuerung ist).

Eine Warnung: Die Steuerelemente sind nummeriert, aber in den Selenium-Bindungen sind die Nummern möglicherweise nicht identisch. In der Beispiel-App ApiDemos hat die Graphics-Schaltfläche die Indexnummer 4, da es die fünfte Schaltfläche ist. Um auf diese Position zugreifen zu können, musste ich Index 5 verwenden. Index 0 war ein nicht anklickbares Objekt mit dem Text "API Demos". in einem anderen FrameLayout Objekt bilden die Kopfzeile für den Bildschirm.

Also, ich war in der Lage, diese Änderung die android.py Skript zu machen:

#elem = driver.find_element_by_name('Graphics') 
elem = driver.find_elements_by_tag_name('TextView')[5] 

Kommentar aus dem driver.find_element_by_name() Anruf, und stattdessen die sechsten TextView in der gesamten App zu finden. Das ist nicht die beste Vorgehensweise, aber es zeigt, dass die Ergebnisse uiautomationviewer mir die Dinge anzeigen lassen, die ich über die Steuerelemente wissen muss.Jetzt

Ich weiß genug, um ein wenig Selbstbeobachtung zu tun:

for elem in driver.find_elements_by_tag_name('TextView'): 
    if elem.text == "Graphics": 
     break 
else: 
    print("Could not find desired item") 

Dies ist nicht besser als nur driver.find_element_by_name() nennen, aber es zeigt, dass ich auf dem richtigen Weg bin.

uiautomatorviewer ist eine praktische Lösung für mein Problem. Wenn Sie einen reinen Python haben, lassen Sie es mich bitte wissen.

3

Appium unterstützt WebDrivers Methode "Seitenquelle". So können Sie das tun:

# assume you have a driver object 
import json 

source = driver.page_source 
source = json.loads(source) 
# you can now work with source as a python object 
+0

Vielen Dank für die Antwort. Ich habe das schon ausprobiert, und es funktioniert nicht für mich ... die Testsitzung endet mit einem Fehler. Hast du es mit einer iOS-Anwendung oder einer Android-Anwendung getestet? Ich wette, es funktioniert gut für iOS, aber ich glaube nicht, dass es noch für Android funktioniert. – steveha

Verwandte Themen