Xây dựng khung Selenium theo hướng dữ liệu, theo hướng từ khóa & kết hợp



Blog này giải thích khuôn khổ Selenium là gì, lợi ích của nó và cách triển khai các khuôn khổ Theo hướng dữ liệu, Theo hướng từ khóa & Kết hợp trong selen.

Trước đó trong loạt bài này đã giúp bạn tiếp xúc với các khái niệm cơ bản trong thử nghiệm Selenium.Tuy nhiên, trong blog này, tôi sẽ cho bạn biết cách sử dụng khung công tác Selenium để tối ưu hóa cấu trúc mã của bạn và điều này sẽ đưa bạn đến gần hơn để trở thành .

Selenium framework là gì?

Selenium framework là một cấu trúc mã giúp việc bảo trì mã trở nên đơn giản hơn và khả năng đọc mã tốt hơn. Một khuôn khổ bao gồm việc chia nhỏ toàn bộ mã thành các đoạn mã nhỏ hơn để kiểm tra một chức năng cụ thể.





Mã được cấu trúc như vậy, 'tập dữ liệu' được tách biệt khỏi 'trường hợp thử nghiệm' thực tế sẽ kiểm tra chức năng của ứng dụng web. Nó cũng có thể được cấu trúc theo cách trong đó, các trường hợp kiểm thử cần được thực thi được gọi (gọi) từ một ứng dụng bên ngoài (như .csv).

Có một số khuôn khổ ngoài kia, nhưng 3 (các) khuôn khổ Selenium thường được sử dụng là:



Các khuôn khổ này sẽ được thảo luận với một bản demo trong blog này. Nhưng trước khi đi xa hơn, hãy để tôi cho bạn biết lý do tại sao cần có một khung công tác Selenium và bạn sẽ nhận được những lợi ích gì khi sử dụng chúng.

Tại sao chúng ta cần một framework Selenium?

Nếu không có khuôn khổ, sẽ có một trường hợp thử nghiệm sẽ bao gồm toàn bộ chức năng thử nghiệm. Phần đáng sợ là, trường hợp thử nghiệm duy nhất này có khả năng tăng lên đến một triệu dòng mã. Vì vậy, rõ ràng là một trường hợp thử nghiệm quá lớn sẽ rất khó đọc. Ngay cả khi bạn muốn sửa đổi bất kỳ chức năng nào sau đó, thì bạn sẽ gặp khó khăn khi sửa đổi mã.

Vì việc triển khai một khuôn khổ, sẽ dẫn đến các đoạn mã nhỏ hơn nhưng có nhiều đoạn mã, có nhiều lợi ích khác nhau.



Lợi ích của khung Selenium

  • Tăng khả năng sử dụng lại mã
  • Cải thiện khả năng đọc mã
  • Tính di động cao hơn
  • Tập lệnh rút gọnbảo trì

Bây giờ bạn đã biết những điều cơ bản về các framework, hãy để tôi giải thích chi tiết về từng framework.

Khung theo hướng dữ liệu

Khung theo hướng dữ liệu trong Selenium là kỹ thuật tách “tập dữ liệu” khỏi “trường hợp thử nghiệm” (mã) thực tế. Khung này hoàn toàn phụ thuộc vào dữ liệu kiểm tra đầu vào. Dữ liệu kiểm tra được cung cấp từ các nguồn bên ngoài như tệp excel, tệp .CSV hoặc bất kỳ cơ sở dữ liệu nào.

khung hướng dữ liệu - khung selen - edureka

Vì trường hợp thử nghiệm được tách biệt khỏi tập dữ liệu, chúng tôi có thể dễ dàng sửa đổi trường hợp thử nghiệm của một chức năng cụ thể mà không cần thực hiện các thay đổi bán buôn đối với mã của bạn. Ví dụ: nếu bạn muốn sửa đổi mã cho chức năng đăng nhập, thì bạn có thể chỉ sửa đổi mã đó thay vì phải sửa đổi bất kỳ phần phụ thuộc nào khác trong cùng một mã.

Bên cạnh đó, bạn cũng có thể dễ dàng kiểm soát lượng dữ liệu cần được kiểm tra. Bạn có thể dễ dàng tăng số lượng tham số kiểm tra bằng cách thêm nhiều trường tên người dùng và mật khẩu vào tệp excel (hoặc các nguồn khác).

Ví dụ: nếu tôi phải kiểm tra thông tin đăng nhập vào một trang web, thì tôi có thể giữ tập hợp thông tin đăng nhập tên người dùng và mật khẩu trong tệp excel và chuyển thông tin đăng nhập vào mã để thực hiện tự động hóa trên trình duyệt trong tệp lớp Java riêng biệt.

Sử dụng Apache POI với Selenium WebDriver

WebDriver không hỗ trợ trực tiếp đọc các tệp excel. Do đó chúng tôi sử dụng Apache POI để đọc / ghi vào bất kỳ tài liệu Microsoft Office nào. Bạn có thể tải xuống Apache POI (tập hợp các tệp JAR) từ đây . Tải xuống tệp zip hoặc tệp tar theo yêu cầu của bạn và đặt chúng cùng với bộ Selenium JAR.

Sự phối hợp giữa mã chính và tập dữ liệu sẽ được thực hiện bởi Nhà cung cấp dữ liệu TestNG, là một thư viện đi kèm như một phần của tệp Apache POI JAR. Với mục đích demo, tôi đã tạo một tệp excel có tên “LoginCredentials” trong đó tên người dùng và mật khẩu đã được lưu trữ trong các cột khác nhau.

Hãy xem đoạn mã dưới đây để hiểu trường hợp thử nghiệm. Đây là một mã đơn giản để kiểm tra chức năng đăng nhập của ứng dụng đặt vé máy bay.

gói DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test public class DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) ném InterruptException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (tên người dùng) driver.findElement (By.name ('password') )). sendKeys (mật khẩu) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). trận đấu ('Tìm chuyến bay: Mercury Tours: '),' Thông tin đăng nhập không hợp lệ ') System.out.println (' Đăng nhập thành công ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int row = config.getRowCount (0) Object [] [] credentials = new Object [row] [2] for (int i = 0i

Nếu bạn nhận thấy từ phía trên, chúng tôi có một phương thức tên là “TestDataFeed ()”. Trong phương pháp này, tôi đã tạo một cá thể đối tượng của một lớp khác có tên là “ReadExcelFile”. Trong khi khởi tạo đối tượng này, tôi đã cung cấp đường dẫn của tệp excel chứa dữ liệu của mình. Tôi đã xác định thêm một vòng lặp for để truy xuất văn bản từ sổ làm việc excel.

Tuy nhiên, để đọc dữ liệu từ một số trang, số cột và số hàng nhất định, các lệnh gọi được thực hiện đến lớp “ReadExcelFile”. Mã của “ReadExcelFile” của tôi ở bên dưới.

package DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public String excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} public Chuỗi getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}

Đầu tiên lưu ý các thư viện tôi đã nhập. Tôi đã nhập khẩu Apache POI XSSF thư viện được sử dụng để đọc / ghi dữ liệu vào tệp excel. Ở đây, tôi đã tạo một hàm tạo (đối tượng của cùng một phương thức) để truyền các giá trị: số trang, số hàng và số cột. Để hiểu rõ hơn về khung này, tôi yêu cầu bạn xem qua video dưới đây, nơi tôi đã giải thích điều này theo cách có cấu trúc.

Khung theo hướng dữ liệu trong Selenium WebDriver | Hướng dẫn về Selenium

Bây giờ, hãy chuyển sang khuôn khổ, tức là khuôn khổ Theo hướng từ khóa.

Khung theo hướng từ khóa

Keyword Driven framework là một kỹ thuật trong đó tất cả các hoạt động và hướng dẫn được thực hiện được viết riêng biệt với trường hợp thử nghiệm thực tế. Điểm tương đồng của nó với khuôn khổ Data Driven là các thao tác sẽ được thực hiện lại được lưu trữ trong một tệp bên ngoài như trang tính Excel.

Các hoạt động mà tôi đang nói đến không là gì ngoài các phương thức cần được thực thi như một phần của trường hợp thử nghiệm. Lợi ích với khung công tác Theo hướng từ khóa là bạn có thể dễ dàng kiểm soát các chức năng mà bạn muốn kiểm tra. Bạn có thể chỉ định các phương pháp kiểm tra chức năng của ứng dụng trong tệp excel. Do đó, chỉ những tên phương thức được chỉ định trong excel mới được kiểm tra.

đối số dòng lệnh trong mã ví dụ java

Ví dụ: để đăng nhập vào ứng dụng web, chúng ta có thể viết nhiều phương thức trong trường hợp thử nghiệm chính, trong đó mỗi trường hợp thử nghiệm sẽ kiểm tra một số chức năng nhất định. Để khởi tạo trình điều khiển trình duyệt, có thể có một phương pháp, để tìm trường tên người dùng và mật khẩu, có thể có phương pháp, để điều hướng đến một trang web có thể có một phương pháp khác, v.v.

Hãy xem đoạn mã dưới đây để hiểu khung công tác trông như thế nào. Các dòng được nhận xét trong đoạn mã dưới đây đóng vai trò giải thích nếu bạn không hiểu.

package KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver public class Actions {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigation () {driver .manage (). timeouts (). implicitWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' Shui ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' Shui ')} public static void click_Login () {driver.findElement (By.name ('login')). ​​Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Tìm chuyến bay: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

Như bạn có thể thấy, các chức năng khác nhau cần được kiểm tra có trong các phương thức riêng biệt đang chờ được gọi. Bây giờ, các phương thức này sẽ được gọi từ một Lớp khác, dựa trên sự hiện diện của tên phương thức trong tệp excel. Và tương tự, để đọc file excel, và gửi lại kết quả, tôi đã viết một Class khác. Cả hai đều được hiển thị bên dưới.

Đây là tệp lớp gọi các phương thức.

package KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Khai báo đường dẫn của tệp Excel với tên của tệp Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tại đây chúng ta đang chuyển đường dẫn Excel và SheetName làm đối số để kết nối với tệp Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Các giá trị được mã hóa cứng được sử dụng cho hàng & cột Excel hiện tại // Các giá trị được mã hóa cứng được sử dụng cho hàng Excel & cột bây giờ // Trong các chương sau, chúng tôi sẽ thay thế các giá trị được mã hóa cứng này bằng các varibales // Đây là vòng lặp để đọc các giá trị của cột 3 (Từ khóa Hành động) theo từng hàng cho (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

Và tệp lớp đọc các giá trị Excel là cái này.

package KeywordDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell public class ReadExcelData XSSFSheet ExcelWSheet riêng tư tĩnh XSSFWorkbook ExcelWBook riêng tĩnh XSSFCell Cell // Phương pháp này là đặt đường dẫn tệp và mở tệp Excel // Chuyển Excel Path và SheetName làm Đối số cho phương pháp này public static void setExcelFile (String Path, String SheetName) ném Ngoại lệ {FileInputStream ExcelFile = new FileInputStream (Đường dẫn) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Phương pháp này dùng để đọc dữ liệu thử nghiệm từ ô Excel // Trong phương pháp này, chúng ta đang truyền tham số / đối số khi Row Num và Col Num public static String getCellData (int RowNum, int ColNum) ném Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Bây giờ, hãy chuyển sang phần cuối cùng của blog khung Selenium này, nơi tôi sẽ chỉ cho bạn cách xây dựng khung kết hợp.

Khung kết hợp

Khung kết hợp là một kỹ thuật trong đó chúng tôi có thể sử dụng tốt nhất (các) khung công tác Theo hướng dữ liệu & Theo hướng từ khóa. Sử dụng các ví dụ được hiển thị ở trên trong blog này, chúng ta có thể xây dựng một khung kết hợp bằng cách lưu trữ các phương thức để thực thi trong tệp excel (cách tiếp cận theo hướng từ khóa) và chuyển các tên phương thức này đến Lớp phản chiếu Java (cách tiếp cận theo hướng dữ liệu) thay vì tạo Nếu khác vòng lặp trong lớp “DriverScript”.

Hãy xem lớp “DriverScript” đã sửa đổi trong đoạn mã bên dưới.Ở đây, thay vì sử dụng nhiều vòng lặp If / Else, cách tiếp cận theo hướng dữ liệu được sử dụng để đọc tên phương thức từ tệp excel.

package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// Đây là một đối tượng lớp, được khai báo là 'public static' // Để nó có thể được sử dụng bên ngoài phạm vi của phương thức main [] public static Actions actionKeywords public static String sActions // Đây là đối tượng lớp phản chiếu, được khai báo là 'public static' // Để nó có thể được sử dụng bên ngoài phạm vi của phương thức main [] public static Method method [] public static void main (String [] args) ném ngoại lệ {// Khai báo đường dẫn của tệp Excel với tên của tệp Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Ở đây chúng ta đang truyền đường dẫn Excel và SheetName để kết nối với tệp Excel // Phương pháp này đã được tạo trước đây ReadExcelData.setExcelFile (sPath, 'Sheet1') // Các giá trị được mã hóa cứng được sử dụng cho hàng & cột Excel hiện tại // Sau này, chúng ta sẽ sử dụng các giá trị được mã hóa cứng này hiệu quả hơn nhiều // Đây là vòng lặp để đọc các giá trị của hàng cột (Từ khoá Hành động) by row // Có nghĩa là vòng lặp này sẽ thực hiện tất cả các bước được đề cập cho trường hợp kiểm thử trong trang Các bước kiểm tra cho (int iRow = 1iRow<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

Để hiểu rõ hơn về khái niệm này về khung công tác Theo hướng dữ liệu, Theo hướng từ khóa & Hướng kết hợp, tôi yêu cầu bạn xem video dưới đây.

Selenium Framework sử dụng Java | Hướng dẫn sử dụng Selenium | Đào tạo Selenium trực tuyến

Tôi hy vọng blog này hữu ích với bạn và giúp bạn hiểu rõ ràng về khung công tác Selenium là gì, nó có lợi như thế nào và cách xây dựng cấu trúc mã của bạn bằng cách sử dụng 3 khung công tác Selenium này. Hãy theo dõi nhiều blog hơn trong loạt bài này.

Nếu bạn muốn tìm hiểu về Selenium và xây dựng sự nghiệp trong lĩnh vực thử nghiệm, hãy xem trực tuyến, tương tác của chúng tôi ở đây, đi kèm với hỗ trợ 24 * 7 để hướng dẫn bạn trong suốt thời gian học tập của bạn. Các khái niệm liên quan đến “Khung Selenium” có nội dung chuyên sâu trong khóa học của Edureka.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.