Panduan Selenium dengan JUnit / TestNG

1. Pengenalan

Artikel ini adalah pengenalan praktikal yang cepat untuk bekerja dengan Selenium dan menulis ujian dengan JUnit dan TestNG.

2. Integrasi Selenium

Di bahagian ini, kita akan mulakan dengan senario sederhana - membuka tetingkap penyemak imbas, menavigasi ke URL tertentu dan mencari beberapa kandungan yang diinginkan di halaman.

2.1. Ketergantungan Maven

Dalam fail pom.xml , tambahkan kebergantungan berikut:

 org.seleniumhq.selenium selenium-java 3.4.0 

Versi terbaru boleh didapati di Maven Central Repository.

2.2. Konfigurasi Selenium

Pertama, buat fail kelas Java baru yang disebut SeleniumConfig :

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

Memandangkan kami menggunakan versi Selenium 3.x, kami harus menentukan jalan dari fail GeckoDriver yang dapat dilaksanakan (berdasarkan OS anda) menggunakan sifat sistem yang disebut webdriver.gecko.driver Versi terbaru dari GeckoDriver boleh dimuat turun dari Github Siaran Geckodriver.

Sekarang mari kita menginisialisasi WebDriver dalam konstruktor, kita juga akan menetapkan 5 saat sebagai masa 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 mengandungi beberapa kaedah yang akan kita abaikan buat masa ini, tetapi kita akan melihat lebih banyak mengenai ini di bahagian kedua siri ini.

Seterusnya, kita perlu melaksanakan 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, kami akan menginisialisasi SeleniumConfig dan menetapkan URL yang diinginkan untuk dilayari. Begitu juga, kami akan melaksanakan API sederhana untuk menutup penyemak imbas dan mendapatkan tajuk halaman:

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

Untuk menavigasi ke bahagian Tentang baeldung.com, kita perlu membuat kaedah closeOverlay () yang memeriksa dan menutup hamparan pada muatan halaman utama. Selepas itu, kami menavigasi ke halaman About Baeldung menggunakan kaedah 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 maklumat yang diperlukan tersedia di halaman yang dipaparkan:

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

Seterusnya, kami akan menguji kelas ini dengan JUnit dan TestNG.

3. Dengan JUnit

Mari buat kelas ujian baru sebagai SeleniumWithJUnitLiveTest:

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

Kami akan menggunakan anotasi @ BeforeClass dari org.junit.BeforeClass untuk melakukan persediaan awal. Dalam kaedah setUp () ini kita akan menginisialisasi objek SeleniumExample :

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

Dengan cara yang serupa, apabila kes ujian kami selesai, kita harus menutup penyemak imbas yang baru dibuka. Kami akan melakukan ini dengan anotasi @AfterClass - untuk membersihkan tetapan apabila pelaksanaan kes ujian selesai:

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

Harap maklum bahawa pengubah statik pada pemboleh ubah anggota SeleniumExample kami - kerana kami perlu menggunakan pemboleh ubah ini dalam kaedah statik setUp () dan tearDown () - @BeforeClass dan @AfterClass hanya boleh dipanggil menggunakan kaedah statik.

Akhirnya, kami dapat membuat ujian penuh kami:

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

Kaedah ujian ini menegaskan bahawa tajuk laman web tidak batal dan ditetapkan seperti yang diharapkan. Selain itu, kami memeriksa bahawa halaman tersebut mengandungi maklumat yang diharapkan.

Apabila ujian dijalankan, ia hanya membuka URL di Firefox dan kemudian menutupnya setelah tajuk laman web dan kandungannya telah disahkan.

4. Dengan TestNG

Sekarang mari kita gunakan TestNG untuk menjalankan kes / suite ujian kami.

Perhatikan bahawa jika anda menggunakan Eclipse, plugin TestNG mungkin dimuat turun dan dipasang dari Eclipse Marketplace.

Pertama, mari buat kelas ujian baru:

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

Kami akan menggunakan @BeforeSuite anotasi dari org.testng.annotations.BeforeSuite untuk instantiate kami kelas SeleniumExample . Kaedah setUp () akan dilancarkan sebelum set ujian diaktifkan:

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

Begitu juga, kami akan menggunakan anotasi @AfterSuite dari org.testng.annotations.AfterSuite untuk menutup penyemak imbas kami yang dibuka setelah set ujian selesai:

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

Akhirnya, mari kita laksanakan ujian kami:

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

Setelah berjaya menyelesaikan set ujian, kami menjumpai laporan HTML dan XML dalam folder ujian-output projek. Laporan ini merangkum hasil ujian.

5. Kesimpulan

Dalam artikel ringkas ini, kami memfokuskan pada pengenalan cepat untuk menulis ujian Selenium 3 dengan JUnit dan TestNG.

Seperti biasa, sumber untuk artikel tersebut terdapat di GitHub.