Ejecutando pruebas en Appium
Serenity soporta la ejecucion de pruebas en dispositivos moviles/emuladores de forma nativa con Appium.
Primero, necesitaras instalar Appium:
(sudo) npm install -g appium --chromedriver_version="102.0"
Despues, Appium estara disponible como comando y puede iniciarse invocando el siguiente comando:
appium
Luego adapta serenity.properties para ejecutar en un dispositivo Android:
webdriver.driver= appium
webdriver.base.url = http://www.google.com/
appium.hub = http://127.0.0.1:4723/wd/hub
appium.platformName = Android
appium.platformVersion = 5.1.1
appium.deviceName = e2f5c460
appium.browserName = Chrome
Aqui hay un ejemplo para iOS:
webdriver.driver= appium
webdriver.base.url = http://www.google.com/
appium.hub = http://127.0.0.1:4723/wd/hub
appium.platformName = iOS
appium.platformVersion = 8.1
appium.deviceName = iPhone 5
appium.browserName = Safari
Nota: Todas las propiedades que comienzan con appium en serenity.properties seran enviadas al driver de Appium.
Por ejemplo, configurar appium.automationName = XCUITest en serenity.properties tendra como efecto final establecer la propiedad automationName = XCUITest en las capacidades del driver de Appium.
Ademas del archivo de propiedades, tambien puedes usar parametros de linea de comandos:
mvn test -Dappium.hub=http://127.0.0.1:4723/wd/hub -Dwebdriver.driver=appium -Dappium.platformName=iOS -Dappium.browserName=Safari -Dappium.deviceName="iPhone 5"
Todas las propiedades que comienzan con appium.* seran enviadas al driver de Appium como capacidades deseadas de Appium.
Por ejemplo, establecer la propiedad appium.automationName=myAutomationName tendra como efecto establecer la capacidad automationName en el driver de Appium a myAutomationName.
Las siguientes anotaciones estan soportadas para un elemento de Page Object:
@AndroidFindBy(id="")
private WebElement loginButton;
@iOSFindBy(id="")
private WebElement loginButton;
@FindBy(accessibilityId="")
private WebElement loginButton;
A veces puede ser necesario en un Page Object usar metodos especificos del driver subyacente:
AndroidDriver<AndroidElement> androidDriver() {
return (AndroidDriver<AndroidElement>)
((WebDriverFacade) getDriver()).getProxiedDriver();
}
...
androidDriver().hideKeyboard();
Tambien puedes agregar Appium a un grid existente. Consulta la documentacion de Appium para mas detalles sobre la opcion node-config.