Commit 72447216 authored by Đỗ Gia Hưng's avatar Đỗ Gia Hưng

Refactor: Centralize BaseSetup, fix missing HandleRobotClassTest, and update...

Refactor: Centralize BaseSetup, fix missing HandleRobotClassTest, and update dependencies to latest versions
parent 28a39a29
...@@ -12,8 +12,8 @@ ...@@ -12,8 +12,8 @@
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<selenium.version>4.24.0</selenium.version> <selenium.version>4.43.0</selenium.version>
<testng.version>7.9.0</testng.version> <testng.version>7.12.0</testng.version>
</properties> </properties>
<dependencies> <dependencies>
...@@ -31,13 +31,22 @@ ...@@ -31,13 +31,22 @@
<version>${testng.version}</version> <version>${testng.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- SLF4J Simple implementation to fix StaticLoggerBinder warning -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.17</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version> <version>3.5.5</version>
<configuration> <configuration>
<suiteXmlFiles> <suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile> <suiteXmlFile>testng.xml</suiteXmlFile>
......
package com.automation.base;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import java.time.Duration;
public class BaseSetup {
protected WebDriver driver;
@BeforeMethod
public void setUp() {
System.out.println(">>> Initializing WebDriver from BaseSetup...");
// Setup Chrome properties (silent logs)
System.setProperty("webdriver.chrome.silentOutput", "true");
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30));
}
@AfterMethod
public void tearDown() {
if (driver != null) {
driver.quit();
System.out.println(">>> WebDriver closed by BaseSetup.");
}
}
/**
* Helper method to highlight a web element with a red border
* @param element The WebElement to highlight
*/
public void highlightElement(WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute('style', 'border: 4px solid red; background: lightyellow;');", element);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package com.automation.testcases; package com.automation.testcases;
import com.automation.base.BaseSetup;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.Keys; import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.Actions;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import java.time.Duration; public class HandleActionsTest extends BaseSetup {
public class HandleActionsTest {
WebDriver driver;
@BeforeMethod
public void setUp() {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}
@Test(priority = 1, description = "Test Mouse Hover - Di chuột qua menu") @Test(priority = 1, description = "Test Mouse Hover - Di chuột qua menu")
public void testMouseHover() { public void testMouseHover() {
...@@ -37,6 +20,9 @@ public class HandleActionsTest { ...@@ -37,6 +20,9 @@ public class HandleActionsTest {
// Tìm element menu "Khoá học" (Dùng 'oá' thay vì 'óa' cho đúng font của web) // Tìm element menu "Khoá học" (Dùng 'oá' thay vì 'óa' cho đúng font của web)
WebElement menuCourses = driver.findElement(By.xpath("//a[contains(., 'Khoá học')]")); WebElement menuCourses = driver.findElement(By.xpath("//a[contains(., 'Khoá học')]"));
// => GỌI HÀM HIGHLIGHT TỪ BASE
highlightElement(menuCourses);
// Thực hiện di chuột (Hover) // Thực hiện di chuột (Hover)
actions.moveToElement(menuCourses).perform(); actions.moveToElement(menuCourses).perform();
...@@ -54,6 +40,7 @@ public class HandleActionsTest { ...@@ -54,6 +40,7 @@ public class HandleActionsTest {
// 1. Right Click (Chuột phải) // 1. Right Click (Chuột phải)
WebElement rightClickBtn = driver.findElement(By.xpath("//span[contains(text(),'right click me')]")); WebElement rightClickBtn = driver.findElement(By.xpath("//span[contains(text(),'right click me')]"));
highlightElement(rightClickBtn); // => HIGHLIGHT NÚT CHUỘT PHẢI
actions.contextClick(rightClickBtn).perform(); actions.contextClick(rightClickBtn).perform();
// Kiểm tra xem menu chuột phải có hiện ra không // Kiểm tra xem menu chuột phải có hiện ra không
...@@ -65,6 +52,7 @@ public class HandleActionsTest { ...@@ -65,6 +52,7 @@ public class HandleActionsTest {
// 2. Double Click (Click đúp) // 2. Double Click (Click đúp)
WebElement doubleClickBtn = driver.findElement(By.xpath("//button[contains(text(),'Double-Click Me To See Alert')]")); WebElement doubleClickBtn = driver.findElement(By.xpath("//button[contains(text(),'Double-Click Me To See Alert')]"));
highlightElement(doubleClickBtn); // => HIGHLIGHT NÚT CLICK ĐÚP
actions.doubleClick(doubleClickBtn).perform(); actions.doubleClick(doubleClickBtn).perform();
// Chờ và kiểm tra Alert xuất hiện // Chờ và kiểm tra Alert xuất hiện
...@@ -81,23 +69,17 @@ public class HandleActionsTest { ...@@ -81,23 +69,17 @@ public class HandleActionsTest {
WebElement source = driver.findElement(By.xpath("//li[@id='fourth']//a[contains(text(),'5000')]")); WebElement source = driver.findElement(By.xpath("//li[@id='fourth']//a[contains(text(),'5000')]"));
WebElement target = driver.findElement(By.xpath("//ol[@id='amt7']//li[@class='placeholder']")); WebElement target = driver.findElement(By.xpath("//ol[@id='amt7']//li[@class='placeholder']"));
// => HIGHLIGHT CẢ NGUỒN VÀ ĐÍCH TRƯỚC KHI KÉO
highlightElement(source);
highlightElement(target);
// Cách 1: Dùng hàm dragAndDrop() // Cách 1: Dùng hàm dragAndDrop()
actions.dragAndDrop(source, target).perform(); actions.dragAndDrop(source, target).perform();
// Cách 2: Dùng clickAndHold -> moveToElement -> release
// actions.clickAndHold(source).moveToElement(target).release().build().perform();
System.out.println("Da thuc hien keo tha"); System.out.println("Da thuc hien keo tha");
// Kiểm tra kết quả kéo thả // Kiểm tra kết quả kéo thả
WebElement result = driver.findElement(By.xpath("//ol[@id='amt7']//li[contains(text(),'5000')]")); WebElement result = driver.findElement(By.xpath("//ol[@id='amt7']//li[contains(text(),'5000')]"));
Assert.assertTrue(result.isDisplayed(), "Keo tha khong thanh cong!"); Assert.assertTrue(result.isDisplayed(), "Keo tha khong thanh cong!");
} }
@AfterMethod
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
} }
package com.automation.testcases;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.time.Duration;
import java.util.logging.Level;
import java.util.logging.Logger;
public class HandleAlertTest {
WebDriver driver;
@BeforeMethod
public void setUp() {
System.out.println(">>> [LOG] [" + java.time.LocalTime.now() + "] Bat dau khoi tao ChromeOptions...");
System.setProperty("webdriver.chrome.silentOutput", "true");
Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--remote-allow-origins=*");
options.addArguments("--disable-logging");
options.addArguments("--log-level=3");
options.addArguments("--ignore-certificate-errors");
System.out.println(">>> [LOG] [" + java.time.LocalTime.now() + "] Dang goi: new ChromeDriver(options)...");
try {
driver = new ChromeDriver(options);
System.out.println(">>> [LOG] [" + java.time.LocalTime.now() + "] Mo trinh duyet thanh cong.");
} catch (Exception e) {
System.err.println(">>> [ERROR] Khong the khoi tao Driver: " + e.getMessage());
throw e;
}
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30));
}
@Test(priority = 1, description = "Xử lý Alert cơ bản")
public void testSimpleAlert() throws InterruptedException {
System.out.println(">>> [LOG] Truy cập trang thực hành Alert (Trang này rất ổn định)...");
driver.get("https://the-internet.herokuapp.com/javascript_alerts");
Thread.sleep(2000);
System.out.println(">>> [LOG] Click button hiển thị Alert...");
driver.findElement(By.xpath("//button[text()='Click for JS Alert']")).click();
Thread.sleep(2000);
Alert alert = driver.switchTo().alert();
System.out.println(">>> [LOG] Đã thấy Alert. Nội dung: " + alert.getText());
alert.accept();
System.out.println(">>> [LOG] Đã nhấn OK.");
Thread.sleep(2000);
}
@Test(priority = 2, description = "Xử lý Confirm Alert (Dismiss)")
public void testConfirmAlert() throws InterruptedException {
driver.get("https://the-internet.herokuapp.com/javascript_alerts");
Thread.sleep(2000);
System.out.println(">>> [LOG] Click button hiển thị Confirm Alert...");
driver.findElement(By.xpath("//button[text()='Click for JS Confirm']")).click();
Thread.sleep(2000);
Alert alert = driver.switchTo().alert();
System.out.println(">>> [LOG] Đang nhấn Cancel (Dismiss)...");
alert.dismiss();
Thread.sleep(2000);
String result = driver.findElement(By.id("result")).getText();
System.out.println(">>> [LOG] Kết quả: " + result);
Assert.assertTrue(result.contains("Cancel"));
}
@AfterMethod
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
package com.automation.testcases;
import com.automation.base.BaseSetup;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;
import java.awt.*;
import java.awt.event.KeyEvent;
public class HandleRobotClassTest extends BaseSetup {
@Test
public void testRobotClass() throws AWTException, InterruptedException {
driver.get("https://www.google.com");
WebElement searchBox = driver.findElement(By.name("q"));
highlightElement(searchBox);
searchBox.sendKeys("Selenium Java Robot Class");
// Example of using Robot class to press Enter
Robot robot = new Robot();
System.out.println(">>> Using Robot class to press ENTER...");
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
Thread.sleep(2000);
System.out.println(">>> Robot class test completed.");
}
}
package com.automation.testcases;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.time.Duration;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
public class HandleWindowIFrameTest {
WebDriver driver;
@BeforeMethod
public void setUp() {
System.out.println(">>> [LOG] [" + java.time.LocalTime.now() + "] Bat dau khoi tao ChromeOptions...");
System.setProperty("webdriver.chrome.silentOutput", "true");
Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--remote-allow-origins=*");
options.addArguments("--disable-logging");
options.addArguments("--log-level=3");
options.addArguments("--ignore-certificate-errors");
System.out.println(">>> [LOG] [" + java.time.LocalTime.now() + "] Dang goi: new ChromeDriver(options)...");
try {
driver = new ChromeDriver(options);
System.out.println(">>> [LOG] [" + java.time.LocalTime.now() + "] Mo trinh duyet thanh cong.");
} catch (Exception e) {
System.err.println(">>> [ERROR] Khong the khoi tao Driver: " + e.getMessage());
throw e;
}
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30));
}
@Test(priority = 1, description = "Xử lý chuyển đổi Windows (Tab)")
public void testHandleWindows() throws InterruptedException {
System.out.println(">>> [LOG] Truy cập trang thực hành Windows...");
driver.get("https://the-internet.herokuapp.com/windows");
Thread.sleep(2000);
String mainWindowHandle = driver.getWindowHandle();
System.out.println(">>> [LOG] Window chính: " + mainWindowHandle);
System.out.println(">>> [LOG] Click 'Click Here' để mở Tab mới...");
driver.findElement(By.linkText("Click Here")).click();
Thread.sleep(4000);
Set<String> allWindowHandles = driver.getWindowHandles();
for (String handle : allWindowHandles) {
if (!handle.equals(mainWindowHandle)) {
System.out.println(">>> [LOG] Đang chuyển sang Tab mới...");
driver.switchTo().window(handle);
Thread.sleep(2000);
break;
}
}
System.out.println(">>> [LOG] Tiêu đề trang mới: " + driver.getTitle());
driver.close();
System.out.println(">>> [LOG] Đã đóng Tab. Quay lại Window chính...");
driver.switchTo().window(mainWindowHandle);
Thread.sleep(2000);
Assert.assertTrue(driver.getTitle().contains("The Internet"));
}
@Test(priority = 2, description = "Xử lý iFrame")
public void testHandleIFrame() throws InterruptedException {
System.out.println(">>> [LOG] Truy cập trang thực hành iFrame...");
driver.get("https://the-internet.herokuapp.com/iframe");
Thread.sleep(3000);
System.out.println(">>> [LOG] Đang chuyển vào iFrame mce_0_ifr...");
driver.switchTo().frame("mce_0_ifr");
WebElement editor = driver.findElement(By.id("tinymce"));
System.out.println(">>> [LOG] Đã ở TRONG iFrame. Đang xóa text bằng JS...");
// Sử dụng Javascript để clear và set text cho ổn định với TinyMCE
org.openqa.selenium.JavascriptExecutor js = (org.openqa.selenium.JavascriptExecutor) driver;
js.executeScript("arguments[0].innerHTML = '';", editor);
Thread.sleep(1000);
System.out.println(">>> [LOG] Đang nhập text mới...");
editor.sendKeys("Chào Anh Tester - Học Selenium Java!");
Thread.sleep(2000);
driver.switchTo().defaultContent();
System.out.println(">>> [LOG] Đã thoát ra ngoài iFrame.");
Thread.sleep(2000);
String headerText = driver.findElement(By.tagName("h3")).getText();
Assert.assertTrue(headerText.contains("An iFrame"));
}
@AfterMethod
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
package com.automation.testcases; package com.automation.testcases;
import com.automation.base.BaseSetup;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert; import org.testng.asserts.SoftAssert;
import java.time.Duration; public class TestNGAssertionsTest extends BaseSetup {
public class TestNGAssertionsTest { @Test(priority = 1)
WebDriver driver;
@BeforeMethod
public void setUp() {
System.out.println("--- Khoi tao trinh duyet ---");
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
// Chạy ẩn để tiết kiệm RAM nếu cần
// options.addArguments("--headless");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}
@Test(priority = 1, description = "Test Hard Assert - Kiem tra title va header")
public void testHardAssert() { public void testHardAssert() {
System.out.println("Executing testHardAssert..."); System.out.println("--- Bat dau test Hard Assert ---");
driver.get("https://anhtester.com"); driver.get("https://anhtester.com");
// 1. Kiểm tra Tiêu đề trang (Title) - Dùng Hard Assert // 1. Kiểm tra tiêu đề trang
String expectedTitle = "Anh Tester"; String expectedTitle = "Anh Tester - Học Automation Testing";
String actualTitle = driver.getTitle(); String actualTitle = driver.getTitle();
System.out.println("Kiem tra Title cua trang..."); Assert.assertEquals(actualTitle, expectedTitle, "Tieu de trang khong dung!");
// Cú pháp: Assert.assertEquals(Thực tế, Mong muốn, Thông báo lỗi nếu sai)
// Hoặc Assert.assertTrue(Điều kiện đúng, Thông báo lỗi)
Assert.assertTrue(actualTitle.contains(expectedTitle), "Title trang web khong dung!");
System.out.println("=> Title dung. Kiem tra tiep Header...");
// 2. Kiểm tra Header có tồn tại không // 2. Kiểm tra Header có tồn tại không
WebElement headerLogo = driver.findElement(By.xpath("//a[@class='logo']")); WebElement headerLogo = driver.findElement(By.xpath("//a[@class='logo']"));
// => GỌI HÀM HIGHLIGHT TỪ BASE
highlightElement(headerLogo);
Assert.assertTrue(headerLogo.isDisplayed(), "Khong tim thay Logo o header!"); Assert.assertTrue(headerLogo.isDisplayed(), "Khong tim thay Logo o header!");
System.out.println("=> Header Logo ton tai. Hard Assert thanh cong!"); System.out.println("=> Header Logo ton tai. Hard Assert thanh cong!");
// Nếu dòng số 40 (Assert Title) bị sai (Fail), toàn bộ các dòng dưới (từ 41)
// sẽ KHÔNG ĐƯỢC CHẠY và test case dừng ngay lập tức.
} }
@Test(priority = 2, description = "Test Soft Assert - Kiem tra nhieu URL va Text cung luc") @Test(priority = 2)
public void testSoftAssert() { public void testSoftAssert() {
System.out.println("Executing testSoftAssert..."); System.out.println("--- Bat dau test Soft Assert ---");
driver.get("https://anhtester.com");
// Khởi tạo đối tượng SoftAssert
SoftAssert softAssert = new SoftAssert(); SoftAssert softAssert = new SoftAssert();
// 1. Cố tình kiểm tra sai Title driver.get("https://anhtester.com");
System.out.println("Kiem tra Title bang Soft Assert (Co tinh kiem tra sai)...");
String actualTitle = driver.getTitle();
// Chỉnh lại cho đúng: "Anh Tester" thay vì "anh tester"
softAssert.assertTrue(actualTitle.contains("Anh Tester"), "Title bi sai!");
System.out.println("=> Soft Assert tiep tuc kiem tra URL..."); // 1. Kiểm tra tiêu đề (Cố tình sai để xem Soft Assert hoạt động)
String actualTitle = driver.getTitle();
// 2. Kiểm tra URL đúng softAssert.assertEquals(actualTitle, "Sai Tieu De", "Tieu de bi sai (Day la loi co y)!");
String currentUrl = driver.getCurrentUrl();
softAssert.assertTrue(currentUrl.contains("anhtester"), "URL khong chua anhtester!");
System.out.println("=> Kiem tra URL xong. Kiem tra tiep 1 element khac..."); // 2. Kiểm tra nút Login có hiển thị không
WebElement loginBtn = driver.findElement(By.id("btn-login"));
highlightElement(loginBtn);
softAssert.assertTrue(loginBtn.isDisplayed(), "Nut Login khong hien thi!");
// 3. Kiểm tra text của menu Blog // 3. Kiểm tra text của menu Blog
WebElement blogMenu = driver.findElement(By.xpath("//a[@href='/blogs']")); WebElement blogMenu = driver.findElement(By.xpath("//a[@href='/blogs']"));
// => GỌI HÀM HIGHLIGHT TỪ BASE
highlightElement(blogMenu);
String menuText = blogMenu.getText(); String menuText = blogMenu.getText();
// DOM trả về "blog", trên giao diện hiển thị "BLOG" do CSS. Ta dùng equalsIgnoreCase cho chắc.
softAssert.assertTrue(menuText.equalsIgnoreCase("blog"), "Text cua menu Blog bi sai!"); softAssert.assertTrue(menuText.equalsIgnoreCase("blog"), "Text cua menu Blog bi sai!");
System.out.println("=> Ket thuc viec kiem tra Soft Assert."); System.out.println("=> Ket thuc viec kiem tra Soft Assert.");
// QUAN TRỌNG NHẤT: Phải có dòng này ở cuối để tổng hợp lỗi. // QUAN TRỌNG NHẤT: Phải có dòng này ở cuối để tổng hợp lỗi.
// Nếu không có, test case luôn báo PASS dù có bao nhiêu cái assert sai đi nữa.
softAssert.assertAll(); softAssert.assertAll();
} }
@AfterMethod
public void tearDown() {
System.out.println("--- Dong trinh duyet ---");
if (driver != null) {
driver.quit();
}
}
} }
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
<class name="com.automation.testcases.TestNGAnnotationsTest"/> <class name="com.automation.testcases.TestNGAnnotationsTest"/>
<class name="com.automation.testcases.TestNGAssertionsTest"/> <class name="com.automation.testcases.TestNGAssertionsTest"/>
<class name="com.automation.testcases.HandleActionsTest"/> <class name="com.automation.testcases.HandleActionsTest"/>
<class name="com.automation.testcases.HandleRobotClassTest"/>
<class name="com.automation.testcases.HandleAlertTest"/>
<class name="com.automation.testcases.HandleWindowIFrameTest"/>
</classes> </classes>
</test> </test>
</suite> </suite>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment