Das letzte Mal schrieb ich in "Automatisieren des Testens von Smartphone-Apps mit Appium-Übersicht", dass Appium das Testen von Smartphone-Apps automatisieren kann.
Dieses Mal möchte ich darüber schreiben, wie Testcode für Smartphone-Apps mit Appium und Python erstellt wird.
(Ergänzung) Derzeit (20. Juli 2013) zielen wir nur auf iOS-Apps ab. Android-Apps werden später beschrieben.
Die diesmal verwendete Umgebung ist wie folgt.
Software | Ausführung |
---|---|
OS | MacOS X Version 10.8.4 |
Python | 2.7.4 |
pip | 1.2.1 |
XCode | 4.5.3 |
Weitere Informationen zur Installation von Appium finden Sie im vorherigen Artikel: "Automatisieren des Testens von Smartphone-Apps mit Appium-Übersicht".
Lassen Sie uns zunächst den Vorgang anhand des Beispielcodes überprüfen. Die Operationen von hier aus werden am Terminal ausgeführt.
Holen Sie sich die komplette Appium-Quelle von GitHub.
git clone https://github.com/appium/appium.git
Wenn Sie die vollständige Appium-Quelle haben, wechseln Sie in den TestApp-Ordner.
cd appium/sample-code/apps/TestApp/
Erstellen Sie Ihre iOS-App mit dem Befehl xcodebuild. Das zum Erstellen verwendete iOS SDK sollte iPhone Simulator sein.
xcodebuild -sdk iphonesimulator
Navigieren Sie zu dem Ordner, der den Python-Beispielcode enthält.
cd ../../examples/python/
Stellen Sie vor dem Ausführen des Beispielcodes sicher, dass Sie über das Python-Selen-Modul verfügen. Wenn nicht, installieren Sie das Selenmodul mit pip.
#Überprüfen Sie, ob das Python-Selen-Modul enthalten ist
pip freeze
#Wenn das Selenmodul nicht enthalten ist, führen Sie den folgenden Befehl aus
sudo pip install selenium
Nachdem wir fertig sind, führen wir den Beispielcode aus.
appium &
python simple.py
Ich habe viel gesucht, aber ich konnte kein Tutorial zum Schreiben von Testcode in Python finden. Daher möchte ich zusammenfassen, wie Testcode basierend auf dem Beispielcode geschrieben wird. → Wenn Sie so etwas wie ein Tutorial finden, schreiben Sie den Inhalt dieses Artikels neu.
Der Speicherort des Beispielcodes ist "appium / sample-code / examples / python /".
Wenn Sie den Beispielcode lesen, können Sie sehen, dass die iOS-App über die WebDriver-API des selenuim-Moduls ausgeführt wird.
import unittest
class AppiumSampleTest(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def setUp(self):
#Rufen Sie den Pfad ab, in dem sich die iOS-App befindet
# (Importieren Sie das Betriebssystemmodul)
app = '(Der Pfad, in dem sich die iOS-App befindet)'
#Lassen Sie Appium iOS-Apps mithilfe des Web-Treibers von Selen erkennen
# (Importieren Sie den Web-Treiber aus dem Selen-Modul)
# command_Der vom Executor angegebene Domänenteil und Portteil sind
#Dies hängt von der verwendeten Umgebung ab
self.driver = webdriver.Remote(
command_executor = 'http://127.0.0.1:4723/wd/hub',
desired_capabilities = {
'browserName' : 'iOS',
'platform' : 'Mac',
'version' : '6.0', #iOS-Version
'app' : app #Der Pfad, in dem sich die auszuführende iOS-App befindet
})
def tearDown(self):
self.driver.quit()
def test_ui_operation(self):
# 1.Schiebereglerbedienung
# 1-1.Holen Sie sich den Schieberegler
sliders = self.driver.find_elements_by_tag_name('slider')
# 1-2.Bewerten Sie den Anfangswert des Schiebereglers
self.assertEqual(sliders[0].get_attribute('value'), '50%')
# 1-3.Holen Sie sich Touch-Events
drag = webdriver.common.touch_actions.TouchActions(self.driver)
# 1-4.Stellen Sie den Schieberegler ein-50%Zu
drag.flick_element(sliders[0], -0.5, 0, 0)
# 1-5.Bewegen Sie den Schieberegler
drag.perform()
# 1-6.Der Schieberegler-Einstellwert ist 0%Bewerten Sie das
self.assertEqual(sliders[0].get_attribute('value'), '0%')
# 2.Textfelder bearbeiten
# 2-1.Holen Sie sich ein Textfeld
textFields = self.driver.find_elements_by_tag_name('textField')
# 2-2.Geben Sie 1 in das erste Textfeld ein
textFields[0].send_keys(1)
# 2-3.Geben Sie 2 in das zweite Textfeld ein
textFields[1].send_keys(2)
# 2-4.Bewerten Sie, dass die Summe der Werte im ersten und zweiten Textfeld 3 beträgt.
self.assertEqual(int(textFields[0].get_attribute('value'))
+ int(textFields[1].get_attribute('value')), 3)
# 3.Tastenbedienung
# 3-1.Holen Sie sich den Knopf
buttons = self.driver.find_elements_by_tag_name('button')
# 3-2.Drück den Knopf
buttons[0].click()
# 4.Etikettenmanipulation
# 4-1.Holen Sie sich das Etikett
texts = self.driver.find_elements_by_tag_name('staticText')
# 4-2.Bewerten Sie, dass der Inhalt des Etiketts 3 ist
self.assertEqual(int(texts[0].get_attribute('value')), 3)
Zusammenfassung der Handhabung von Bildschirmteilen von iOS-Apps im Selen-Modul
Bildschirmteile | Erfassungsmethode |
---|---|
UITextField | self.driver.find_elements_by_tag_name('textField') |
UIButton | self.driver.find_elements_by_tag_name('button') |
UILabel | self.driver.find_elements_by_tag_name('staticText') |
UISlider | self.driver.find_elements_by_tag_name('slider') |
Bildschirmteile | Betriebsdetails | Funktionsweise |
---|---|---|
UITextField | Geben Sie einen Wert ein | send_Verwenden Sie die Schlüsselmethode |
UITextField | Holen Sie sich den Wert | get_Verwenden Sie die Attributmethode |
UIButton | Drück den Knopf | Verwenden Sie die Klickmethode |
UILabel | Holen Sie sich den Anzeigeinhalt des Etiketts | Siehe die Texteigenschaft |
UISlider | Ändern Sie den Einstellwert | Berühren Sie Aktionen_Stellen Sie den Wert mit der Elementmethode ein. Bewegen Sie den Schieberegler nach dem Einstellen mit der Perform-Methode von TouchActions. |
Es wird sein.
(Ergänzung) Die obige Tabelle wird von Zeit zu Zeit aktualisiert.
Das Gesamtbild des Quellcodes ist wie folgt.
# coding: utf-8
import unittest
import os
from selenium import webdriver
class AppiumSampleTest(unittest.TestCase):
def setUp(self):
#Rufen Sie den Pfad ab, in dem sich die iOS-App befindet
app = os.path.join('/tmp/appium',
'sample-code/apps/TestApp/build/Release-iphonesimulator',
'TestApp.app')
app = os.path.abspath(app)
#Lassen Sie Appium iOS-Apps mithilfe des Web-Treibers von Selen erkennen
# command_Der vom Executor angegebene Domänenteil und Portteil sind
#Dies hängt von der verwendeten Umgebung ab
self.driver = webdriver.Remote(
command_executor='http://localhost:4723/wd/hub',
desired_capabilities={
'browserName': 'iOS',
'platform': 'Mac',
'version': '6.0',
'app': app
})
def test_ui_operation(self):
#Schiebereglerbedienung
sliders = self.driver.find_elements_by_tag_name('slider')
self.assertEqual(sliders[0].get_attribute('value'), '50%')
drag = webdriver.common.touch_actions.TouchActions(self.driver)
drag.flick_element(sliders[0], -0.5, 0, 0)
drag.perform()
self.assertEqual(sliders[0].get_attribute('value'), '0%')
#Textfelder bearbeiten
textFields = self.driver.find_elements_by_tag_name('textField')
textFields[0].send_keys(1)
textFields[1].send_keys(2)
self.assertEqual(int(textFields[0].get_attribute('value'))
+ int(textFields[1].get_attribute('value')), 3)
#Tastenbedienung
buttons = self.driver.find_elements_by_tag_name('button')
buttons[0].click()
#Etikettenmanipulation
texts = self.driver.find_elements_by_tag_name('staticText')
self.assertEqual(int(texts[0].get_attribute('value')), 3)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
Recommended Posts