diff --git a/docs/workshops/day_3_bdd.md b/docs/workshops/day_3_bdd.md index 35702f72a5004f4a8eedc876f47a37e01ca27984..5ec79f3dd81211b8274ecdfcbaf144e57dbf1f08 100644 --- a/docs/workshops/day_3_bdd.md +++ b/docs/workshops/day_3_bdd.md @@ -529,6 +529,46 @@ Berikut ini adalah daftar referensi terkait XPath yang direkomendasikan: - [XPath | Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/XPath) - [XPath Cheatsheet](https://devhints.io/xpath) +### Materi Tambahan: Troubleshooting Kegagalan Pencarian Elemen + +Salah satu isu yang umum terjadi dalam pengujian aplikasi melalui simulasi interaksi dengan _user interface_ adalah hasil eksekusi _test_ yang tidak stabil, +atau seringkali disebut sebagai _flaky test_. +Misalnya, kadang ada sebuah _test case_ yang sukses berjalan kemudian gagal ketika dijalankan kembali. +_Test_ yang tidak stabil bisa disebabkan karena beberapa hal, +seperti isu koneksi antara _web browser_ dengan aplikasi yang diujicobakan, +atau struktur dokumen yang belum final di-_update_ oleh kode JavaScript yang berjalan di _web browser_. + +Beberapa isu seperti masalah koneksi memang sulit diantisipasi, +sehingga solusinya terkadang cukup sekedar menjalankan _test_-nya kembali. +Tapi terkadang ada isu yang muncul karena implementasi _test_ yang belum komprehensif. + +Ambil contoh misalnya ada sebuah _test_ yang gagal +dan laporan _error_ yang ditangkap oleh Serenity adalah sebagai berikut: + +``` +Element click intercepted exception: element click intercepted: Element (button _ngcontent-ng-c910900098='' class='btn btn-default')...(/button) is not clickable at point (115, 717). Other element would receive the click: (div _ngcontent-ng-c87473289='' class='col-12 text-center')...(/div) +``` + +Berdasarkan pesan _error_ yang ditangkap oleh Serenity dan Selenium, +_web browser_ yang dikendalikan oleh Selenium gagal menekan tombol pada titik koordinat `(115, 717)`. +Kemungkinan besar _error_ tersebut muncul karena secara visual tombol terkait memang tidak terlihat di dalam jendela _web browser_. +Oleh karena itu, instruksi di dalam fungsi _step definition_ bisa diperbaiki untuk menjamin jendela _web browser_ digerakkan (di-_scroll_) ke lokasi tombol yang diinginkan. + +Sebagai contoh, mari perbaiki _step definition_ yang dipetakan ke kalimat `When {actor} adds a new specialty` sehingga _web browser_ di-_scroll_ ke lokasi tombol yang diinginkan sebelum menekan tombol: + +```java +@When("{actor} adds a new specialty called {string}") +public void addsNewSpecialty(Actor actor, String name) { + actor.attemptsTo( + Scroll.to(Button.withText("Add")), // <-- Statement baru ditambahkan ke dalam step definition + Click.on(Button.withText("Add")), + Enter.theValue(name) + .into(InputField.withNameOrId("name")) + .thenHit(Keys.ENTER) + ); +} +``` + ### Latihan Singkat: Membuat Step Definition Baru Mari coba membuat sebuah deskripsi fitur beserta sebuah skenario test baru.