Skip to content

Commit 61ce48c

Browse files
committed
Update lesson 29 DataProvider
1 parent 55b1ef8 commit 61ce48c

File tree

7 files changed

+198
-59
lines changed

7 files changed

+198
-59
lines changed

src/main/java/anhtester/com/helpers/ExcelHelper.java

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import org.apache.poi.ss.usermodel.*;
44
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
5+
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
56

67
import java.io.File;
78
import java.io.FileInputStream;
89
import java.io.FileOutputStream;
10+
import java.io.IOException;
911
import java.util.HashMap;
12+
import java.util.Hashtable;
1013
import java.util.Map;
1114

1215
public class ExcelHelper {
@@ -147,4 +150,123 @@ public void setCellData(String text, int rowNumber, String columnName) {
147150
}
148151
}
149152

153+
public Object[][] getExcelData(String fileName, String sheetName) {
154+
Object[][] data = null;
155+
Workbook workbook = null;
156+
try {
157+
// load the file
158+
FileInputStream fis = new FileInputStream(fileName);
159+
160+
// load the workbook
161+
workbook = new XSSFWorkbook(fis);
162+
163+
// load the sheet
164+
Sheet sh = workbook.getSheet(sheetName);
165+
166+
// load the row
167+
Row row = sh.getRow(0);
168+
169+
//
170+
int noOfRows = sh.getPhysicalNumberOfRows();
171+
int noOfCols = row.getLastCellNum();
172+
173+
System.out.println((noOfRows - 1) + " - " + noOfCols);
174+
175+
Cell cell;
176+
data = new Object[noOfRows - 1][noOfCols];
177+
178+
//
179+
for (int i = 1; i < noOfRows; i++) {
180+
for (int j = 0; j < noOfCols; j++) {
181+
row = sh.getRow(i);
182+
cell = row.getCell(j);
183+
184+
switch (cell.getCellType()) {
185+
case STRING:
186+
data[i - 1][j] = cell.getStringCellValue();
187+
break;
188+
case NUMERIC:
189+
data[i - 1][j] = String.valueOf(cell.getNumericCellValue());
190+
break;
191+
case BLANK:
192+
data[i - 1][j] = cell.getStringCellValue();
193+
break;
194+
default:
195+
data[i - 1][j] = cell.getStringCellValue();
196+
break;
197+
}
198+
}
199+
}
200+
} catch (Exception e) {
201+
System.out.println("The exception is:" + e.getMessage());
202+
throw new RuntimeException(e);
203+
}
204+
return data;
205+
}
206+
207+
//Hàm này dùng cho trường hợp nhiều Field trong File Excel
208+
public int getColumns() {
209+
try {
210+
row = sh.getRow(0);
211+
return row.getLastCellNum();
212+
} catch (Exception e) {
213+
System.out.println(e.getMessage());
214+
throw (e);
215+
}
216+
}
217+
218+
//Get last row number (lấy vị trí dòng cuối cùng tính từ 0)
219+
public int getLastRowNum() {
220+
return sh.getLastRowNum();
221+
}
222+
223+
//Lấy số dòng có data đang sử dụng
224+
public int getPhysicalNumberOfRows() {
225+
return sh.getPhysicalNumberOfRows();
226+
}
227+
228+
public Object[][] getDataHashTable(String excelPath, String sheetName, int startRow, int endRow) {
229+
System.out.println("Excel Path: " + excelPath);
230+
Object[][] data = null;
231+
232+
try {
233+
File f = new File(excelPath);
234+
if (!f.exists()) {
235+
try {
236+
System.out.println("File Excel path not found.");
237+
throw new IOException("File Excel path not found.");
238+
} catch (Exception e) {
239+
e.printStackTrace();
240+
}
241+
}
242+
243+
fis = new FileInputStream(excelPath);
244+
245+
wb = new XSSFWorkbook(fis);
246+
247+
sh = wb.getSheet(sheetName);
248+
249+
int rows = getLastRowNum();
250+
int columns = getColumns();
251+
252+
System.out.println("Row: " + rows + " - Column: " + columns);
253+
System.out.println("StartRow: " + startRow + " - EndRow: " + endRow);
254+
255+
data = new Object[(endRow - startRow) + 1][1];
256+
Hashtable<String, String> table = null;
257+
for (int rowNums = startRow; rowNums <= endRow; rowNums++) {
258+
table = new Hashtable<>();
259+
for (int colNum = 0; colNum < columns; colNum++) {
260+
table.put(getCellData(0, colNum), getCellData(rowNums, colNum));
261+
}
262+
data[rowNums - startRow][0] = table;
263+
}
264+
265+
} catch (IOException e) {
266+
e.printStackTrace();
267+
}
268+
269+
return data;
270+
}
271+
150272
}

src/main/java/anhtester/com/keywords/WebUI.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ public static void clickElement(By by) {
6666
highLightElement(by);
6767
getWebElement(by).click();
6868
logConsole("Click on element " + by);
69-
//Report
7069
}
7170

7271
public static void setText(By by, String value) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package anhtester.com.dataproviders;
2+
3+
import anhtester.com.helpers.ExcelHelper;
4+
import anhtester.com.helpers.SystemsHelper;
5+
import org.testng.annotations.DataProvider;
6+
7+
public class DataLogin {
8+
@DataProvider(name = "dataProviderLoginCRM", parallel = true)
9+
public Object[][] dataLoginCRM() {
10+
return new Object[][]{{"[email protected]", "123456"}, {"[email protected]", "123456"}, {"[email protected]", "123456"}};
11+
}
12+
13+
@DataProvider(name = "dataProviderLoginCMS", parallel = true)
14+
public Object[][] dataLoginCMS() {
15+
return new Object[][]{{"[email protected]", "123456", 123}, {"[email protected]", "123456", 1234}};
16+
}
17+
18+
@DataProvider(name = "data_provider_login_excel")
19+
public Object[][] dataLoginCRMFromExcel() {
20+
ExcelHelper excelHelpers = new ExcelHelper();
21+
Object[][] data = excelHelpers.getExcelData(SystemsHelper.getCurrentDir() + "src/test/resources/datatest/CRM.xlsx", "Login");
22+
System.out.println("Login Data from Excel: " + data);
23+
return data;
24+
}
25+
26+
@DataProvider(name = "data_provider_login_excel_custom_row")
27+
public Object[][] dataLoginCRMFromExcelCustomRow() {
28+
ExcelHelper excelHelpers = new ExcelHelper();
29+
Object[][] data = excelHelpers.getDataHashTable(SystemsHelper.getCurrentDir() + "src/test/resources/datatest/CRM.xlsx", "Login", 1, 2);
30+
System.out.println("Login Data from Excel: " + data);
31+
return data;
32+
}
33+
34+
}

src/test/java/anhtester/com/testcases/LoginTest.java

Lines changed: 16 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,106 +2,65 @@
22

33
import anhtester.com.common.BaseTest;
44
import anhtester.com.constant.ConstantData;
5+
import anhtester.com.dataproviders.DataLogin;
56
import anhtester.com.helpers.ExcelHelper;
67
import anhtester.com.helpers.PropertiesHelper;
78
import anhtester.com.keywords.WebUI;
89
import anhtester.com.pages.LoginPage;
910
import org.openqa.selenium.By;
1011
import org.testng.annotations.Test;
1112

13+
import java.util.Hashtable;
14+
1215
public class LoginTest extends BaseTest {
1316

1417
LoginPage loginPage;
1518

16-
// @AfterMethod
17-
// public void getStatusTestCases(ITestResult result) {
18-
// if (result.getStatus() == ITestResult.FAILURE && result.getTestName() == "loginTestSuccess2") {
19-
// //Screenshot
20-
// //Ghi logs
21-
// //Set result to Excel
22-
// ExcelHelper excelHelper = new ExcelHelper();
23-
// excelHelper.setExcelFile("src/test/resources/datatest/CRM.xlsx", "Login");
24-
// excelHelper.setCellData("Failed", , "RESULT");
25-
// }
26-
// }
27-
2819
@Test
29-
public void loginTestSuccess1() {
30-
//Khởi tạo đối tượng trang LoginPage
31-
//Truyền driver từ BaseTest
20+
public void loginTest1() {
3221
loginPage = new LoginPage();
33-
34-
//Gọi hàm "login" từ LoginPage để dùng
3522
loginPage.login(PropertiesHelper.getValue("email"), PropertiesHelper.getValue("password"));
3623

3724
PropertiesHelper.setFile("src/test/resources/configs/data.properties");
3825
PropertiesHelper.setValue("label", WebUI.getTextElement(By.xpath("//span[normalize-space()='Invoice overview']")));
3926
}
4027

4128
@Test
42-
public void loginTestSuccess2() {
43-
//Khởi tạo đối tượng trang LoginPage
44-
//Truyền driver từ BaseTest
29+
public void loginTest2() {
4530
loginPage = new LoginPage();
4631

4732
ExcelHelper excelHelper = new ExcelHelper();
4833
excelHelper.setExcelFile("src/test/resources/datatest/CRM.xlsx", "Login");
4934

50-
//Gọi hàm "login" từ LoginPage để dùng
5135
loginPage.login(excelHelper.getCellData(ConstantData.EMAIL, 1), excelHelper.getCellData("PASSWORD", 1));
5236

5337
//Chạy tới dòng này nghĩa là Passed
5438
excelHelper.setCellData("Passed", 1, "RESULT");
5539

5640
}
5741

58-
@Test
59-
public void loginTestInvalidEmail1() {
60-
loginPage = new LoginPage();
61-
loginPage.loginInvalidEmail("[email protected]", "123456");
62-
}
63-
64-
@Test
65-
public void loginTestInvalidEmail2() {
42+
@Test(dataProvider = "dataProviderLoginCRM", dataProviderClass = DataLogin.class)
43+
public void loginTest3(String email, String password) {
6644
loginPage = new LoginPage();
67-
loginPage.loginInvalidEmail("[email protected]", "123456");
45+
loginPage.login(email, password);
6846
}
6947

70-
@Test
71-
public void loginTestInvalidEmail3() {
48+
@Test(dataProvider = "data_provider_login_excel", dataProviderClass = DataLogin.class)
49+
public void loginTestFromDataProviderReadExcel(String email, String password, String result) {
7250
loginPage = new LoginPage();
73-
loginPage.loginInvalidEmail("[email protected]", "123456");
51+
loginPage.login(email, password);
7452
}
7553

76-
@Test
77-
public void loginTestInvalidEmail4() {
54+
@Test(dataProvider = "data_provider_login_excel_custom_row", dataProviderClass = DataLogin.class)
55+
public void loginTestFromDataProviderReadExcelCustomRow(Hashtable<String, String> data) {
7856
loginPage = new LoginPage();
79-
loginPage.loginInvalidEmail("[email protected]", "123456");
57+
loginPage.login(data.get("EMAIL"), data.get("PASSWORD"));
8058
}
8159

8260
@Test
83-
public void loginTestInvalidEmail5() {
61+
public void loginTestInvalidEmail() {
8462
loginPage = new LoginPage();
85-
loginPage.loginInvalidEmail("admin@example.com123", "123456");
63+
loginPage.loginInvalidEmail("admin123@example.com", "123456");
8664
}
8765

88-
@Test
89-
public void loginTestInvalidEmail6() {
90-
loginPage = new LoginPage();
91-
loginPage.loginInvalidEmail("[email protected]", "123456");
92-
}
93-
94-
@Test
95-
public void loginTestInvalidEmail7() {
96-
loginPage = new LoginPage();
97-
loginPage.loginInvalidEmail("[email protected]", "123456");
98-
}
99-
100-
@Test
101-
public void loginTestInvalidEmail8() {
102-
loginPage = new LoginPage();
103-
loginPage.loginInvalidEmail("[email protected]", "123456");
104-
}
105-
106-
10766
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package anhtester.com.testcases;
2+
3+
import anhtester.com.dataproviders.DataLogin;
4+
import io.github.bonigarcia.wdm.WebDriverManager;
5+
import org.openqa.selenium.WebDriver;
6+
import org.openqa.selenium.chrome.ChromeDriver;
7+
import org.testng.annotations.Test;
8+
9+
public class TestDataProvider {
10+
11+
@Test(dataProvider = "dataProviderLoginCRM", dataProviderClass = DataLogin.class)
12+
public void testLoginCRM(String email, String password) {
13+
System.out.println(email + " - " + password);
14+
15+
WebDriverManager.chromedriver().setup();
16+
WebDriver driver = new ChromeDriver();
17+
driver.quit();
18+
}
19+
20+
@Test(dataProvider = "dataProviderLoginCMS", dataProviderClass = DataLogin.class)
21+
public void testLoginCMS(String email, String password, int pin) {
22+
System.out.println(email + " - " + password + " - " + pin);
23+
}
24+
25+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
#Fri Feb 24 20:31:23 ICT 2023
1+
#Wed Mar 01 22:39:33 ICT 2023
22
label=Invoice overview
27 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)