การสร้าง Data Driven, Keyword Driven & Hybrid Selenium Framework



บล็อกนี้จะอธิบายว่าเฟรมเวิร์กซีลีเนียมคืออะไรประโยชน์ของมันและวิธีการนำเฟรมเวิร์คที่ขับเคลื่อนด้วยข้อมูลคีย์เวิร์ดและไฮบริดไปใช้ในซีลีเนียม

ก่อนหน้า ในชุดนี้ทำให้คุณได้สัมผัสกับแนวคิดพื้นฐานในการทดสอบซีลีเนียมอย่างไรก็ตามในบล็อกนี้ฉันจะบอกวิธีใช้เฟรมเวิร์กซีลีเนียมเพื่อเพิ่มประสิทธิภาพโครงสร้างโค้ดของคุณและสิ่งนี้จะทำให้คุณเข้าใกล้ .

Selenium Framework คืออะไร?

เฟรมเวิร์กซีลีเนียมเป็นโครงสร้างโค้ดที่ทำให้การบำรุงรักษาโค้ดง่ายขึ้นและอ่านโค้ดได้ดีขึ้น เฟรมเวิร์กเกี่ยวข้องกับการแบ่งโค้ดทั้งหมดออกเป็นโค้ดชิ้นเล็ก ๆ ซึ่งทดสอบการทำงานเฉพาะ





รหัสมีโครงสร้างดังกล่าว 'ชุดข้อมูล' จะแยกออกจาก 'กรณีทดสอบ' จริงซึ่งจะทดสอบการทำงานของเว็บแอปพลิเคชัน นอกจากนี้ยังสามารถจัดโครงสร้างในลักษณะกรณีทดสอบที่ต้องดำเนินการเรียกว่า (เรียกใช้) จากแอปพลิเคชันภายนอก (เช่น. csv)

มีเฟรมเวิร์กจำนวนมากอยู่ที่นั่น แต่เฟรมเวิร์กซีลีเนียมที่ใช้กันทั่วไป 3 แบบ ได้แก่ :



กรอบเหล่านี้จะกล่าวถึงพร้อมกับการสาธิตในบล็อกนี้ แต่ก่อนที่จะดำเนินการต่อไปให้ฉันบอกคุณว่าทำไมจึงต้องมีเฟรมเวิร์กซีลีเนียมและคุณจะได้ประโยชน์อะไรจากการใช้งาน

ทำไมเราต้องมี Selenium framework?

หากไม่มีกรอบการทำงานจะมีกรณีทดสอบหนึ่งกรณีซึ่งจะประกอบไปด้วยฟังก์ชันการทดสอบทั้งหมด ส่วนที่น่ากลัวคือกรณีทดสอบเดียวนี้มีความสามารถในการเพิ่มรหัสได้ถึงล้านบรรทัด ดังนั้นจึงค่อนข้างชัดเจนว่ากรณีทดสอบที่ใหญ่มากจะอ่านยาก แม้ว่าคุณจะต้องการแก้ไขฟังก์ชันใด ๆ ในภายหลังคุณก็จะมีช่วงเวลาที่ยากลำบากในการแก้ไขโค้ด

เนื่องจากการใช้กรอบการทำงานจะส่งผลให้ชิ้นส่วนโค้ดมีขนาดเล็กลง แต่มีหลายชิ้นจึงมีประโยชน์มากมาย



ประโยชน์ของ Selenium framework

  • เพิ่มการใช้รหัสซ้ำ
  • ปรับปรุงการอ่านรหัส
  • การพกพาที่สูงขึ้น
  • สคริปต์ที่ลดลงซ่อมบำรุง

ตอนนี้คุณรู้พื้นฐานของเฟรมเวิร์กแล้วให้ฉันอธิบายรายละเอียดแต่ละเฟรม

กรอบการขับเคลื่อนข้อมูล

เฟรมเวิร์กที่ขับเคลื่อนด้วยข้อมูลในซีลีเนียมเป็นเทคนิคในการแยก 'ชุดข้อมูล' ออกจาก 'กรณีทดสอบ' จริง (รหัส) กรอบนี้ขึ้นอยู่กับข้อมูลการทดสอบอินพุตอย่างสมบูรณ์ ข้อมูลทดสอบถูกป้อนจากแหล่งภายนอกเช่นไฟล์ excel ไฟล์. CSV หรือฐานข้อมูลใด ๆ

กรอบข้อมูลที่ขับเคลื่อนด้วย - กรอบซีลีเนียม - edureka

เนื่องจากกรณีทดสอบแยกออกจากชุดข้อมูลเราจึงสามารถแก้ไขกรณีทดสอบของฟังก์ชันเฉพาะได้อย่างง่ายดายโดยไม่ต้องทำการเปลี่ยนแปลงรหัสของคุณ ตัวอย่างเช่นหากคุณต้องการแก้ไขรหัสสำหรับฟังก์ชันการเข้าสู่ระบบคุณสามารถแก้ไขได้เพียงแค่นั้นแทนที่จะต้องแก้ไขส่วนที่ขึ้นต่ออื่น ๆ ในรหัสเดียวกัน

นอกจากนี้คุณยังสามารถควบคุมปริมาณข้อมูลที่ต้องทดสอบได้อย่างง่ายดาย คุณสามารถเพิ่มจำนวนพารามิเตอร์การทดสอบได้อย่างง่ายดายโดยการเพิ่มฟิลด์ชื่อผู้ใช้และรหัสผ่านลงในไฟล์ excel (หรือแหล่งข้อมูลอื่น ๆ )

ตัวอย่างเช่นหากฉันต้องตรวจสอบการเข้าสู่ระบบไปยังหน้าเว็บฉันสามารถเก็บชุดข้อมูลรับรองชื่อผู้ใช้และรหัสผ่านไว้ในไฟล์ excel และส่งข้อมูลรับรองไปยังรหัสเพื่อดำเนินการอัตโนมัติบนเบราว์เซอร์ในไฟล์คลาส Java ที่แยกต่างหาก

การใช้ Apache POI กับ Selenium WebDriver

WebDriver ไม่สนับสนุนการอ่านไฟล์ excel โดยตรง ดังนั้นเราจึงใช้ Apache POI สำหรับการอ่าน / เขียนเอกสาร Microsoft office คุณสามารถดาวน์โหลด Apache POI (ชุดไฟล์ JAR) จากไฟล์ ที่นี่ . ดาวน์โหลดไฟล์ zip หรือไฟล์ tar ตามความต้องการของคุณและวางไว้พร้อมกับชุดของ Selenium JAR

การประสานงานระหว่างรหัสหลักและชุดข้อมูลจะได้รับการดูแลโดย ผู้ให้บริการข้อมูล TestNG ซึ่งเป็นไลบรารีที่มาเป็นส่วนหนึ่งของไฟล์ Apache POI JAR เพื่อจุดประสงค์ในการสาธิตฉันได้สร้างไฟล์ excel ชื่อ“ LoginCredentials” ซึ่งชื่อผู้ใช้และรหัสผ่านถูกเก็บไว้ในคอลัมน์ต่างๆ

ดูรหัสด้านล่างเพื่อทำความเข้าใจกรณีทดสอบ เป็นรหัสง่ายๆสำหรับทดสอบฟังก์ชันการเข้าสู่ระบบของแอปพลิเคชันการจองเที่ยวบิน

package DataDriven import org.openqa.selenium โดย 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 คลาสสาธารณะ DDTExcel {ไดรเวอร์ ChromeDriver @Test (dataProvider = 'testdata') โมฆะสาธารณะ DemoProject (ชื่อผู้ใช้ String, รหัสผ่านสตริง) พ่น InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') ไดรเวอร์ = ใหม่ ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (ชื่อผู้ใช้) driver.findElement (By.name ('รหัสผ่าน' )). sendKeys (รหัสผ่าน) driver.findElement (By.name ('เข้าสู่ระบบ')) คลิก () Thread.sleep (5000) Assert.assertTrue (driver.getTitle () ตรงกับ ('ค้นหาเที่ยวบิน: ทัวร์ปรอท: '),' ข้อมูลรับรองไม่ถูกต้อง ') System.out.println (' เข้าสู่ระบบสำเร็จ ')} @AfterMethod เป็นโมฆะ ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') Public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int แถว = config.getRowCount (0) Object [] [] หนังสือรับรอง = วัตถุใหม่ [แถว] [2] สำหรับ (int i = 0i

หากคุณสังเกตจากด้านบนเรามีเมธอดชื่อ“ TestDataFeed ()” ด้วยวิธีนี้ฉันได้สร้างอินสแตนซ์วัตถุของคลาสอื่นชื่อ“ ReadExcelFile” ในขณะที่สร้างอินสแตนซ์วัตถุนี้ฉันได้ป้อนเส้นทางของไฟล์ excel ที่มีข้อมูล ฉันได้กำหนด for loop เพิ่มเติมเพื่อดึงข้อความจากสมุดงาน excel

แต่สำหรับการอ่านข้อมูลจากหมายเลขแผ่นงานหมายเลขคอลัมน์และหมายเลขแถวจะมีการเรียกไปยังคลาส 'ReadExcelFile' รหัส“ ReadExcelFile” ของฉันอยู่ด้านล่าง

แพ็กเกจ DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook คลาสสาธารณะ ReadExcelFile {XSSFWorkbook wb XSSFSheet ชีตสาธารณะ ReadExcelFile 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 String 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}}

ก่อนอื่นให้สังเกตไลบรารีที่ฉันนำเข้า ฉันได้นำเข้า Apache POI XSSF ไลบรารีที่ใช้ในการอ่าน / เขียนข้อมูลไปยังไฟล์ excel ที่นี่ฉันได้สร้างตัวสร้าง (วัตถุของวิธีการเดียวกัน) เพื่อส่งผ่านค่า: หมายเลขแผ่นงานหมายเลขแถวและหมายเลขคอลัมน์ เพื่อให้เข้าใจกรอบนี้ดีขึ้นฉันขอให้คุณดูวิดีโอด้านล่างซึ่งฉันได้อธิบายสิ่งนี้อย่างมีแบบแผน

กรอบการขับเคลื่อนข้อมูลใน Selenium WebDriver | การสอนซีลีเนียม

ตอนนี้เรามาดูกรอบการทำงานนั่นคือกรอบงานที่ขับเคลื่อนด้วยคำหลัก

Keyword Driven Framework

Keyword Driven framework เป็นเทคนิคที่การดำเนินการและคำแนะนำทั้งหมดที่ต้องดำเนินการเขียนแยกจากกรณีทดสอบจริง ความคล้ายคลึงกันที่มีกับ Data Driven framework คือการดำเนินการที่ต้องดำเนินการจะถูกเก็บไว้ในไฟล์ภายนอกเช่นแผ่นงาน Excel อีกครั้ง

การดำเนินการที่ฉันกำลังพูดถึงไม่ใช่แค่วิธีการที่จำเป็นต้องดำเนินการโดยเป็นส่วนหนึ่งของกรณีทดสอบ ประโยชน์ของ Keyword Driven framework คือคุณสามารถควบคุมฟังก์ชันที่คุณต้องการทดสอบได้อย่างง่ายดาย คุณสามารถระบุวิธีการทดสอบการทำงานของแอปพลิเคชันในไฟล์ excel ดังนั้นจะมีการทดสอบเฉพาะชื่อเมธอดที่ระบุไว้ใน excel

สอนทำเว็บทับทิมบนราง

ตัวอย่างเช่นสำหรับการลงชื่อเข้าใช้เว็บแอปพลิเคชันเราสามารถเขียนหลายวิธีในกรณีทดสอบหลักซึ่งแต่ละกรณีการทดสอบจะทดสอบการทำงานบางอย่าง สำหรับการสร้างอินสแตนซ์ไดรเวอร์ของเบราว์เซอร์อาจมีวิธีการหนึ่งในการค้นหาฟิลด์ชื่อผู้ใช้และรหัสผ่านอาจมีวิธีการสำหรับการนำทางไปยังหน้าเว็บอาจมีวิธีอื่นเป็นต้น

ลองดูโค้ดด้านล่างเพื่อทำความเข้าใจว่าเฟรมเวิร์คมีลักษณะอย่างไร บรรทัดที่แสดงความคิดเห็นในโค้ดด้านล่างนี้เป็นคำอธิบายหากคุณไม่เข้าใจ

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 การดำเนินการคลาสสาธารณะ {ไดร์เวอร์ WebDriver แบบคงที่สาธารณะ public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigation () {driver .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} โมฆะแบบคงที่ input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('login')) คลิก ()} @Test public static void verification_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} โมฆะคงที่สาธารณะ closeBrowser () {driver.quit ()}}

อย่างที่คุณเห็นฟังก์ชันต่าง ๆ ที่ต้องทดสอบมีอยู่ในวิธีการแยกต่างหากที่รอการเรียกใช้ ตอนนี้เมธอดเหล่านี้จะถูกเรียกจากคลาสอื่นตามการมีอยู่ของชื่อเมธอดในไฟล์ excel และในทำนองเดียวกันในการอ่านไฟล์ excel และส่งผลลัพธ์กลับมาฉันได้เขียนคลาสอื่น ทั้งสองแสดงอยู่ด้านล่าง

ไฟล์คลาสที่เรียกใช้เมธอดคือนี่

package KeywordDriven คลาสสาธารณะ DriverScript {public static void main (String [] args) พ่น Exception {// ประกาศเส้นทางของไฟล์ Excel ด้วยชื่อของไฟล์ Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // ที่นี่ เรากำลังส่งเส้นทาง Excel และ SheetName เป็นอาร์กิวเมนต์เพื่อเชื่อมต่อกับไฟล์ Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // ค่าฮาร์ดโค้ดใช้สำหรับแถวและคอลัมน์ของ Excel ในตอนนี้ // ค่าฮาร์ดโค้ดใช้สำหรับแถว Excel & คอลัมน์สำหรับตอนนี้ // ในบทต่อ ๆ ไปเราจะแทนที่ค่าฮาร์ดโค้ดเหล่านี้ด้วยตัวแปร // นี่คือลูปสำหรับอ่านค่าของคอลัมน์ 3 (Action Keyword) ทีละแถวสำหรับ (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() } } } } 

และไฟล์คลาสที่อ่านค่า Excel คือนี่

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 คลาสสาธารณะ ReadExcelData {private static XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell // วิธีนี้คือการตั้งค่าเส้นทางไฟล์และเพื่อเปิดไฟล์ Excel // ส่ง Excel Path และ SheetName เป็นอาร์กิวเมนต์ไปยังวิธีนี้ public static void setExcelFile (String Path, String SheetName) พ่น ข้อยกเว้น {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // วิธีนี้คือการอ่านข้อมูลทดสอบจากเซลล์ Excel // ในการนี้เรากำลังส่งพารามิเตอร์ / อาร์กิวเมนต์ เป็น Row Num และ Col Num public static String getCellData (int RowNum, int ColNum) พ่น Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

ตอนนี้เรามาดูส่วนสุดท้ายของบล็อก Selenium framework ซึ่งผมจะแสดงวิธีสร้างกรอบงานแบบไฮบริด

กรอบงานไฮบริด

เฟรมเวิร์กแบบไฮบริดเป็นเทคนิคที่เราสามารถใช้ประโยชน์สูงสุดจากทั้ง Data Driven & Keyword Driven Selenium framework (s) จากตัวอย่างที่แสดงด้านบนในบล็อกนี้เราสามารถสร้างเฟรมเวิร์กแบบไฮบริดโดยการจัดเก็บวิธีการดำเนินการในไฟล์ excel (วิธีการขับเคลื่อนด้วยคำหลัก) และส่งชื่อวิธีการเหล่านี้ไปยัง คลาส Java Reflection (data driven approach) แทนการสร้างไฟล์ ถ้า / อื่น วนซ้ำในคลาส“ DriverScript”

ดูคลาส 'DriverScript' ที่ปรับเปลี่ยนแล้วในข้อมูลโค้ดด้านล่างที่นี่แทนที่จะใช้หลายลูป If / Else วิธีการขับเคลื่อนด้วยข้อมูลจะใช้เพื่ออ่านชื่อเมธอดจากไฟล์ excel

แพคเกจ HybridFramework นำเข้า java.lang.reflect.Method คลาสสาธารณะ DriverScriptJava {// นี่คือคลาสอ็อบเจ็กต์ที่ประกาศเป็น 'public static' // เพื่อให้สามารถใช้นอกขอบเขตของ main [] method public static Actions actionKeywords public static สตริง sActions // นี่คืออ็อบเจ็กต์คลาสการสะท้อนที่ประกาศเป็น 'public static' // ดังนั้นจึงสามารถใช้นอกขอบเขตของ main [] method public static Method method [] public static void main (String [] args) จะพ่นข้อยกเว้น {// การประกาศเส้นทางของไฟล์ Excel ด้วยชื่อของไฟล์ Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // ที่นี่เรากำลังส่งเส้นทาง Excel และ SheetName เพื่อเชื่อมต่อกับไฟล์ Excel // วิธีนี้ ถูกสร้างขึ้นก่อนหน้านี้ ReadExcelData.setExcelFile (sPath, 'Sheet1') // ค่าฮาร์ดโค้ดถูกใช้สำหรับแถวและคอลัมน์ของ Excel ในตอนนี้ // หลังจากนั้นเราจะใช้ค่าฮาร์ดโค้ดเหล่านี้อย่างมีประสิทธิภาพมากขึ้น // นี่คือลูปสำหรับการอ่าน ค่าของแถวคอลัมน์ (Action Keyword) ตามแถว // หมายความว่าลูปนี้จะดำเนินการตามขั้นตอนทั้งหมดที่กล่าวถึงสำหรับกรณีทดสอบในแผ่นงานขั้นตอนการทดสอบสำหรับ (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

เพื่อให้เข้าใจแนวคิดของ Data Driven, Keyword Driven & Hybrid Driven framework ได้ดีขึ้นผมขอให้คุณดูวิดีโอด้านล่างนี้

Selenium Framework โดยใช้ Java | บทช่วยสอนซีลีเนียม | การฝึกอบรมซีลีเนียมออนไลน์

ฉันหวังว่าบล็อกนี้จะเป็นประโยชน์สำหรับคุณและช่วยให้คุณเข้าใจอย่างชัดเจนว่าเฟรมเวิร์กซีลีเนียมคืออะไรมีประโยชน์อย่างไรและจะสร้างโครงสร้างโค้ดของคุณโดยใช้เฟรมเวิร์กซีลีเนียมทั้ง 3 นี้ได้อย่างไร คอยติดตามบล็อกอื่น ๆ ในซีรีส์นี้

หากคุณต้องการเรียนรู้ซีลีเนียมและสร้างอาชีพในโดเมนการทดสอบลองดูแบบโต้ตอบสดออนไลน์ของเรา ที่นี่มาพร้อมกับการสนับสนุน 24 * 7 เพื่อแนะนำคุณตลอดระยะเวลาการเรียนรู้ของคุณ แนวคิดที่เกี่ยวข้องกับ“ Selenium Framework” มีเนื้อหาครอบคลุมเชิงลึกในหลักสูตรของ Edureka

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป