Emprarem la llibreria https://appium.io
Podrem fer tests funcionals de forma molt similar a com utilitzem Selenium per a web.
Articles previs:
Android Studio és l'eina oficial que Google recomana per a desenvolupa en Android.
Necessitarem NodeJS versió LTS:
# apt install nodejs npm # npm install -g n # n lts
Tanqueu i obriu de nou el terminal, i comproveu la versió de NodeJS:
$ node --version
Instal·lem la llibreria Appium i el Driver UIAutomator2
$ sudo npm i -g appium $ appium driver install uiautomator2
Provem servidor en una shell a part (escoltarà al port 4723):
$ appium
El podem parar amb CTRL+C
.
També hem d'instal·lar:
L'emulador Android es pot iniciar des de CLI:
$ cd Andrid/Sdk/emulator $ ./emulator -avd "Pixel_XL_API_34"
Si hem de fer els autotests en una servidor podem afegir la opció -no-window
perquè funcioni en mode headless
:
$ ./emulator -avd "Pixel_XL_API_34" -no-window
La documentació oficial de Appium ens ofereix un exemple en Python i altres llenguatges (Javascript, Java, Ruby).
Revisa que estiguis consultant la documentació de la versió actual.
Creem un virtualenv per no interferir la instal·lació del sistema operatiu:
$ python -m venv envtest $ source envtest/bin/activate (envtest) $ pip install Appium-Python-Client pytest
Prenem aquest codi d'exemple que obre l'aplicació com.android.settings
i cerca la opció Battery
amb Xpath:
import unittest from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy # Import Appium UiAutomator2 driver for Android platforms (AppiumOptions) from appium.options.android import UiAutomator2Options capabilities = dict( platformName='Android', automationName='uiautomator2', deviceName='Android', appPackage='com.android.settings', appActivity='.Settings', language='en', locale='US' ) # Converts capabilities to AppiumOptions instance capabilities_options = UiAutomator2Options().load_capabilities(capabilities) appium_server_url = 'http://localhost:4723' class TestAppium(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Remote(command_executor=appium_server_url,options=capabilities_options) def tearDown(self) -> None: if self.driver: self.driver.quit() def test_find_battery(self) -> None: el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]') el.click() if __name__ == '__main__': unittest.main()
Assegura't que disposes de la variable $ANDROID_SDK_ROOT
. Si no la tens, sol ser:
$ export ANDROID_SDK_ROOT=~/Android/Sdk/
set ANDROID_SDK_ROOT=C:\Users\usuari\AppData\Local\Android\Sdk
Engeguem el servidor Appium (escoltarà al port 4723):
$ appium
Si estem treballant amb Android Studio i tenim l'emulador engegat, no cal aquest apartat.
Si no tenim cap emulador engegat, podem posar-ho en marxa amb (substituir pel AVD pertinent):
$ cd ~/Android/Sdk/emulator $ ./emulator -avd "Pixel_3a_API_34_extension_level_7_x86_64"
Engeguem els tests:
$ source env/bin/activate (envtest) $ python3 test_example.py
…i podrem veure com entra als Settings de l'emulador i clica en la secció «Battery» (sempre i quan l'emulador estigui en anglès).