Executando testes no Appium
Serenity suporta a execução de testes em dispositivos móveis/emuladores nativamente com Appium.
Primeiro, você precisará instalar o Appium:
(sudo) npm install -g appium --chromedriver_version="102.0"
Depois, o Appium estará disponível como comando e pode ser iniciado invocando o seguinte comando:
appium
Em seguida, adapte o serenity.properties para executar em um 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 está um exemplo 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 as propriedades que começam com appium no serenity.properties serão encaminhadas para o driver appium.
Por exemplo, definir appium.automationName = XCUITest no serenity.properties terá como efeito final definir a propriedade automationName = XCUITest nas capabilities do driver appium.
Além do arquivo de propriedades, você também pode usar opções de linha de comando:
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 as propriedades que começam com appium.* serão encaminhadas para o driver appium como capabilities desejadas do appium.
Por exemplo, definir a propriedade appium.automationName=myAutomationName terá como efeito definir a capability automationName no driver appium para myAutomationName.
As seguintes anotações são suportadas para um elemento Page Object:
@AndroidFindBy(id="")
private WebElement loginButton;
@iOSFindBy(id="")
private WebElement loginButton;
@FindBy(accessibilityId="")
private WebElement loginButton;
Às vezes pode ser necessário em um Page Object usar métodos específicos do driver subjacente:
AndroidDriver<AndroidElement> androidDriver() {
return (AndroidDriver<AndroidElement>)
((WebDriverFacade) getDriver()).getProxiedDriver();
}
...
androidDriver().hideKeyboard();
Você também pode adicionar o Appium a um grid existente. Veja a documentação do Appium para mais detalhes sobre a opção node-config.