Selenium 中都使用了哪些 TestNG 註解?
TestNG 是一個強大的測試框架,它是 JUnit 的增強版,JUnit 在 TestNG 出現之前已經使用了很長時間。NG 代表“下一代”。
TestNG 框架提供以下功能:
註解幫助我們輕鬆組織測試。
靈活的測試配置。
測試用例更容易分組。
可以使用 TestNG 實現測試的並行化。
支援資料驅動測試。
內建報告。
Selenium Webdriver 允許與網頁互動。它是一個介面,而不是一個測試框架。要僅在 Selenium 中執行任何測試或程式碼,我們必須使用 Java main 方法。TestNG 為我們提供了一個無需使用 Java main 方法即可執行 Selenium 程式碼的框架。除此之外,更好的程式碼可維護性、報告和靈活的測試配置是使用 TestNG 與 Selenium 結合的額外優勢。
Selenium 中的 TestNG 註解
註解在 JDK 5 中正式新增到 Java 語言中,TestNG 選擇使用註解來註釋測試類。以下是使用註解的一些好處。更多關於 TestNG 的資訊可以在這裡找到
TestNG 透過查詢註解來識別它感興趣的方法。因此,方法名稱不受任何模式或格式的限制。
我們可以向註解傳遞附加引數。
註解是強型別的,因此編譯器會立即標記任何錯誤。
測試類不再需要擴充套件任何內容(例如 JUnit 3 的 TestCase)。
使用者可以在 Selenium 中使用所有可用的 TestNG 註解。其中一些如下所示
序號 |
註解及描述 |
---|---|
1 |
@BeforeSuite 此套件中所有測試執行之前,將只執行一次帶註解的方法。 |
2 |
@AfterSuite 此套件中所有測試執行之後,將只執行一次帶註解的方法。 |
3 |
@BeforeClass 在呼叫當前類中的第一個測試方法之前,將只執行一次帶註解的方法。 |
4 |
@AfterClass 在當前類中所有測試方法執行之後,將只執行一次帶註解的方法。 |
5 |
@BeforeTest 在執行<test>標籤內類的任何測試方法之前,將執行帶註解的方法。 |
6 |
@AfterTest 在執行<test>標籤內類的所有測試方法之後,將執行帶註解的方法。 |
7 |
@BeforeGroups 此配置方法將在其之前執行的組列表。保證在呼叫屬於任何這些組的第一個測試方法之前不久執行此方法。 |
8 |
@AfterGroups 此配置方法將在其之後執行的組列表。保證在呼叫屬於任何這些組的最後一個測試方法之後不久執行此方法。 |
9 |
@BeforeMethod 在每個測試方法之前將執行帶註解的方法。 |
10 |
@AfterMethod 在每個測試方法之後將執行帶註解的方法。 |
11 |
@DataProvider 將方法標記為為測試方法提供資料。帶註解的方法必須返回一個 Object[ ][ ],其中每個 Object[ ] 可以分配給測試方法的引數列表。想要從此 DataProvider 接收資料的 @Test 方法需要使用一個數據提供程式名稱,該名稱等於此註解的名稱。 |
12 |
@Factory 將方法標記為工廠,該工廠返回 TestNG 將用作測試類的物件。該方法必須返回 Object[ ]。 |
13 |
@Listeners 在測試類上定義監聽器。 |
14 |
@Parameters 描述如何將引數傳遞給 @Test 方法。 |
15 |
@Test 將類或方法標記為測試的一部分。 |
讓我們分析如何在 Selenium 中使用 TestNG 註解。
解決此問題的方法/演算法
步驟 1:確保在系統中正確設定了 Selenium、TestNG 和 Firefox 驅動程式的初始設定。
步驟 2:建立一個 TestNG 類並編寫如程式程式碼中所述的 Selenium 程式碼。
步驟 3:執行 TestNGClass 檔案。
示例
以下程式碼用於建立包含 Selenium 程式碼的 TestNG 類
import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TestNGClass { WebDriver driver = new FirefoxDriver(); @BeforeTest public void launchApp() { // Puts an Implicit wait, Will wait for 10 seconds before throwing exception driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Launch website driver.navigate().to("http://www.calculator.net"); driver.manage().window().maximize(); } @Test public void calculatePercent() { // Click on Math Calculators driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click(); // Click on Percent Calculators driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click(); // Enter value 10 in the first number of the percent Calculator driver.findElement(By.id("cpar1")).sendKeys("10"); // Enter value 50 in the second number of the percent Calculator driver.findElement(By.id("cpar2")).sendKeys("50"); // Click Calculate Button driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click(); // Get the Result Text based on its xpath String result = driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText(); // Print a Log In message to the screen System.out.println(" The Result is " + result); if(result.equals("5")) { System.out.println(" The Result is Pass"); } else { System.out.println(" The Result is Fail"); } } @AfterTest public void terminatetest() { driver.close(); } }
輸出
[TestNG] Running: C://Users/************** The Result is 5 The Result is Pass PASSED: calulatePercent =============================================== Suite1 Total tests run: 1, Passes: 1, Failures: 0, Skips: 0 ===============================================