10 Debugging & flaky
Menemukan penyebab test merah, bukan menutupinya.
Konsep inti
- 10.1
Baca jejak
Log dan screenshot tiap run tersimpan.
~/.maestro/tests/<tanggal>/ log + screenshot langkah gagal - 10.2
Screenshot sendiri
Tandai kondisi layar sebelum langkah penting.
- takeScreenshot: sebelum_bayar - 10.3
Retry seperlunya
Plester, bukan obat.
- retry: maxRetries: 2 commands: - tapOn: id: pay_va_copy_button

order_detail_screenPraktik di playground
- Jalankan suite penuh 3×
- Catat flow yang kadang gagal
- Buka screenshot saat gagal
Misi
Temukan flow yang kadang gagal, lalu jelaskan penyebabnya.
Lihat kunci jawabankunci/m10_debugging.yamlLulus di emulator
kunci/m10_debugging.yaml
- launchApp:
clearState: true
- extendedWaitUntil:
visible:
id: login_screen
timeout: 15000
- runFlow:
file: subflows/relogin.yaml
env:
PHONE: "081100001111"
PASSWORD: pemilik123
HOME_ID: owner_home_screen
- tapOn:
id: owner_walkin_button
- assertVisible:
id: owner_walkin_screen
# Validasi: nomor wajib benar
- scrollUntilVisible:
element:
id: owner_walkin_save_button
direction: DOWN
- tapOn:
id: owner_walkin_save_button
- assertVisible:
id: owner_walkin_error_text
text: "Nomor WhatsApp tidak valid"
# Nomor terdaftar -> nama otomatis
- scrollUntilVisible:
element:
id: owner_walkin_phone_input
direction: UP
- tapOn:
id: owner_walkin_phone_input
- inputText: "081211112222"
- hideKeyboard
- assertVisible:
id: owner_walkin_customer_hint
text: "Pelanggan terdaftar: Budi Santoso"
- scrollUntilVisible:
element:
id: owner_walkin_weight_input
direction: DOWN
- tapOn:
id: owner_walkin_service_setrika
- tapOn:
id: owner_walkin_weight_input
- eraseText: 6
- inputText: "4"
- hideKeyboard
- scrollUntilVisible:
element:
id: owner_walkin_save_button
direction: DOWN
- assertVisible:
id: owner_walkin_total
text: "Rp20.000"
- tapOn:
id: owner_walkin_pay_nanti
- tapOn:
id: owner_walkin_save_button
- assertVisible:
id: snackbar_message
text: "Pesanan 0004 dibuat untuk Budi Santoso"
# Walk-in langsung dapat struk (cetak / kirim WA), lalu tutup
- assertVisible:
id: owner_receipt_screen
- assertVisible:
id: owner_receipt_total
text: "Rp20.000"
- assertVisible:
id: owner_receipt_status
text: "BELUM LUNAS"
- tapOn:
id: owner_receipt_print_button
- tapOn:
id: owner_receipt_done_button
- tapOn:
id: owner_nav_orders
- assertVisible:
id: owner_order_card_status_LDR-0004
text: "DITERIMA"
# Budi melihat pesanan walk-in & bayar transfer BRI
- runFlow: subflows/logout_owner.yaml
- runFlow:
file: subflows/relogin.yaml
env:
PHONE: "081211112222"
PASSWORD: laundry123
HOME_ID: home_screen
- tapOn:
id: home_active_order_card
- assertVisible:
id: order_detail_total
text: "Rp20.000"
- tapOn:
id: order_pay_button
- tapOn:
id: pay_method_transfer
- tapOn:
id: pay_continue_button
- assertVisible:
id: pay_transfer_screen
- tapOn:
id: pay_bank_bri
- assertVisible:
id: pay_va_number
text: "7712 0812 1111 2222"
# Penyebab flaky: di Android 13+ toast sistem "disalin ke papan klip" bisa
# menutupi snackbar app. Simpan bukti, lalu periksa hal yang tidak tertutup.
- takeScreenshot: sebelum_salin_va
- tapOn:
id: pay_va_copy_button
- takeScreenshot: sesudah_salin_va
- assertVisible:
id: pay_va_number
text: "7712 0812 1111 2222"
- tapOn:
id: pay_check_status_button
- assertVisible:
id: pay_receipt_method
text: "Transfer BRI"
- tapOn:
id: pay_done_button
- assertVisible:
id: order_detail_payment
text: "Lunas, Transfer"Retry tanpa tahu penyebab menutupi bug asli. Nama flow jangan pakai ":" karena jadi nama folder screenshot di Windows.