Appium is een cross-platform framework voor het automatiseren van het testen van mobiele, web- en desktopapplicaties, gebaseerd op het WebDriver-protocol. Het maakt het mogelijk om tests in elke programmeertaal te schrijven en uit te voeren op Android, iOS en Windows zonder code te wijzigen. Volgens gegevens van Appium Foundation, 2025, biedt het WebDriver-protocol een uniforme interface voor interactie met applicaties op verschillende platforms.
Belangrijkste punten
Appium is een open-source framework voor het automatiseren van het testen van mobiele applicaties, gebouwd op een client-server architectuur. De Appium-server ontvangt opdrachten van de client via het WebDriver-protocol en delegeert deze aan native drivers: XCUITest voor iOS, UiAutomator2 voor Android en WinAppDriver voor Windows.
Appium is opgericht in 2013 en is sindsdien de industriestandaard geworden voor cross-platform testen. Het project wordt beheerd door Appium Foundation en ondersteund door grote bedrijven: Sauce Labs, HeadSpin, Microsoft. Maandelijks gebruiken meer dan 500.000 testers wereldwijd Appium.
Appium ondersteunt drie typen applicaties: native (iOS, Android, Windows), mobiele webbrowsers (Safari, Chrome) en hybride applicaties (WebView binnen een native schil). Elk type gebruikt zijn eigen context: NATIVE_APP, WEBVIEW of CHROMIUM.
De Appium-architectuur bestaat uit vier lagen: clientcode → Appium Client Library → Appium Server → native driver. De clientbibliotheek implementeert het WebDriver-protocol en stuurt HTTP-verzoeken naar de server. De server zet deze om in opdrachten van de native driver van het platform.
WebDriver is de W3C-standaard voor browserautomatisering, aangepast door Appium voor mobiele apparaten. Elke actie — het vinden van een element, klikken, tekst invoeren — wordt als HTTP-verzoek naar de server gestuurd. Bijvoorbeeld POST /session/{id}/element maakt een nieuwe testsessie aan.
Elke test begint met het aanmaken van een sessie via het Desired Capabilities-object. Hierin worden gespecificeerd: platformName, deviceName, appPath, automationName en extra parameters. Appium gebruikt deze gegevens om de juiste native driver te selecteren en het apparaat te configureren.
# Voorbeeld Desired Capabilities voor Android
desired_caps = {
'platformName': 'Android',
'deviceName': 'Pixel_4',
'app': '/path/to/app.apk',
'automationName': 'UiAutomator2',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
Appium wordt geïnstalleerd via npm: npm install -g appium. Na installatie moeten native drivers voor elk platform worden geconfigureerd: appium driver install xcuitest en appium driver install uiautomator2. Voor iOS is Xcode vereist en voor Android — Android SDK.
Appium Inspector is een grafisch hulpmiddel voor het inspecteren van interface-elementen. Het maakt verbinding met de draaiende Appium-server en toont de hiërarchie van UI-componenten, hun attributen en locators. Inspector maakt het mogelijk om de selector te controleren voordat de test wordt geschreven.
De Appium-server wordt gestart met het commando appium met optionele parameters: poort, adres, logboekregistratie. Standaard luistert de server op poort 4723. Voor parallelle uitvoering van meerdere apparaten worden verschillende poorten of Appium-clusters gebruikt.
# Appium-server starten met logboekregistratie
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Appium-tests gebruiken het Page Object-patroon voor code-organisatie. Elk scherm van de applicatie wordt beschreven door een aparte klasse met elementlocators en interactiemethoden. Het Page Object Model vereenvoudigt het onderhoud van tests bij interfacewijzigingen en hergebruikt selectors tussen testscenario's.
Appium ondersteunt meerdere strategieën voor het vinden van elementen: id, xpath, accessibilityId, className, androidUIAutomator en iOSClassChain. De meest aanbevolen zijn accessibilityId en id — ze zijn stabiel bij lay-outwijzigingen. XPath mag alleen worden gebruikt als er geen andere locators beschikbaar zijn.
// Page Object voor het inlogscherm
public class LoginPage {
private AppiumDriver driver;
private MobileElement emailField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
private MobileElement passwordField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
private MobileElement loginButton =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));
public void login(String email, String password) {
emailField.sendKeys(email);
passwordField.sendKeys(password);
loginButton.click();
}
}
Appium ondersteunt complexe gebaren via de klasse TouchAction of W3C Actions API: swipe-bewegingen, multitouch, lang indrukken, scrollen naar een element. De nieuwe W3C Actions API wordt aanbevolen voor nieuwe projecten omdat deze gestandaardiseerd is en stabieler werkt op verschillende platformversies.
Appium wordt vaak vergeleken met Detox, XCUITest en Espresso. Het belangrijkste voordeel van Appium is cross-platform mogelijkheid: een enkele test kan zonder wijzigingen worden uitgevoerd op iOS en Android. Detox biedt echter betere synchronisatie voor React Native, en XCUITest/Espresso geven snellere uitvoering voor native tests.
Appium is geschikt voor projecten die een uniform framework nodig hebben voor iOS, Android en web. Het is onmisbaar in teams met testers die in Java of Python schrijven. Voor React Native-projecten met veel E2E-tests kunt u beter Detox overwegen vanwege de automatische synchronisatie.
| Framework | Benadering | Snelheid | Cross-platform |
|---|---|---|---|
| Appium | Black-box | Gemiddeld | iOS, Android, Windows |
| Detox | Gray-box | Hoog | iOS + Android (React Native) |
| XCUITest | White-box | Hoog | Alleen iOS |
Appium Grid is een extensie voor het parallel uitvoeren van tests op meerdere apparaten tegelijk. Appium Grid is gebaseerd op Selenium Grid en maakt het mogelijk om tests te verdelen over meerdere Appium-servers, die elk hun eigen set apparaten of emulators beheren. Dit is cruciaal voor grote projecten waar een regressietest op één apparaat uren duurt — Grid verkort de tijd tot minuten, evenredig aan het aantal nodes.
Voor het configureren van Grid wordt een configuratiebestand in JSON-formaat gebruikt, waarin nodes met apparaten worden beschreven. Elke node specificeert: serverpoort, lijst van apparaten met platform, OS-versie en maximaal aantal sessies. De Hub verdeelt tests over vrije nodes en zorgt voor maximale belasting van de infrastructuur.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
Als de eigen apparaatinfrastructuur niet beschikbaar is, zijn er clouddiensten: Sauce Labs, BrowserStack, LambdaTest. Zij bieden honderden echte apparaten en emulators in de cloud. De integratie met Appium is minimaal: het is voldoende om de URL van de cloud-hub en inloggegevens in Desired Capabilities op te geven in plaats van localhost.
Appium ondersteunt parallelle uitvoering van tests met TestNG (Java) of pytest-xdist (Python). Parallelisatie vereist unieke poorten voor elke sessie en geïsoleerde testgegevens. Elke thread start zijn eigen Appium-sessie op een afzonderlijk apparaat of emulator. Bij gebruik van clouddiensten is parallelisatie automatisch — het platform verdeelt zelf tests over beschikbare apparaten en geeft ze vrij na voltooiing.
Bij problemen met Appium is de eerste stap het controleren van het serverlogboek (appium --log-level debug). Typische fouten: poort bezet (geef een andere --port op), incompatibele driverversie, ontbrekende Android SDK of Xcode. Voor iOS, zorg ervoor dat WebKitAgent draait en toegang heeft tot de simulator.
Als Appium een element niet vindt, controleer dan: is de context correct (NATIVE_APP vs WEBVIEW), is het element zichtbaar op het scherm, vereist het scrollen en is de locator correct. Gebruik Appium Inspector voor interactief zoeken en het controleren van XPath-expressies voordat u ze in de test invoegt. Het is ook nuttig om te wachten op het verschijnen van een element via WebDriverWait — dit lost synchronisatieproblemen bij traag ladende UI op.
Onjuiste beëindiging van sessies is een veelvoorkomende oorzaak van instabiliteit van Appium-tests. Sluit altijd de driver in het finally-blok of via AutoCloseable. Bij fouten gebruikt u geforceerd driver.quit(). Zorg ervoor dat WebKitAgent (WDA) opnieuw wordt gestart tussen sessies voor iOS, anders kan de fout session not created optreden. Voor het monitoren van sessies in CI is het handig om de Appium Dashboard-plugin aan te sluiten die de status van alle lopende tests in realtime visualiseert.
Gebruik voor het verhogen van de teststabiliteit: shouldTerminateApp (applicatie afsluiten tussen tests), noReset (gegevens bewaren tussen sessies), autoGrantPermissions (automatisch toestemming geven voor systeemdialogen). Ook wordt aanbevolen om animaties op het apparaat uit te schakelen via Developer Options.
Veelgestelde vragen
Appium ondersteunt alle populaire talen via clientbibliotheken: Java, Python, JavaScript, Ruby, C#, PHP en Kotlin. Elke bibliotheek implementeert hetzelfde WebDriver-protocol, waardoor cross-platform tests in elke taal geschreven kunnen worden.
Nee, Appium werkt zowel met echte apparaten als met emulators en simulators. Voor Android worden Android Studio-emulators gebruikt, voor iOS — Xcode-simulators. Echte apparaten zijn alleen nodig voor het testen van hardwarefuncties: sensoren, NFC, camera.
Appium 2 is volledig herschreven met een modulaire architectuur met plugins en aparte drivers. In Appium 1 waren alle drivers ingebouwd in de server. Appium 2 gebruikt de commando's appium driver install voor het installeren van drivers en appium plugin install voor plugins.
Appium gebruikt zoekstrategieën: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator en By.iOSClassChain. Voor snelheid wordt aanbevolen accessibilityId te gebruiken — deze is stabiel en onafhankelijk van lay-outwijzigingen.
Ja, Appium ondersteunt het testen van mobiele browsers — Safari op iOS en Chrome op Android. Hiervoor wordt de context WEBVIEW of CHROMIUM gebruikt. Tests worden in de browser uitgevoerd via standaard WebDriver, vergelijkbaar met Selenium.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook