Praktische Version zur Automatisierung des Testens von Flutter-Apps mit Appium (Python)

Einführung

Umgebungskonstruktion, die das Testen von Flutter-Apps mit Appium - Qiita automatisiert Es wird eine Fortsetzung von sein. Ich werde den Testcode tatsächlich schreiben und ausführen. Dieses Mal werde ich "Python" verwenden, das relativ einfach vorzubereiten zu sein scheint, während ich gleichzeitig lerne.

Voraussetzungen

Umgebungskonstruktion, die das Testen von Flutter-Apps mit Appium - Qiita automatisiert Und der Umweltbau von Appium ist abgeschlossen

Installiere den Befehl pip

Python sollte standardmäßig mit dem Mac geliefert werden, sodass Sie es nicht erneut installieren müssen. Sie sollten den Befehl pip bereits verwenden können, aber wenn Sie dies nicht getan haben, https://bootstrap.pypa.io/get-pip.py Bitte laden Sie den folgenden Befehl am Download-Ziel herunter und führen Sie ihn aus. (Wenn das nicht funktioniert, versuchen Sie es mit `` `sudo``` davor auszuführen)

python get-pip.py

Appium-Python-Client-Installation

Führen Sie den folgenden Befehl aus, um Appium-Python-Client zu installieren. (Wenn das nicht funktioniert, versuchen Sie es mit `` `sudo``` davor auszuführen)

pip install Appium-Python-Client

Beispiel-App, um diese Zeit zu nutzen

Wir haben unten eine sehr einfache Beispiel-App vorbereitet. (Dies ist eine Count-up-App, die standardmäßig geschrieben wird, wenn Sie ein neues Flutter-Projekt in Android Studio erstellen.)

Screenshot_20191125-231835.jpg

Notieren Sie den Testcode in Appium Desktop

Starten Sie Appium Desktop und gehen Sie zu dem Punkt, an dem Sie die Sitzung mit "Sitzung starten" starten. (Informationen zum Verfahren finden Sie unter Umgebungskonstruktion.)

Wenn Sie die Sitzung starten, wird der folgende Bildschirm angezeigt. Der App-Bildschirm wird auf der linken Seite angezeigt. Wenn die Anzeige nicht mit dem Bildschirm Ihres Geräts übereinstimmt, klicken Sie auf die Schaltfläche Aktualisieren, um den Bildschirm zu aktualisieren. Klicken Sie zunächst auf die Schaltfläche Aufnahme, um die Aufnahme zu starten.

1.png

Dann wechselt der Bildschirm und die Pause-Taste wird anstelle der Aufnahmetaste angezeigt. Klicken Sie auf die Schaltfläche Pause, um die Aufnahme zu beenden.

2.png

Klicken Sie dann im Appium-Bildschirm anstelle des Terminals auf die Plus-Schaltfläche. Informationen zur Plus-Schaltfläche werden auf der rechten Seite angezeigt.

3.png

Klicken Sie auf Tippen, um den Testcode oben anzuzeigen. Sie können die Sprache des Testcodes auswählen und "Python" auswählen.

4.png

Sie können auch JS (wd), JS (Webdriver.io), Ruby, Java und Robot Framework auswählen.

7.png

Auf diese Weise können Sie den Testcode aufzeichnen, wenn Sie die Taste drücken. Der aufgezeichnete Testcode lautet wie folgt.

el1 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button")
el1.click()

Als nächstes möchte ich testen, ob der Text mit der Bezeichnung "1" ordnungsgemäß als "1" gekennzeichnet ist. Sie können das Element aus "Selector" von "Selected Element" abrufen, indem Sie auf das Element klicken.

5.png

Aber ich wusste nicht, wie ich es in Appium Desktop aufnehmen sollte.

Appium-Python-Client · PyPI Je nach Site können Sie die Funktion get_attribute verwenden, um den im Text festgelegten Wert abzurufen.

el = driver.find_element_by_class_name('android.widget.EditText')
driver.set_value(el, 'Testing')

text = el.get_attribute('text')
assertEqual('Testing', text)

el.set_value('More testing')
text = el.get_attribute('text')
assertEqual('More testing', text)

Der Testcode wird wie folgt beschrieben.

el2 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[3]")
text = el2.get_attribute('text')
self.assertEqual('1', text)

Lassen Sie den aufgezeichneten Testcode ausführen

Nur die Aufnahme ist noch nicht zur Ausführung bereit, also legen Sie den Grundstein dafür. Der vollständige Code ist unten.

flutter_app_for_appium_test.py


import os
import unittest
from appium import webdriver
from time import sleep

class FlutterAppTests(unittest.TestCase):
    "Class to run tests against the Chess Free app"
    def setUp(self):
        "Setup for the test"
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '9'
        desired_caps['deviceName'] = '988a97354e4e4c5054'
        desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__), '/Users/Hitoshi/AndroidStudioProjects/flutter_app_for_appium/build/app/outputs/apk/release/app-release.apk'))
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        "Tear down the test"
        self.driver.quit()

    def test_single_player_mode(self):
        "Test the Flutter app launches correctly"
        sleep(1)
        # -----Fügen Sie von hier aus den in Appium Desktop aufgezeichneten Code ein
        el1 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button")
        el1.click()
        el2 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[3]")
        text = el2.get_attribute('text')
        self.assertEqual('1', text)
        # -----Fügen Sie den bisher in Appium Desktop aufgezeichneten Code ein

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(FlutterAppTests)
    unittest.TextTestRunner(verbosity=2).run(suite)

Hier werde ich es kurz erklären. Beschreiben Sie zunächst in der Funktion setUp die Geräte- und APK-Informationen. Es ist in Ordnung, wenn Sie dieselben Informationen wie "Gewünschte Funktionen" von Appium Desktop eingeben.

desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '9'
desired_caps['deviceName'] = '988a97354e4e4c5054'
desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__), '/Users/Hitoshi/AndroidStudioProjects/flutter_app_for_appium/build/app/outputs/apk/release/app-release.apk'))

Fügen Sie als Nächstes in der Funktion test_single_player_mode den Testcode ein, den Sie gerade in Appium Desktop aufgezeichnet haben. Natürlich können Sie es selbst implementieren. Hier ist der eigentliche Testcode.

el1 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button")
el1.click()
el2 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[3]")
text = el2.get_attribute('text')
self.assertEqual('1', text)

Verwenden Sie abschließend die TearDown-Funktion, um den Treiber zu beenden.

self.driver.quit()

Führen Sie den Testcode aus

Führen Sie den Testcode mit dem Befehl aus.

python flutter_app_for_appium_test.py

Sie sollten so etwas sehen: Die App sollte auch auf der Terminalseite starten und die Taste sollte gedrückt werden, um hochzuzählen.

test_single_player_mode (__main__.FlutterAppTests)
Test the Flutter app launches correctly ... ok

----------------------------------------------------------------------
Ran 1 test in 25.573s

OK

Referenz

Recommended Posts

Praktische Version zur Automatisierung des Testens von Flutter-Apps mit Appium (Python)
Überprüfen Sie die Existenz der Datei mit Python
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
2016 Todai Mathematik mit Python gelöst
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Automatisieren einfacher Aufgaben mit Python Inhaltsverzeichnis
Konvertieren Sie den Zeichencode der Datei mit Python3
[Python] Bestimmen Sie den Typ der Iris mit SVM
Probieren Sie einen datengesteuerten Test mit Selenium Python Bindings und py.test aus
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Lerne Nim mit Python (ab Anfang des Jahres).
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
Holen Sie sich mit Python den Betriebsstatus von JR West
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Vereinheitlichen Sie die Umgebung des Python-Entwicklungsteams, beginnend mit Poetry
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Einführung in das Potenzial von Plotlys Streudiagramm anhand praktischer Beispiele
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Schätzen Sie die Haltung des AR-Markers mit Python + OpenCV + Drohne
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Auf dem Weg zum Ruhestand von Python2
Automatisieren Sie Python-Tests mit CircleCI
Rufen Sie die API mit python3 auf.
Über die Funktionen von Python
Die Kraft der Pandas: Python
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[Python] Organisieren Sie die Grundstruktur der Flask-App (Ziel des Entkopierens)
Der 14. März ist der Tag des Umfangsverhältnisses. Die Geschichte der Berechnung des Umfangsverhältnisses mit Python
Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Visualisieren Sie die Häufigkeit von Wortvorkommen in Sätzen mit Word Cloud. [Python]
Fassen wir den Grad der Kopplung zwischen Modulen mit Python-Code zusammen
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Tipps: [Python] Berechnen Sie den Durchschnittswert des angegebenen Bereichs mit Bedgraph
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern