Appium • Praktik Python

Appium Python: Locator dan Explicit Wait

Setelah server dan device siap, target berikutnya adalah satu assertion pada layar awal APK. Contoh ini sengaja tidak mengarang ID aplikasi. Pilih content-desc yang benar dari APK latihan melalui Inspector; jika tidak tersedia, gunakan resource-id stabil yang disepakati dengan tim.

Lihat kelas Android Appium Python

Panduan Ini Cocok untuk Siapa?

  • Pemula yang sudah memahami Python dasar
  • Peserta yang ingin latihan dengan hasil terukur
  • Praktisi yang sedang merapikan alur automation

Roadmap Belajar Bertahap

  1. Langkah 1

    Siapkan prasyarat

    Cek environment dan file latihan sebelum menjalankan perintah.

  2. Langkah 2

    Jalankan contoh minimal

    Mulai dari satu test agar penyebab kegagalan mudah ditelusuri.

  3. Langkah 3

    Baca hasil dan coba kegagalan

    Ubah ekspektasi untuk memastikan assertion benar-benar bekerja.

  4. Langkah 4

    Hubungkan ke project

    Adaptasi data dan locator, lalu lanjutkan ke panduan terkait.

Periksa elemen sebelum menulis locator

Hubungkan Appium Inspector ke server lokal dan gunakan capability Android yang sama dengan test. Lihat apakah content-desc benar-benar unik pada screen yang aktif. Pada UiAutomator2, accessibility ID cocok dengan content-desc; ID resource biasanya memiliki bentuk package:id/nama.

Periksa pula permission dialog, loading, serta keyboard yang menutupi UI. Source Inspector adalah snapshot, jadi keadaan aplikasi saat test berjalan tetap harus diperhatikan.

Fixture yang selalu menutup sesi

Ikuti setup Appium terlebih dahulu. Simpan file berikut sebagai tests/mobile/test_mobile.py dalam project mobile. Ganti environment variable sesuai APK, UDID, dan content-desc aktual. Test akan gagal lebih awal jika file APK tidak ada.

Explicit wait menunggu elemen terlihat, bukan sekadar terdapat dalam hierarchy. finally menutup sesi setelah assertion berhasil ataupun gagal. Contoh ini memerlukan device nyata/emulator dan belum menjadi test generik untuk semua APK.

test_mobile.py · python · Unduh file
import os
from pathlib import Path

import pytest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


@pytest.fixture
def driver():
    # APK milik project sendiri dan UDID dari adb devices.
    apk = Path(os.environ["APP_APK"]).resolve()
    if not apk.is_file():
        raise FileNotFoundError(apk)
    options = UiAutomator2Options().load_capabilities({
        "platformName": "Android",
        "appium:automationName": "UiAutomator2",
        "appium:udid": os.environ["ANDROID_UDID"],
        "appium:app": str(apk),
    })
    session = webdriver.Remote("http://127.0.0.1:4723", options=options)
    try:
        yield session
    finally:
        session.quit()


def test_layar_awal(driver):
    # Ganti dengan content-desc unik dari layar awal APK latihan.
    locator = (AppiumBy.ACCESSIBILITY_ID, os.environ["HOME_ACCESSIBILITY_ID"])
    element = WebDriverWait(driver, 15).until(
        EC.visibility_of_element_located(locator)
    )
    assert element.is_displayed()

Jalankan satu test, lalu periksa output

Jalankan menggunakan interpreter virtualenv mobile, bukan environment web. Jika fixture driver tertimpa plugin lain, pastikan dependency web dan mobile terpisah seperti pada README starter.

Hasil yang diharapkan adalah satu test lulus dan sesi ditutup. Jika timeout, cek content-desc, layar aktif, dan state aplikasi lebih dahulu. Jangan mengganti locator dengan koordinat tanpa memahami penyebabnya.

Eksekusi mobile · bash
.venv-mobile/bin/python -m pytest tests/mobile/test_mobile.py -v

Dari layar awal ke alur bernilai

Setelah smoke test stabil, tambahkan aksi sesuai kontrak aplikasi: isi form, tekan tombol, lalu verifikasi state hasil. Setiap skenario harus menjelaskan state awal dan cara menyiapkan data.

Saat masuk Jenkins, gunakan agent Android serta batasan satu sesi per device. Simpan log server dan identitas APK untuk membedakan masalah test dari masalah environment.

Pertanyaan yang Sering Ditanyakan

Mengapa tidak memakai XPath absolut?

Hierarchy mobile dapat berubah karena layout atau versi OS. ID yang stabil lebih mudah dirawat bila tersedia; XPath tetap bisa digunakan secara terarah.

Mengapa element ditemukan tetapi tap gagal?

Elemen bisa belum dapat diinteraksikan, tertutup dialog, atau berada pada screen yang berubah. Sesuaikan kondisi wait dengan aksi, bukan hanya keberadaan elemen.

Referensi dan bahan latihan

Disusun oleh Kelas Otomesyen. Contoh memakai data latihan; sesuaikan dependency, device, dan locator dengan project.

Unduh starter project (.zip)Unduh petunjuk starter project

Lanjutkan ke Panduan Terkait

Lihat kelas Android Appium Python