Appium — шта је то, принципи рада и вишеплатформско тестирање

Аутор: IT Sectr Објављено: 2026-04-09 Време читања: 8 мин

Appium је вишеплатформски оквир за аутоматизацију тестирања мобилних, веб и десктоп апликација, заснован на протоколу WebDriver. Омогућава писање тестова у било ком програмском језику и покретање на Android, iOS и Windows без промене кода. Према подацима Appium Foundation, 2025, WebDriver протокол обезбеђује јединствени интерфејс за интеракцију са апликацијама на различитим платформама.

Главно

  • Appium — вишеплатформски оквир за аутоматизацију тестирања заснован на WebDriver
  • Јединствени API омогућава писање тестова на Java, Python, JavaScript, Ruby, C# и другим језицима
  • Подршка за платформе укључује iOS, Android, Windows и веб апликације
  • Black-box приступ не захтева приступ изворном коду апликације
  • Appium Server делује као прокси између теста и изворног драјвера платформе

Шта је Appium

Appium је open-source оквир за аутоматизацију тестирања мобилних апликација, изграђен на архитектури клијент-сервер. Appium сервер прима команде од клијента преко протокола WebDriver и прослеђује их изворним драјверима: XCUITest за iOS, UiAutomator2 за Android и WinAppDriver за Windows.

Историја и заједница

Appium је створен 2013. године и од тада је постао индустријски стандард за вишеплатформско тестирање. Пројектом управља Appium Foundation и подржан је од великих компанија: Sauce Labs, HeadSpin, Microsoft. Месечно Appium користи преко 500 хиљада тестера широм света.

Подржани типови апликација

Appium подржава три типа апликација: изворне (iOS, Android, Windows), мобилне веб прегледаче (Safari, Chrome) и хибридне апликације (WebView унутар изворног омотача). Сваки тип користи свој контекст: NATIVE_APP, WEBVIEW или CHROMIUM.

Архитектура Appium и WebDriver

Архитектура Appium се састоји од четири нивоа: клијентски код → Appium Client Library → Appium Server → изворни драјвер. Клијентска библиотека имплементира протокол WebDriver и шаље HTTP захтеве на сервер. Сервер их претвара у команде изворног драјвера платформе.

Протокол WebDriver

WebDriver је W3C стандард за аутоматизацију прегледача, прилагођен од Appium за мобилне уређаје. Свака радња — проналажење елемента, клик, унос текста — шаље се као HTTP захтев ка серверу. На пример, POST /session/{id}/element креира нову сесију тестирања.

Сесије и Desired Capabilities

Сваки тест почиње креирањем сесије кроз објекат Desired Capabilities. У њему се наводе: platformName, deviceName, appPath, automationName и додатни параметри. Appium користи ове податке за избор одговарајућег изворног драјвера и конфигурацију уређаја.

python
# Пример Desired Capabilities за 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

Инсталација Appium се врши преко npm: npm install -g appium. Након инсталације потребно је подесити изворне драјвере за сваку платформу: appium driver install xcuitest и appium driver install uiautomator2. За рад са iOS потребан је Xcode, а за Android — Android SDK.

Appium Inspector

Appium Inspector је графички алат за инспекцију елемената интерфејса. Повезује се са покренутим Appium сервером и приказује хијерархију UI компоненти, њихове атрибуте и локаторе. Inspector омогућава проверу селектора пре писања теста.

Покретање сервера

Appium сервер се покреће командом appium са опционим параметрима: порт, адреса, логирање. Подразумевано, сервер ослушкује порт 4723. За паралелно покретање више уређаја користе се различити портови или Appium кластери.

bash
# Покретање Appium сервера са логирањем
appium \
  --port 4723 \
  --log-level debug \
  --use-plugins images \
  --base-path /wd/hub

Писање тестова на Appium

Appium тестови користе образац Page Object за организацију кода. Сваки екран апликације описан је посебном класом са локаторима елемената и методама интеракције. Page Object Model олакшава одржавање тестова при променама интерфејса и поновно коришћење селектора између тест сценарија.

Локатори елемената

Appium подржава више стратегија претраживања елемената: id, xpath, accessibilityId, className, androidUIAutomator и iOSClassChain. Најпожељнији су accessibilityId и id — стабилни су при променама распореда. XPath треба користити само када нема других локатора.

java
// Page Object за екран пријаве
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 подржава сложене гестове кроз класу TouchAction или W3C Actions API: превлачења, мултитач, дуги притисци, скроловање до елемента. Нови W3C Actions API препоручује се за нове пројекте, јер је стандардизован и ради стабилније на различитим верзијама платформи.

Поређење Appium са алтернативама

Appium се често пореди са Detox, XCUITest и Espresso. Главна предност Appium је вишеплатформност: један тест се може покренути на iOS и Android без измена. Међутим, Detox обезбеђује бољу синхронизацију за React Native, а XCUITest/Espresso дају брже извршавање за изворне тестове.

Када изабрати Appium

Appium одговара пројектима где је потребан јединствени оквир за iOS, Android и веб. Незаменљив је у тимовима са тестерима који пишу на Java или Python. За React Native пројекте са великим бројем E2E тестова боље је размотрити Detox због аутоматске синхронизације.

ОквирПриступБрзинаВишеплатформност
AppiumBlack-boxСредњаiOS, Android, Windows
DetoxGray-boxВисокаiOS + Android (React Native)
XCUITestWhite-boxВисокаСамо iOS

Appium Grid и тестирање у облаку

Appium Grid је проширење за паралелно покретање тестова на више уређаја истовремено. Appium Grid је изграђен на бази Selenium Grid и омогућава дистрибуцију тестова између више Appium сервера, од којих сваки управља својим скупом уређаја или емулатора. Ово је критично за велике пројекте где регресиони прогон на једном уређају траје сатима — Grid смањује време на минуте пропорционално броју чворова.

Конфигурација Grid

За подешавање Grid користи се конфигурациони фајл у JSON формату, у коме се описују чворови (nodes) са уређајима. Сваки чвор наводи: порт сервера, листу уређаја са платформом, верзијом ОС и максималним бројем сесија. Hub дистрибуира тестове на слободне чворове, обезбеђујући максимално оптерећење инфраструктуре.

json
{
  "capabilities": [
    {
      "browserName": "android",
      "platformName": "Android",
      "deviceName": "Pixel_4",
      "platformVersion": "14.0",
      "maxInstances": 2
    }
  ],
  "configuration": {
    "port": 4724,
    "registerCycle": 5000
  }
}

Облачни сервиси

Ако сопствена инфраструктура уређаја није доступна, постоје облачни сервиси: Sauce Labs, BrowserStack, LambdaTest. Они пружају стотине правих уређаја и емулатора у облаку. Интеграција са Appium је минимална: довољно је навести URL облачног hub-а и акредитиве у Desired Capabilities уместо localhost.

Паралелно покретање

Appium подржава паралелно покретање тестова помоћу TestNG (Java) или pytest-xdist (Python). Паралелизација захтева јединствене портове за сваку сесију и изоловане тест податке. Свака нит покреће своју Appium сесију на посебном уређају или емулатору. При коришћењу облачних сервиса, паралелизација је аутоматска — платформа сама дистрибуира тестове на доступне уређаје и ослобађа их након завршетка.

Дијагностика и отклањање грешака Appium

Код проблема са Appium, први корак је провера лога сервера (appium --log-level debug). Типичне грешке: порт је заузет (наведите други --port), некомпатибилна верзија драјвера, недостајући Android SDK или Xcode. За iOS проверите да WebKitAgent ради и има приступ симулатору.

Проблеми са проналажењем елемената

Ако Appium не проналази елемент, проверите: да ли је контекст исправан (NATIVE_APP vs WEBVIEW), да ли је елемент видљив на екрану, да ли захтева скроловање и да ли је локатор исправан. Користите Appium Inspector за интерактивно претраживање и проверу XPath израза пре уметања у тест. Такође је корисно укључити чекање појављивања елемента кроз WebDriverWait — ово решава проблем синхронизације при спором учитавању UI.

Управљање сесијама

Неправилно завршавање сесија је чест узрок нестабилности Appium тестова. Увек затварајте драјвер у finally блоку или кроз AutoCloseable. При грешкама користите принудно driver.quit(). За iOS проверите да се WebKitAgent (WDA) поново покреће између сесија, иначе може доћи до грешке session not created. За праћење стања сесија у CI корисно је прикључити Appium Dashboard plugin који визуализује статус свих покренутих тестова у реалном времену.

Заставице за стабилност

За повећање стабилности тестова користите: shouldTerminateApp (затварање апликације између тестова), noReset (чување података између сесија), autoGrantPermissions (аутоматско одобравање системских дијалога). Такође се препоручује искључивање анимација на уређају кроз Developer Options.

Често постављана питања

Које програмске језике подржава Appium?

Appium подржава све популарне језике кроз клијентске библиотеке: Java, Python, JavaScript, Ruby, C#, PHP и Kotlin. Свака библиотека имплементира исти WebDriver протокол, што омогућава писање вишеплатформских тестова на било ком језику.

Да ли је потребан прави телефон за Appium?

Не, Appium ради како са правим уређајима, тако и са емулаторима и симулаторима. За Android се користе емулатори Android Studio, за iOS — симулатори Xcode. Прави уређаји су потребни само за тестирање хардверских функција: сензора, NFC, камере.

Која је разлика између Appium 1 и Appium 2?

Appium 2 је потпуно преписан са модуларном архитектуром са прикључцима и засебним драјверима. У Appium 1 сви драјвери су били уграђени у сервер. Appium 2 користи команде appium driver install за инсталацију драјвера и appium plugin install за прикључке.

Како Appium проналази елементе на екрану?

Appium користи стратегије претраживања: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator и By.iOSClassChain. За убрзање се препоручује коришћење accessibilityId — стабилан је и не зависи од промена распореда.

Могу ли се тестирати веб апликације у Appium?

Да, Appium подржава тестирање мобилних прегледача — Safari на iOS и Chrome на Android. За то се користи контекст WEBVIEW или CHROMIUM. Тестови се покрећу у прегледачу кроз стандардни WebDriver, слично Selenium.

Закључци

  • Appium — вишеплатформски E2E оквир заснован на WebDriver са подршком за iOS, Android и Windows
  • Архитектура клијент-сервер омогућава писање тестова на Java, Python, JavaScript, Ruby и C#
  • Desired Capabilities конфигуришу сесију тестирања за одређену платформу и уређај
  • Page Object Model се препоручује за организацију тест кода и поновно коришћење селектора
  • Appium Inspector помаже у инспекцији елемената интерфејса и одабиру локатора
  • Black-box приступ не захтева приступ изворном коду апликације
  • Appium 2 користи модуларну архитектуру са прикључивим драјверима и прикључцима

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође