Panduan untuk Selenium dengan JUnit / TestNG

1. Perkenalan

Artikel ini adalah pengantar praktis dan cepat untuk bekerja dengan Selenium dan menulis tes dengan JUnit dan TestNG.

2. Integrasi Selenium

Di bagian ini, kita akan mulai dengan skenario sederhana - membuka jendela browser, menavigasi ke URL tertentu dan mencari beberapa konten yang diinginkan di halaman.

2.1. Dependensi Maven

Di file pom.xml , tambahkan dependensi berikut:

 org.seleniumhq.selenium selenium-java 3.4.0 

Versi terbaru dapat ditemukan di Maven Central Repository.

2.2. Konfigurasi Selenium

Pertama, buat file kelas Java baru bernama SeleniumConfig :

public class SeleniumConfig { private WebDriver driver; //... }

Mengingat kami menggunakan versi Selenium 3.x, kami harus menentukan jalur file GeckoDriver yang dapat dieksekusi (berdasarkan OS Anda) menggunakan properti sistem yang disebut webdriver.gecko.driver Versi terbaru GeckoDriver dapat diunduh dari Github Rilis Geckodriver.

Sekarang mari kita inisialisasi WebDriver di konstruktor, kita juga akan menyetel 5 detik sebagai waktu tunggu untuk WebDriver menunggu elemen di halaman muncul:

public SeleniumConfig() { Capabilities capabilities = DesiredCapabilities.firefox(); driver = new FirefoxDriver(capabilities); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); } static { System.setProperty("webdriver.gecko.driver", findFile("geckodriver.mac")); } static private String findFile(String filename) { String paths[] = {"", "bin/", "target/classes"}; for (String path : paths) { if (new File(path + filename).exists()) return path + filename; } return ""; }

Kelas konfigurasi ini berisi beberapa metode yang akan kita abaikan untuk saat ini, tetapi kita akan melihat lebih banyak tentang ini di bagian kedua dari seri ini.

Selanjutnya, kita perlu mengimplementasikan kelas SeleniumExample :

public class SeleniumExample { private SeleniumConfig config; private String url = "//www.baeldung.com/"; public SeleniumExample() { config = new SeleniumConfig(); config.getDriver().get(url); } // ... }

Di sini, kita akan menginisialisasi SeleniumConfig dan mengatur URL yang diinginkan untuk dinavigasi. Demikian pula, kami akan menerapkan API sederhana untuk menutup browser dan mendapatkan judul halaman:

public void closeWindow() { this.config.getDriver().close(); } public String getTitle() { return this.config.getDriver().getTitle(); }

Untuk menavigasi ke bagian Tentang baeldung.com, kita perlu membuat metode closeOverlay () yang memeriksa dan menutup overlay pada pemuatan beranda. Setelah itu, kami menavigasi ke halaman Tentang Baeldung menggunakan metode getAboutBaeldungPage () :

public void getAboutBaeldungPage() { closeOverlay(); clickAboutLink(); clickAboutUsLink(); } private void closeOverlay() { List webElementList = this.config.getDriver() .findElements(By.tagName("a")); if (webElementList != null) { webElementList.stream() .filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title"))) .filter(WebElement::isDisplayed) .findAny() .ifPresent(WebElement::click); } } private void clickAboutLink() { Actions actions = new Actions(config.getDriver()); WebElement aboutElement = this.config.getDriver() .findElement(By.id("menu-item-6138")); actions.moveToElement(aboutElement).perform(); } private void clickAboutUsLink() { WebElement element = this.config.getDriver() .findElement(By.partialLinkText("About Baeldung.")); element.click(); }

Kami dapat memeriksa apakah informasi yang diperlukan tersedia di halaman yang ditampilkan:

public boolean isAuthorInformationAvailable() { return this.config.getDriver() .getPageSource() .contains("Hey ! I'm Eugen"); }

Selanjutnya, kita akan menguji kelas ini dengan JUnit dan TestNG.

3. Dengan JUnit

Mari buat kelas pengujian baru sebagai SeleniumWithJUnitLiveTest:

public class SeleniumWithJUnitLiveTest  private static SeleniumExample seleniumExample; private String expectedTitle = "About Baeldung 

Kita akan menggunakan anotasi @ BeforeClass dari org.junit.BeforeClass untuk melakukan pengaturan awal. Dalam metode setUp () ini kita akan menginisialisasi objek SeleniumExample :

@BeforeClass public static void setUp() { seleniumExample = new SeleniumExample(); }

Dengan cara yang sama, saat kasus pengujian kami selesai, kami harus menutup browser yang baru dibuka. Kita akan melakukan ini dengan anotasi @AfterClass - untuk membersihkan pengaturan ketika eksekusi kasus uji telah selesai:

@AfterClass public static void tearDown() { seleniumExample.closeWindow(); }

Harap perhatikan pengubah statis pada variabel anggota SeleniumExample kita - karena kita perlu menggunakan variabel ini dalam metode statis setUp () dan tearDown () - @BeforeClass dan @AfterClass hanya dapat dipanggil pada metode statis.

Akhirnya, kami dapat membuat pengujian lengkap kami:

@Test public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage() { seleniumExample.getAboutBaeldungPage(); String actualTitle = seleniumExample.getTitle(); assertNotNull(actualTitle); assertEquals(expectedTitle, actualTitle); assertTrue(seleniumExample.isAuthorInformationAvailable()); }

Metode pengujian ini menegaskan bahwa judul halaman web tidak null dan disetel seperti yang diharapkan. Selain itu, kami memeriksa apakah halaman tersebut berisi informasi yang diharapkan.

Saat pengujian dijalankan, itu hanya membuka URL di Firefox dan kemudian menutupnya setelah judul halaman web dan konten telah diverifikasi.

4. Dengan TestNG

Sekarang mari gunakan TestNG untuk menjalankan kasus / rangkaian pengujian kita.

Perhatikan bahwa jika Anda menggunakan Eclipse, plugin TestNG dapat diunduh dan diinstal dari Eclipse Marketplace.

Pertama, mari buat kelas pengujian baru:

public class SeleniumWithTestNGLiveTest  private SeleniumExample seleniumExample; private String expectedTitle = "About Baeldung 

Kami akan menggunakan @BeforeSuite penjelasan dari org.testng.annotations.BeforeSuite instantiate kami kelas SeleniumExample . Metode setUp () akan diluncurkan tepat sebelum rangkaian pengujian diaktifkan:

@BeforeSuite public void setUp() { seleniumExample = new SeleniumExample(); }

Demikian pula, kita akan menggunakan anotasi @AfterSuite dari org.testng.annotations.AfterSuite untuk menutup browser yang terbuka setelah rangkaian pengujian selesai:

@AfterSuite public void tearDown() { seleniumExample.closeWindow(); }

Terakhir, mari terapkan pengujian kami:

@Test public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage() { seleniumExample.getAboutBaeldungPage(); String actualTitle = seleniumExample.getTitle(); assertNotNull(actualTitle); assertEquals(expectedTitle, actualTitle); assertTrue(seleniumExample.isAuthorInformationAvailable()); }

Setelah berhasil menyelesaikan rangkaian pengujian, kami menemukan laporan HTML dan XML di folder keluaran pengujian proyek. Laporan-laporan ini merangkum hasil tes.

5. Kesimpulan

Dalam artikel singkat ini, kami telah memfokuskan pada pengenalan cepat untuk menulis tes Selenium 3 dengan JUnit dan TestNG.

Seperti biasa, sumber artikel tersedia di GitHub.