selenium java po模式_selenium + java po模式
po模式大概介紹,大家也可以自己百度看看
Page Object模式主要是將每個頁面設計為一個類class,這個類包含頁面中需要測試的元素(按鈕、輸入框、URL、標題等)和實際操作方法,這樣在寫測試用例時可以通過調用頁面類的方法和屬性來獲取頁面元素和操作元素,這樣優點是避免當頁面元素的ID或位置改變時需要更改測試用例代碼的情況。當頁面元組定位發生改變時只要通過更改頁面類的屬性即可。
框架目錄結構
loginPage.java
package com.lilysilk.page;
import org.apache.poi.util.SuppressForbidden;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/**
* 定位語句與測試代碼封裝
* */
public class loginPage {
//登錄頁面
@FindBy(className="touXiang")
private WebElement uloginPage;
//用戶名輸入框
@FindBy(xpath="//div[@class='userLogin']/div[1]/input[@id='email']")
private WebElement uName;
//密碼輸入框
@FindBy(xpath="//div[@class='userLogin']/div[2]/input[@id='password']")
private WebElement uPwd;
//登錄按鈕
@FindBy(id="loginButton")
private WebElement loginBtn;
//點擊跳轉登錄頁面
public void goLoginPage() {
uloginPage.click();
}
//輸入用戶名
public void loginName(String username) {
System.out.println(username);
uName.clear();
uName.sendKeys(username);
}
//輸入密碼
public void loginPwd(String password) {
System.out.println(password);
uPwd.clear();
uPwd.sendKeys(password);
}
//點擊登錄
public void loginBtn() {
loginBtn.click();
}
}
case層即處理層
loginLilysilk_Po.java
package com.lilysilk.testcase;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import com.lilysilk.page.loginPage;
import com.lilysilk.util.ExcelUtil;
public class loginLilysilk_Po {
public static WebDriver driver;
@Test
public void loginlily() throws Exception{
//定義測試用例路徑
String excelPath="E:\\javaDemo\\testProjectPo\\src\\com\\lilysilk\\data\\lilysilk.xlsx";
//讀取測試用例sheet頁
ExcelUtil.setExcelFile(excelPath,"login");
//打開瀏覽器
String BrowserName=ExcelUtil.getCellData(1,4);
//修改瀏覽器語言
ChromeOptions op=new ChromeOptions();
op.addArguments("--lang=en-US");
//equals比較時,要比較大小寫是否相同,equalsIgnoreCase,忽略了大小寫,ignore就是忽略的意思
if(BrowserName.equalsIgnoreCase("chrome")){
//初始化瀏覽器實例
driver=new ChromeDriver(op);
}else {
driver=new FirefoxDriver(op);
}
//瀏覽器最大化
driver.manage().window().maximize();
//打開網址
driver.get(ExcelUtil.getCellData(2, 4));
//初始化page頁面(注意:要放在打開瀏覽器之后)
loginPage loginPage=PageFactory.initElements(driver, loginPage.class);
loginPage.goLoginPage();
loginPage.loginName("112233@qq.com");
loginPage.loginPwd("112233@qq.com");
loginPage.loginBtn();
}
@BeforeMethod
public static void beforeMethod(){
}
@AfterMethod
public static void afterMethod(){
driver.close();
}
}
工具類
ExcelUtil.java
package com.lilysilk.util;
import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
*
*@Comments : 導入導出Excel工具類
*此類事實現操作指定的excel文件中的指定sheet頁、
*讀取指定的單元格內容、獲取sheet中最后一行的行號的功能
*
*
**/
public class ExcelUtil {
private static XSSFSheet ExcelWSheet;
private static XSSFWorkbook ExcelWBook;//excel文件對象
private static XSSFCell ExcelCell;//單元格對象
//舍得需要操作的excel的文件路徑和sheet名稱
//在讀,寫excel文件時,均需先調用此方法,設定要操作的excel的路徑和sheet名稱
public static void setExcelFile(String Path,String SheetName) {
FileInputStream ExcelFile;
try {
//實例化excel文件的FileInputStream對象
ExcelFile=new FileInputStream(Path);
//實例化EXCEL文件的execlWXSSFWorkbook對象
ExcelWBook =new XSSFWorkbook(ExcelFile);
//實例化 XSSFCell 對象,指定excel文件中的sheet名稱,后續用于sheet中行、列和單元格的操作
ExcelWSheet=ExcelWBook.getSheet(SheetName);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param rowNum行 colNum列
**/
//讀取excel文件中指定的單元格的函數,此函數只支持擴展名為.xlsx的excel文件
public static String getCellData(int rowNum,int colNum)throws Exception {
try {
//通過函數參數知道單元格的行號與列號,獲取指定的單元格對象
ExcelCell=ExcelWSheet.getRow(rowNum).getCell(colNum);
//如果單元格的內容為字符串類型,則使用getStringCellValue方法來獲取單元格內容
//如果單元格的內容為數字類型, 則使用getNumericCellValue方法來獲取單元格內容
String CellData =ExcelCell.getCellType()==XSSFCell.CELL_TYPE_STRING?ExcelCell.getStringCellValue()+"":String.valueOf(Math.round(ExcelCell.getNumericCellValue()));
return CellData;
}
catch(Exception e){
e.printStackTrace();
//讀取遇到異常,則返回空字符串
return "錯了";
}
}
//獲取excel文件的最后一行的行號
public static int getLastRowNum() {
//函數返回sheet的最后一行行號
return ExcelWSheet.getLastRowNum();
}
}
data層即數據層
遇到的問題:
問題1:org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)
像這個報錯就是所用的XSSF是支持excel2007版本以上的,支持格式為xlsx,如果想要支持2003版本的xls,需要將XSSF換成HSSF的問題2:部分jar包沒有,需要導入,按照報錯內容導入jar包就好
總結
以上是生活随笔為你收集整理的selenium java po模式_selenium + java po模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机基础知识ip地址,计算机基础知识练
- 下一篇: usb声卡驱动_iCON ProDriv