<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          建立數(shù)據(jù)驅(qū)動,關(guān)鍵字驅(qū)動和混合Selenium框架這些你了解嗎

          共 2455字,需瀏覽 5分鐘

           ·

          2020-11-05 16:23

          什么是Selenium框架?

          Selenium框架是一種代碼結(jié)構(gòu),用于簡化代碼維護(hù)和提高代碼可讀性。框架涉及將整個代碼分成較小的代碼段,以測試特定的功能。

          該代碼的結(jié)構(gòu)使得“數(shù)據(jù)集”與實際的“測試用例”分開,后者將測試Web應(yīng)用程序的功能。它也可以通過以下方式構(gòu)造:從外部應(yīng)用程序(例如.csv)調(diào)用(調(diào)用)需要執(zhí)行的測試用例。

          有許多框架,但是3個常用的Selenium框架是:

          • 數(shù)據(jù)驅(qū)動框架

          • 關(guān)鍵字驅(qū)動框架

          • 混合框架

          為什么我們需要一個Selenium框架??

          如果沒有合適的框架,將只有一個測試用例,其中包含了整個測試功能。可怕的是,這個單一的測試用例最多可以上升一百萬行代碼。因此,顯而易見,如此龐大的測試案例將很難閱讀。即使您以后想要修改任何功能,修改代碼也將很困難。


          由于框架的實施,將產(chǎn)生較小但多個代碼段,因此有許多好處。??

          Selenium?框架的好處

          • 增加代碼重用

          • 改進(jìn)的代碼可讀性

          • 更高的便攜性

          • 精簡腳本?保養(yǎng)

          既然您已經(jīng)了解了框架的基礎(chǔ)知識,那么讓我詳細(xì)解釋每個框架。?

          數(shù)據(jù)驅(qū)動框架

          Selenium中的數(shù)據(jù)驅(qū)動框架是一種將“數(shù)據(jù)集”與實際“測試用例”(代碼)分離的技術(shù)。該框架完全取決于輸入的測試數(shù)據(jù)。測試數(shù)據(jù)來自外部源,例如excel文件,.CSV文件或任何數(shù)據(jù)庫。

          由于測試用例與數(shù)據(jù)集是分開的,因此我們可以輕松修改特定功能的測試用例,而無需對代碼進(jìn)行大量更改。例如,如果您想修改用于登錄功能的代碼,則可以只進(jìn)行修改,而不必同時修改同一代碼中的任何其他相關(guān)部分。

          除此之外,您還可以輕松控制需要測試的數(shù)據(jù)量。您可以通過向excel文件(或其他來源)添加更多用戶名和密碼字段來輕松增加測試參數(shù)的數(shù)量。

          例如,如果我必須檢查登錄到網(wǎng)頁,那么我可以將用戶名和密碼憑據(jù)集保留在excel文件中,并將憑據(jù)傳遞給代碼以在單獨(dú)的Java類文件中在瀏覽器上執(zhí)行自動化。

          將Apache POI與Selenium WebDriver一起使用?

          WebDriver不直接支持讀取excel文件。因此,我們使用Apache POI??讀取/寫入任何Microsoft Office文檔。您可以從此處下載Apache POI(JAR文件集)根據(jù)您的要求下載zip文件或tar文件,并將它們與Selenium JAR集一起放置。

          TestNG數(shù)據(jù)提供程序將處理主要代碼和數(shù)據(jù)集之間的協(xié)調(diào),TestNG數(shù)據(jù)提供程序??是一個庫,它是Apache POI JAR文件的一部分。出于演示目的,我創(chuàng)建了一個名為“ LoginCredentials”的Excel文件,其中的用戶名和密碼已存儲在不同的列中。

          查看下面的代碼以了解測試用例。它是用于測試航班預(yù)訂應(yīng)用程序登錄功能的簡單代碼。

          package 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) throws InterruptedException{ System.setProperty("webdriver.chrome.driver", "C:UsersVardhanDownloadschromedriver.exe"); driver = new ChromeDriver();   driver.get("http://newtours.demoaut.com/");   driver.findElement(By.name("userName")).sendKeys(username); driver.findElement(By.name("password")).sendKeys(password); driver.findElement(By.name("login")).click();   Thread.sleep(5000);   Assert.assertTrue(driver.getTitle().matches("Find a Flight: Mercury Tours:"), "Invalid credentials"); System.out.println("Login successful"); }   @AfterMethod void ProgramTermination(){ driver.quit(); } @DataProvider(name="testdata") public Object[][] TestDataFeed() {   ReadExcelFile config = new ReadExcelFile("C:UsersVardhanworkspaceSeleniumLoginCredentials.xlsx");   int rows = config.getRowCount(0);   Object[][] credentials = new Object[rows][2]; for(int i=0;i { credentials[i][0] = config.getData(0, i, 0); credentials[i][1] = config.getData(0, i, 1); }   return credentials; }}

          如果從上面注意到,我們有一個名為“ TestDataFeed()”的方法。在這種方法中,我創(chuàng)建了另一個名為“ ReadExcelFile”的類的對象實例。在實例化該對象時,我已經(jīng)提供了包含數(shù)據(jù)的excel文件的路徑。我進(jìn)一步定義了一個for循環(huán),以從excel工作簿中檢索文本。

          但是,為了從給定的工作表編號,列編號和行編號讀取數(shù)據(jù),將對“ ReadExcelFile”類進(jìn)行調(diào)用。我的“ ReadExcelFile”的代碼如下。

          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 ReadExcelFile(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 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; }}

          首先請注意我導(dǎo)入的庫。我已經(jīng)導(dǎo)入了Apache POI XSSF庫,該庫用于讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入excel文件。在這里,我創(chuàng)建了一個構(gòu)造函數(shù)(相同方法的對象)以傳遞值:工作表編號,行編號和列編號。


          關(guān)鍵字驅(qū)動框架

          關(guān)鍵字驅(qū)動框架是一種技術(shù),其中要執(zhí)行的所有操作和指令均與實際測試用例分開編寫。它與Data Driven框架的相似之處在于,要執(zhí)行的操作再次存儲在Excel表格之類的外部文件中。

          我正在談?wù)摰牟僮鞑贿^是需要作為測試用例的一部分執(zhí)行的方法。關(guān)鍵字驅(qū)動框架的好處是您可以輕松控制要測試的功能。您可以在excel文件中指定測試應(yīng)用程序功能的方法。因此,將僅測試excel中指定的那些方法名稱。

          例如,對于登錄Web應(yīng)用程序,我們可以在主測試用例中編寫多種方法,其中每個測試用例都將測試某些功能。為了實例化瀏覽器驅(qū)動程序,可能有一種方法,找到用戶名和密碼字段,可能有方法,為了導(dǎo)航到網(wǎng)頁,可能有另一種方法,等等。

          看一下下面的代碼,以了解框架的外觀。如果您不理解,下面的代碼中注釋掉的行將作為解釋。

          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 navigate(){  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://newtours.demoaut.com"); }   public static void 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")).click(); } @Test public static void verify_login(){ String pageTitle = driver.getTitle(); Assert.assertEquals(pageTitle, "Find a Flight: Mercury Tours:"); }  public static void closeBrowser(){ driver.quit(); }}

          如您所見,需要測試的不同功能存在于等待調(diào)用的單獨(dú)方法中。現(xiàn)在,基于excel文件中方法名稱的存在,將從另一個類中調(diào)用這些方法。同樣,為了讀取excel文件并發(fā)送回結(jié)果,我編寫了另一個Class。它們都顯示在下面。

          調(diào)用方法的類文件就是這個。

          package KeywordDriven; public class DriverScript{ public static void main(String[] args) throws Exception  { //用Excel文件的名稱聲明Excel文件的路徑 String sPath = "C:UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx";  //在這里,我們傳遞Excel路徑和SheetName作為參數(shù)來連接Excel文件 ReadExcelData.setExcelFile(sPath, "Sheet1");  //硬編碼值目前用于Excel行和列//硬編碼值目前用于Excel行和列//在后面的章節(jié)中,我們將用varibales/替換這些硬編碼值,這是逐行讀取列3(Action關(guān)鍵字)的值的循環(huán) for (int iRow=1;iRow<=7;iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1);   //將Excel單元格的值與“Actions”類中的所有關(guān)鍵字進(jìn)行比較 if(sActions.equals("openBrowser")) { //如果excel單元格值為“openBrowser”,則執(zhí)行此操作//此處調(diào)用Action關(guān)鍵字以執(zhí)行操作 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; public class ReadExcelData{ private static XSSFSheet ExcelWSheet; private static XSSFWorkbook ExcelWBook; private static XSSFCell Cell; //此方法用于設(shè)置文件路徑并打開Excel文件//將Excel Path和SheetName作為參數(shù)傳遞給此方法 public static void setExcelFile(String Path,String SheetName) throws Exception { FileInputStream ExcelFile = new FileInputStream(Path); ExcelWBook = new XSSFWorkbook(ExcelFile); ExcelWSheet = ExcelWBook.getSheet(SheetName); }   //此方法是從Excel單元格中讀取測試數(shù)據(jù)//在這里,我們將參數(shù)/參數(shù)作為Row Num和Col Num傳遞 public static String getCellData(int RowNum, int ColNum) throws Exception{ Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum); String CellData = Cell.getStringCellValue(); return CellData; }}
          ????

          混合框架?

          混合框架是一種技術(shù),在這種技術(shù)中,我們可以充分利用數(shù)據(jù)驅(qū)動和關(guān)鍵字驅(qū)動的

          Selenium?框架。使用此文章中上面顯示的示例,我們可以通過將要執(zhí)行的方法存儲在excel文件中(關(guān)鍵字驅(qū)動方法)并將這些方法名稱傳遞給Java Reflection Class(數(shù)據(jù)驅(qū)動方法)來構(gòu)建混合框架,而不是創(chuàng)建??If /??DriverScript類中的/ Else循環(huán)。

          在下面的代碼片段中查看修改后的“ DriverScript”類。?在這里,不是使用多個If / Else循環(huán),而是使用數(shù)據(jù)驅(qū)動的方法從excel文件中讀取方法名稱。

          package HybridFramework; import java.lang.reflect.Method; public class DriverScriptJava{ //這是一個類對象,聲明為“public static” //以便它可以在main[]方法的范圍之外使用 public static Actions actionKeywords;   public static String sActions;  //這是反射類對象,聲明為“public static” //以便它可以在main[]方法的范圍之外使用 public static Method method[];   public static void main(String[] args) throws Exception { //用Excel文件的名稱聲明Excel文件的路徑 String sPath = "C:UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx"; //在這里,我們傳遞Excel路徑和SheetName來連接Excel文件//此方法是以前創(chuàng)建的 ReadExcelData.setExcelFile(sPath, "Sheet1"); //硬編碼值目前用于Excel行和列//稍后,我們將更有效地使用這些硬編碼值//這是逐行讀取列(Action關(guān)鍵字)值的循環(huán)//這意味著這個循環(huán)將執(zhí)行測試步驟表中為測試用例提到的所有步驟 for (int iRow=1;iRow<=7;iRow++) { sActions = ReadExcelData.getCellData(iRow, 1);//將創(chuàng)建一個名為“execute_Actions”的新獨(dú)立方法//你可以在下面的測試中找到這個方法//所以這條語句除了調(diào)用那段代碼來執(zhí)行 execute_Actions();  } } //此方法包含執(zhí)行某些操作的代碼//因為它是完全不同的邏輯集,只圍繞動作運(yùn)行,所以將它與主驅(qū)動程序腳本分開是有意義的//這是執(zhí)行測試步驟(操作)private static void execute_Actions() throws Exception {//在這里,我們將實例化類“Actions”的新對象 actionKeywords = new Actions(); //這將在其中加載類“Actions”的所有方法。//它就像一系列的方法,用這里的斷點(diǎn)做手表 method = actionKeywords.getClass().getMethods();  //這是一個循環(huán),將為Action關(guān)鍵字類中的操作數(shù)運(yùn)行//方法變量包含所有方法和方法.長度返回方法總數(shù) for(int i = 0;i {//現(xiàn)在將方法名與從excel接收的ActionKeyword值進(jìn)行比較  if(method[i].getName().equals(sActions)) { //如果找到匹配,它將執(zhí)行matched方法  method[i].invoke(actionKeywords);   //一旦執(zhí)行了任何方法,這個break語句將把流帶出for循環(huán)  break; } } }}
          我希望這個文章對您有用,并讓您清楚地了解什么是Selenium框架,它如何有益以及如何使用這3個Selenium框架構(gòu)建代碼結(jié)構(gòu)。請繼續(xù)關(guān)注本系列中的更多文章。


          您需要了解的有關(guān)Selenium等待方法
          如何在Selenium WebDriver中查找元素?(二)
          如何在Selenium WebDriver中查找元素?(一)
          python之函數(shù)基礎(chǔ)


          瀏覽 14
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色三级片在线啊不要 | 伊人18 | 国产女生被男生操网站 | 黑人大战亚洲女人网站 | 欧美天天澡天天爽日日a |