Mit Appium erstellen Sie automatisierte Tests für Ihre Android-, iOS- und Web-Anwendungen, ganz ohne dafür Änderungen an den Anwendungen vornehmen zu müssen.
Alle Selenium API-kompatiblen Programmiersprachen stehen Ihnen für die Entwicklung Ihrer Tests zur Verfügung.
Der Appium-Treiber bietet Ihnen die gewohnte Selenium-Umgebung auf unseren Mobilgeräten.
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import io.appium.java_client.remote.IOSMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import org.junit.*;
import org.openqa.selenium.By;
import org.openqa.selenium.ScreenOrientation;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.MalformedURLException;
import java.net.URL;
public class LocaliOSTest {
private String accessKey = "<ACCESS_KEY>";
protected IOSDriver<IOSElement> driver = null;
DesiredCapabilities dc = new DesiredCapabilities();
@Before
public void setUp() throws MalformedURLException {
dc.setCapability("testName", "Quick Start iOS Native Demo");
dc.setCapability("accessKey", accessKey);
dc.setCapability("deviceQuery", "@os='ios' and @category='PHONE'");
dc.setCapability(MobileCapabilityType.APP, "cloud:com.experitest.ExperiBank");
dc.setCapability(IOSMobileCapabilityType.BUNDLE_ID, "com.experitest.ExperiBank");
driver = new IOSDriver<>(new URL("https://mobiledevicecloud-test.t-systems-mms.eu/wd/hub"), dc);
}
@Test
public void quickStartiOSNativeDemo() {
driver.rotate(ScreenOrientation.PORTRAIT);
driver.findElement(By.xpath("//*[@id='usernameTextField']")).sendKeys("company");
driver.hideKeyboard();
driver.findElement(By.xpath("//*[@id='passwordTextField']")).sendKeys("company");
driver.findElement(By.xpath("//*[@id='loginButton']")).click();
driver.findElement(By.xpath("//*[@id='makePaymentButton']")).click();
driver.findElement(By.xpath("//*[@id='phoneTextField']")).sendKeys("0541234567");
driver.findElement(By.xpath("//*[@id='nameTextField']")).sendKeys("Jon Snow");
driver.findElement(By.xpath("//*[@id='amountTextField']")).sendKeys("50");
driver.findElement(By.xpath("//*[@id='countryButton']")).click();
driver.findElement(By.xpath("//*[@id='Switzerland']")).click();
driver.findElement(By.xpath("//*[@id='sendPaymentButton']")).click();
driver.findElement(By.xpath("//*[@id='Yes']")).click();
}
@After
public void tearDown() {
System.out.println("Report URL: "+ driver.getCapabilities().getCapability("reportUrl"));
driver.quit();
}
}
1.
2.
3.
4.
Suchen Sie in der
Folgen Sie den Anweisungen des Repositories, um den Client einzubinden.
Initialisieren Sie vor Ihren Tests einen Appium-Treiber, mit dem Sie später Elemente Ihrer App ansteuern und automatisieren können.
Der Treiber benötigt zwei Informationen:
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("accessKey", "<ACCESS_KEY>");
IOSDriver<IOSElement> driver = new IOSDriver<>(new URL("https://mobiledevicecloud-test.t-systems-mms.eu/wd/hub"), dc);
Am besten ist es, den Treiber in der setup() Methode Ihrer Tests aufzubauen und in der teardown() Methode zu schließen.
Orientieren Sie sich am Beispiel oben.
Laden Sie Ihre App in der Mobile Device Cloud hoch und geben Sie dem Appium-Treiber die Bundle-ID Ihrer App mit, um sie automatisch zu starten.
dc.setCapability(MobileCapabilityType.APP, "cloud:<BUNDLE_ID>");
Verwenden Sie die Methoden des Appium-Treibers, um Ihre App zu automatisieren:
findElement(...)
sendKeys(...)
hideKeyboard()
rotate(...)
...
Für den Test einer Jetpack Compose App mit Appium muss der entsprechende Espresso Treiber verwendet werden.
Folgende Beschreibung zeigt Ihnen das Vorgehen:
import io.appium.java_client.AppiumBy;
import io.appium.java_client.android.AndroidDriver;
import org.junit.*;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.MalformedURLException;
import java.net.URL;
public class EspressoTest {
private final String CLOUD_ACCESS_KEY = "<ACCESS_KEY>";
private final String APP_PATH = "cloud:<APP_BUNDLE_ID>";
private final String ESPRESSO_SERVER= "<ESPRESSO_SERVER_UNIQUE_NAME>";
protected AndroidDriver driver = null;
private final DesiredCapabilities dc = new DesiredCapabilities();
@Before
public void setUp() throws MalformedURLException {
dc.setCapability("accessKey", CLOUD_ACCESS_KEY);
dc.setCapability("app", APP_PATH);
dc.setCapability("espressoServerUniqueName", ESPRESSO_SERVER);
dc.setCapability("platformName", "Android");
dc.setCapability("automationName", "Espresso");
dc.setCapability("deviceQuery", "@os='android' and @category='PHONE'");
dc.setCapability("testName", "Quick Start Espresso Demo");
dc.setCapability("appium:appiumVersion", "2.0.0.beta.23");
driver = new AndroidDriver(new URL("https://mobiledevicecloud.t-systems-mms.eu/wd/hub"), dc);
driver.setSetting("driver", "compose");
}
@Test
public void quickStartEspressoDemo() {
WebElement text = driver.findElement(AppiumBy.tagName("myTextTag"));
Assert.assertEquals("Hello Espresso!", text.getText());
driver.findElement(AppiumBy.tagName("myButtonTag")).click();
driver.findElement(AppiumBy.tagName("myInputTag")).sendKeys("Mobile Device Cloud");
driver.hideKeyboard();
driver.findElement(AppiumBy.tagName("myInputButtonTag")).click();
WebElement keywords = driver.findElement(AppiumBy.tagName("myKeywordsTag"));
Assert.assertEquals("Mobile Device Cloud", keywords.getText());
}
@After
public void tearDown() {
System.out.println("Report URL: "+ driver.getCapabilities().getCapability("reportUrl"));
driver.quit();
}
}
1.
2.
3.
4.
5.
6.
Laden Sie unser
Neben Ihrer zu testenden App wird für Espresso Tests zusätzlich eine Server App benötigt. Diese wird automatisch vom Espresso-Treiber für Appium gebaut. Dafür müssen Sie einen lokalen Appium-Server installieren. Laden Sie sich
Anschließend installieren Sie Appium 2 und den Espresso-Treiber im Terminal über die folgenden Befehle:
npm install -g appium@next
appium driver install espresso
Starten Sie nun den Appium-Server mit dem Kommando:
appium
Es sollten nun die Meldungen erscheinen, dass:
Öffnen Sie die EspressoSetup.java Datei. In dieser Datei sind zwei Platzhalter, die Sie füllen müssen:
<LOCAL_APPIUM_SERVER>: Die URL zur REST-Schnittstelle Ihres lokalen Appium-Servers. Diese wird beim starten des Servers im Terminal angezeigt. (z.B. http://0.0.0.0:4723)
<APK_PATH>: Der Pfad zur APK-Datei ihrer App, die Sie vorher mit Android Studio generiert haben. (Build → Build APK)
Fahren Sie einen Emulator in Android Studio hoch oder verbinden Sie ein echtes Android Gerät mit Ihrem Computer.
Starten Sie die EspressoSetup.java Datei entweder im Run oder im Debug Modus. Das Setup ist abgeschlossen, wenn die Tests erfolgreich durchgelaufen sind.
Während des Setups werden einige Informationen im Terminal des Appium Servers ausgegeben. Darunter auch die Zeile:
"Installing Espresso Test Server apk from the target device ..." mit einem Pfad zur Espresso-Server-APK. Kopieren Sie diese APK zusammen mit der APK Ihrer App in einen gemeinsamen Order, um Sie später wiederzufinden.
HINWEIS: Der Espresso-Server hängt stark von Ihrer App ab. Deswegen muss er immer mithilfe des Setups neu gebaut werden, wenn sich Abhängigkeiten in Ihrer App ändern.
Laden Sie Ihre App und den Espresso-Server hoch in die Mobile Device Cloud.
Vergeben Sie dem Espresso-Server einen Unique Name.
Füllen Sie die Platzhalter in der Datei MdcEspressoTest.java mit Ihren Daten.
Starten Sie die Tests im Run oder Debug Modus. Diese werden nun in der Mobile Device Cloud ausgeführt.
Anhand der Beispiele können Sie eigene Tests implementieren!
Mithilfe von Remote-Debugging können Sie Ihre XCUI Tests in der Mobile Device Cloud wie auf einem lokalen Gerät ausführen. Laden Sie sich dafür den Remote-Debugging-Client herunter:
und öffnen ein Terminal im Ordner des Clients.
Leihen Sie ein Gerät in der Mobile Device Cloud aus und klicken Sie auf Tools → Remote Debugging. Kopieren Sie den angezeigten Befehl in das Terminal und führen Sie ihn aus. Jetzt wird das Gerät in XCode wie ein lokales Gerät angezeigt und kann auch so verwendet werden.
Eine ausführliche Anleitung finden sie
Eine weitere Möglichkeit, XCUI Tests auszuführen, ist über unsere REST-Schnittstelle.
Dafür generieren Sie eine .ipa-Datei für Ihre zu testende App und ein ZIP-Archiv für Ihre Tests. Die genauen Schritte finden Sie
Übergeben Sie die beiden Dateien an unsere API:
curl --request POST \
--url https://mobiledevicecloud.t-systems-mms.eu/api/v1/test-run/execute-test-run \
--header 'Authorization: Bearer <accesskey>' \
--header 'content-type: multipart/form-data' \
--form 'executionType=xcuitest' \
--form 'runningType=coverage' \
--form 'testApp=@<Pfad zur Test-App>' \
--form 'app=@<Pfad zur App>' \
--form-string "deviceQueries=@os='ios'"
Eine Dokumentation der Schnittstelle finden Sie
Mithilfe von Remote-Debugging können Sie Ihre Espresso Tests in der Mobile Device Cloud wie auf einem lokalen Gerät ausführen. Laden Sie sich dafür den Remote-Debugging-Client herunter:
und öffnen ein Terminal im Ordner des Clients.
Leihen Sie ein Gerät in der Mobile Device Cloud aus und klicken Sie auf Tools → Remote Debugging. Kopieren Sie den angezeigten Befehl in das Terminal und führen Sie ihn aus. Jetzt wird das Gerät in Android Studio wie ein lokales Gerät angezeigt und kann auch so verwendet werden.
Eine ausführliche Anleitung finden sie
Eine weitere Möglichkeit, Espresso Tests auszuführen, ist über unsere REST-Schnittstelle.
Dafür generieren Sie eine APK-Datei für Ihre zu testende App und eine APK-Datei für Ihre Tests. Die genauen Schritte finden Sie
Übergeben Sie die beiden APKs an unsere API:
curl --request POST \
--url https://mobiledevicecloud.t-systems-mms.eu/api/v1/test-run/execute-test-run \
--header 'Authorization: Bearer <accesskey>' \
--header 'content-type: multipart/form-data' \
--form 'executionType=espresso' \
--form 'runningType=coverage' \
--form 'testApp=@<Pfad zur Test-App>' \
--form 'app=@<Pfad zur App>' \
--form-string "deviceQueries=@os='android'"
Eine Dokumentation der Schnittstelle finden Sie
Die Mobile Device Cloud bietet für das Test-Tool Testcafe ein Plugin an, mit dem Sie Ihre TestCafe Tests auf allen Desktop- und Mobile-Browsern der Mobile Device Cloud ausführen lassen können.
import { Selector } from 'testcafe';
fixture('Getting Started with TestCafe')
.page('https://devexpress.github.io/testcafe/example');
test('My first test', async t => {
await t
.typeText('#developer-name', 'MDC User')
.click('#submit-button')
.expect(Selector('#article-header').innerText).eql('Thank you, MDC User!');
});
1.
2.
3.
Das Plugin zur Nutzung von TestCafe mit den Geräten der Mobile Device Cloud ist noch experimentell.
Wir unterstützen Sie bei der Installation der nötigen Pakete und konfigurieren diese mit Ihnen.
Schreiben Sie Ihre Tests mit JavaScript in der gewohnten TestCafe-Umgebung.
Mit nur einem Befehl führen Sie die Tests auf einem Gerät der Mobile Device Cloud aus:
Die Mobile Device Cloud unterstützt Tosca.
Eine Dokumentation der Nutzung erfolgt demnächst.
Die Mobile Device Cloud unterstützt Selenium.
Eine Dokumentation der Nutzung erfolgt demnächst.