Memahami Automation Testing - Selenium Automation Testing
Memahami Automation Testing - Selenium Automation Testing
READING
Selenium Automation
Instalasi Maven
Pada bagian awal, mari kita buat project maven untuk project script automation
yang akan dibuat (Lebih banyak tentang Maven). Setelah project terbuat, kita dapat
melakukan instalasi dependencies yang diperlukan untuk project automation ini.
1
Pada modul ini, instalasi dependencies akan dilakukan bertahap sesuai yang
dibutuhkan di setiap stepnya.
2
Untuk web automation test, kita perlu melakukan pengaturan untuk driver browser
yang akan menjalankan test dari script. Agar lebih praktis tanpa harus melakukan
hal tersebut, terdapat dependencies yang dapat digunakan yaitu
WebDriverManager. Dengan dependencies ini, kita tidak perlu melakukan setup
driver browser secara manual (download file, link file ke dalam script, dll), namun
cukup dengan menggunakan fungsi yang telah disediakan dari dependencies
tersebut.
3
Script diawali dengan membuat object driver menggunakan WebDriver dari
selenium. Selanjutnya membuat variabel untuk menyimpan base URL dari web yang
akan dites.
Bagian selanjutnya adalah melakukan setup untuk driver browser yang akan
digunakan dengan menggunakan dependency webdrivermanager. Diawali dengan
melakukan setup jika browser yang akan digunakan adalah Chrome. Selanjutnya
adalah membuat object untuk pengaturan yang akan dipasang pada driver Chrome
tersebut. Pada modul ini pengaturan yang dilakukan hanyalah untuk tidak
menjalankan script dalam mode headless.
Selanjutnya, setup driver browser yang telah dibuat dipasang pada object driver
yang telah digunakan diawal. Script inilah yang akan membuka browser saat script
dijalankan. Setelah browser terbuka, script selanjutnya digunakan untuk melakukan
4
maximize terhadap jendela browser. Dan script selanjutnya digunakan untuk
mengakses base URL yang telah diatur.
Agar script dapat dijalankan, kita dapat menggunakan tag @Test dari JUnit yang
diletakkan pada method/fungsi yang menampung script automation, pada gambar
di atas yaitu fungsi main().
Manage Driver
Ada beberapa perintah atau function pada Selenium Java yang digunakan untuk
berinteraksi dengan driver dan membuka banyak tipe web browser serta mengatur
tampilan browser, antara lain:
5
2. WebDriver driver = new FirefoxDriver(): Perintah ini digunakan untuk
membuat objek driver yang akan digunakan untuk mengontrol browser
Mozilla Firefox. Objek driver tersebut akan di assign ke variabel `driver`.
6
9. driver.getWindowHandles() : Perintah ini digunakan untuk mendapatkan
semua handle jendela atau tab yang saat ini terbuka dalam browser.
Contoh penggunaan:
7
WebElement element = driver.findElement(By.id("username"));
Contoh penggunaan:
List<WebElement> elements = driver.findElements(By.className("button"));
Contoh penggunaan:
WebElement element = driver.findElement(By.id("username"));
Contoh penggunaan:
WebElement element = driver.findElement(By.className("button"));
Contoh penggunaan:
8
WebElement element = driver.findElement(By.name("email"));
Contoh penggunaan:
WebElement element = driver.findElement(By.tagName("div"));
Contoh penggunaan:
WebElement element = driver.findElement(By.linkText("Click Here"));
Contoh penggunaan:
WebElement element = driver.findElement(By.partialLinkText("Click"));
Contoh penggunaan:
9
WebElement element =
driver.findElement(By.xpath("//input[@id='username']"));
Contoh penggunaan:
WebElement element = driver.findElement(By.cssSelector(".button"));
element.click();
//atau
driver.findElement(locatorMethod).click();
element.sendKeys("Hello World");
10
//atau
driver.fineElement(locatorMethod).sendKeys("Hello World");
3. clear(): Digunakan untuk menghapus teks yang ada di dalam elemen input.
Contoh penggunaan:
element.clear();
11
boolean isEnabled = element.isEnabled();
element.submit();
12
action yang berinteraksi dengan web element untuk dapat memenuhi test case
yang diinginkan. Pada modul ini kita akan membuat test case untuk Login (Success
dan Failed). Web Element yang diperlukan adalah:
- Field Email
- Field Password
- Button Submit
Object driver yang telah kita buat di awal dimanfaatkan untuk berinteraksi dengan
web. Hal utama yang dilakukan adalah mencari web element yang dituju dengan
menggunakan method findElement() dari selenium webdriver. Method tersebut
digunakan untuk menemukan web element dengan menggunakan web element
locator yang diinginkan (name, id, class, xpath, dsb). Pada modul ini, digunakan
locator id untuk element field email dan password dan digunakan locator xpath
13
untuk button submit. Interaksi dengan web element dapat dilakukan setelah
menemukan element, pada script terlihat jika dilakukan pengiriman input terhadap
field email dan password dengan menggunakan method sendKeys() dan dilakukan
click terhadap button Submit.
Setelah script dijalankan kembali, script akan menjalankan test case hingga step
click button Submit dan berhasil login.
Assertion
Dari segi visual, kita sudah dapat melihat jika test case Login berhasil dijalankan
hingga user berhasil melakukan login. Namun dari sisi script, tentu perlu dilakukan
pengecekan kembali apakah user benar-benar sudah berhasil melakukan login,
tahap inilah yang biasanya disebut Assertion pada script. Biasanya, assertion dapat
dilakukan dengan mencari web element yang yang dapat menjadi acuan jika login
berhasil dilakukan. Untuk test case login ini, pada modul ini akan dilakukan assertion
untuk menemukan button dashboard (menunjukkan halaman dashboard) dan
menemukan elemen yang menampilkan username pengguna.
14
Implementasi pada script dilakukan sebagai berikut.
15
Terlihat jika terdapat error saat script dijalankan, yaitu element button dashboard
tidak dapat ditemukan, padahal jika memantau pada window browser yang terbuka
halaman dashboard sudah terbuka dan locator yang digunakan juga sudah benar.
Hal ini dikarenakan script dijalankan terlalu cepat, script telah selesai mendapatkan
hasil pencarian dengan findElement() saat element tersebut belum ditampilkan
pada web karena masih loading, maka hasil pun error. Untuk mengatasi ini, perlu
ditambahkan timeout.
Timeout
Timeout digunakan untuk memberikan waktu maksimum terhadap setiap action
yang dilakukan driver untuk menjalankankan fungsinya. Sebagai contoh untuk
method findElement(), script diberi kesempatan untuk terus menunggu element
ditemukan selama waktu timeout. Sehingga, setelah ditambahkan mekanisme
timeout, jika terjadi error maka itu adalah benar-benar error karena element nya
tidak ada.
16
Setelah ditambahkan timeout, test case login yang sebelumnya gagal berhasil
dijalankan
Selanjutnya adalah menambahkan test case login yang lainnya yaitu failed login.
Step dari test case ini sama dengan test case sebelumnya, dimana user mengakses
halaman login, melakukan input email dan password dan melakukan klik button
Submit. Namun pada test case ini digunakan akun yang tidak terdaftar pada sistem
sehingga login tidak akan berhasil dan akan ditampilkan error message pada layar.
Dari sini, dapat disimpulkan bahwa yang berbeda dari test case ini adalah pada
bagian assertion, assertion pada bagian ini adalah untuk melakukan verifikasi jika
saat user gagal login dengan akun yang tidak terdaftar harus ditampilkan pada layar
informasi yang menerangkannya, yaitu berupa error message.
Web element yang akan digunakan untuk assertion adalah sebagai berikut.
- Error message yang menampilkan error message yang menunjukkan jika
kredensial yang digunakan invalid
17
Implementasi dari code adalah sebagai berikut, pada modul ini ditambahkan file
baru dengan FailedLogin.java
Terlihat jika perbedaan script adalah pada proses assertion, assertion yang dilakukan
adalah menemukan element box error message dengan locator xpath, lalu
mengambil text nya dan melakukan assertion dengan text yang seharusnya
ditampilkan.
18
Data Driven Test (DDT) atau Test Data Driven (TDD) adalah metode testing dimana
test data disimpan dalam format tabel. Pendekatan ini memungkinkan tester untuk
hanya menggunakan sebuah script testing yang dapat menjalankan pengujian
untuk semua test data yang ada, termasuk expected result yang diinginkan juga
disimpan dalam test data.
Pada modul ini, akan dibahas 2 pendekatan yang dapat dilakukan untuk
implementasi DDT baik dengan Selenium maupun Appium, yaitu:
- Dengan menggunakan Test Data yang disimpan dalam file CSV
- Dengan menggunakan framework Cucumber dan menyimpan test data
dalam file feature
Pada penjelasan sebelumnya, terlihat jika perbedaan pada test case Success Login
dan Failed Login adalah pada bagian assertion. Sehingga, memungkinkan jika
kedua script tersebut digabungkan menjadi satu. Pada bagian assertion dapat
19
dilakukan pemeriksaan apakah hasil yang diinginkan adalah Success atau Failed,
dan assertion yang akan dijalankan sesuai dengan status yang diinginkan.
Hal inilah yang mendasari metode DDT, pada modul ini kita akan melakukan
implementasi DDT dengan menggabungkan kedua script di atas untuk
menjalankan test dengan masukan dari test data dari file CSV. Script dijalankan
berulang untuk seluruh data yang ada pada file. Berikut file CSV yang akan
digunakan, cukup berisi 2 data dulu saja dan file diletakkan di directory
{{directoryProject}}/src/test/data/test-data.csv
Sebelum implementasi script, nantinya kita akan melakukan pembacaan file CSV
agar dapat mengambil test data yang ada di dalamnya. Pada java, fungsionalitas
tersebut membutuhkan tambahan dependencies yaitu opencsv. Kembali kita akan
tambahkan dependency tersebut ke melalui file pom.xml
Setelahnya barulah kita dapat melakukan implementasi script untuk DDT dengan
CSV. Pada modul ini dibuat file baru bernama LoginDDT.java . Hasil script nya
adalah sebagai berikut.
20
Jika dilihat, script tersebut menggunakan script dari 2 test case kita sebelumnya.
Perbedaannya adalah pada beberapa baris berikut:
- Inisiasi directory letak test-data.csv disimpan
String fileDir = System.getProperty("user.dir") +
"/src/test/data/test-data.csv"; // file directory
- Penambahan try catch mechanism untuk membuka file CSV (Lebih Detil
tentang Try Catch)
// Read the CSV file and run the test for each row
try (CSVReader reader = new CSVReader(new FileReader(fileDir))) { // try read csv
data
- Looping untuk membaca seluruh baris yang ada pada file, loop diulang untuk
data baris selanjutnya setelah data pada suatu baris selesai dibaca
- Penambahan variabel email, password dan status untuk menyimpan email,
password, dan expected result yang diinginkan yang telah disimpan dalam file
test-data.csv
while ((nextLine = reader.readNext()) != null) { // loop for all row data in csv
21
String email = nextLine[0]; // read column 1 for email
String password = nextLine[1]; // read column 2 for password
String status = nextLine[2]; // read column 3 for expected login status
// add functionality after variable has been filled from test data
- Conditional case untuk assertion sesuai dengan nilai expected result pada test
data
22
Hasil setelah script dijalankan adalah sebagai berikut. Script dijalankan berulang
untuk menjalankan kedua data yang ada pada file, data pertama untuk Failed login
dan berhasil dijalankan hingga proses assertion error message, dan data kedua
untuk case Login dan berhasil dijalankan hingga assertion pada page dashboard.
23
Silakan dibaca seluruh link referensi berikut:
Contoh penggunaan:
```
WebElement element = driver.findElement(By.id("elementId"));
```
Contoh penggunaan:
```
List<WebElement> elements = driver.findElements(By.className("className"));
```
Contoh penggunaan:
```
By locator = By.id("elementId");
24
```
Contoh penggunaan:
```
By locator = By.className("className");
```
Contoh penggunaan:
```
By locator = By.name("elementName");
```
Contoh penggunaan:
```
By locator = By.tagName("tagName");
```
25
teks tautan.
Contoh penggunaan:
```
By locator = By.linkText("linkText");
```
Contoh penggunaan:
```
By locator = By.partialLinkText("partialLinkText");
```
Contoh penggunaan:
```
By locator = By.xpath("//tagName[@attribute='value']");
```
Contoh penggunaan:
26
```
By locator = By.cssSelector("tagName[attribute='value']");
```
```
WebElement element = driver.findElement(By.id("username"));
```
```
element.sendKeys("admin");
```
3. click(): Fungsi ini digunakan untuk mengklik elemen yang ditemukan. Contoh
penggunaan:
```
element.click();
```
27
4. getText(): Fungsi ini digunakan untuk mengambil teks dari elemen yang
ditemukan. Contoh penggunaan:
```
String text = element.getText();
```
5. clear(): Fungsi ini digunakan untuk menghapus teks yang ada di dalam
elemen yang ditemukan. Contoh penggunaan:
```
element.clear();
```
```
boolean selected = element.isSelected();
```
```
boolean enabled = element.isEnabled();
```
28
8. getAttribute(String attribute): Fungsi ini digunakan untuk mengambil nilai
atribut tertentu dari elemen yang ditemukan. Contoh penggunaan:
```
String value = element.getAttribute("value");
```
9. submit(): Fungsi ini digunakan untuk mengirimkan form yang berisi elemen
yang ditemukan. Contoh penggunaan:
```
element.submit();
```
10. getSize(): Fungsi ini digunakan untuk mengambil ukuran elemen yang
ditemukan. Contoh penggunaan:
```
Dimension size = element.getSize();
```
29