自動化腳本初寫之際一定是只求完成功能測試,頁面by.id、by.name、by.xpath滿篇飛。業(yè)務邏輯代碼重復率也是越來越高。慢慢的寫著寫著開始重構(gòu),開始封裝一些方法。代碼量好一些的人會在代碼開始寫之前開始預留一些接口來處理可以預見的一些功能擴展。當代碼封裝好咯,會發(fā)現(xiàn)頁面元素和頁面邏輯是雜糅在一起頁面更改一個按鈕就要去代碼里面找到按鈕做相應的更改。那么能不能把頁面元素和頁面邏輯分離開來。當頁面更改我就只改page類。邏輯更改就只改logic類。那么久引出了這篇文章的主題:Page-Object設計模式
我把我以前寫的功能代碼翻譯成Page-Object模式用了大概一個星期。有兩點寫在前面希望對后來者有多幫助
1、 page類元素可以是webelement或者By類型
使用方式是:
@FindBy(id=“kw”)
WebElement baiduinput;
By baidubtn=By.id(“su”);
2、 page類一定要提前初始化不然會報錯:不能初始化page類
初始化page類不能放在junit的setup()方法、TestNG的beforemorth()
我是放在每個case里面的
我的Page-Object模式是三個沒用接口的主要類,test類、page類、logic類??疵志椭烂總€類分別放的是什么代碼,下面貼一下代碼
Page類:
//重置查詢
@FindBy(id="aReset" )
WebElement aReset;
//查找人員
By serachpsnradio=By.cssSelector("div#divSelSearchType span");
//查找單位
By serachunitradio=By.cssSelector("div#divSelSearchType span");
//查看保存的查詢
@FindBy(id="aViewSaved" )
WebElement seesaveconditions;
//查詢指標彈框
@FindBy(id="dlgSelectItem" )
WebElement searchdlg;
//開始查詢
@FindBy(id="btnSearch" )
WebElement startsearch;
//保存條件
@FindBy(id="btnSave" )
WebElement saveconditions;
//保存條件彈框input
@FindBy(id="txtConditionName" )
WebElement saveconditiondlginput;
//添加查詢條件 +
@FindBy(id="liAddSearch" )
WebElement addconditions;
//添加查詢條件 imggroup
By addconditiondlgitemgroup=By.cssSelector("div#dlgSelectItem div#tree_selectItem.tv div.tv-tn span");
//添加查詢條件 imggroup
By addconditiondlgimggroup=By.cssSelector("div#dlgSelectItem div#tree_selectItem.tv div.tv-tn img");
//添加查詢條件 itemnamespangroup
By addconditiondlgresultnamespangroup=By.cssSelector("div.tv-chi div.tv-tn span");
//添加查詢條件 勾選第二個復選框
By addconditionsitemresult=By.cssSelector("div.spanCode span#lic_0.codeDiv span input");
Logic類:
static AdvanceSearchPageWebElement pagetemp=PageFactory.initElements(ReturnDriver.driver,AdvanceSearchPageWebElement.class);
static BaseFunLib basefunlib=new BaseFunLib();
/*
* 函數(shù)功能:用戶選擇是查找人員 還是查找單位的功能函數(shù) 1、查找人員 2、查找單位
*/
public static void SelectSerachWay(String WayID,String AdvanceUrl) {
ReturnDriver.driver.get(AdvanceUrl);
WebElementList.SureWebElementByAttribute(
pagetemp.serachpsnradio, "maindbtype",
WayID);
}
/*
* 函數(shù)功能:完成查詢條件的配置
*
* 1、點擊查找人員 2、點擊添加條件的 “+” 3、點擊查詢指標彈出框的 “+” 4、點擊性別 5、點擊確定
* 6、勾選查詢結(jié)果的第二個input復選框 比如:勾選性別=女的input
*/
public static void SerachSelect(String AdvanceUrl,String ItemName,String MainName) {
SelectSerachWay("1",AdvanceUrl);
pagetemp.addconditions.click();
doubleclickmainname(pagetemp.addconditiondlgitemgroup,MainName);
WebElementList.SureWebElementByText(
pagetemp.addconditiondlgresultnamespangroup,ItemName);
// 勾選性別=女
basefunlib.ClickSurebtn();
WebElementList.SureWebElementByAttribute(pagetemp.addconditionsitemresult,
"codeitemid", "2");
}
/*
* 函數(shù)功能:保存查詢條件
*
* 1、調(diào)用函數(shù) SerachSelect 完成查詢條件的配置 2、點擊開始查詢按鈕 3、點擊保存條件按鈕 4、輸入條件名稱 5、點擊確定
*/
public static void saveserachterm(String serachName,String AdvanceUrl,String ItemName,String MainName) {
SerachSelect(AdvanceUrl,ItemName,MainName);
pagetemp.startsearch.click();
pagetemp.saveconditions.click();
basefunlib.sleep(1);
pagetemp.saveconditiondlginput.sendKeys(
serachName);
basefunlib.ClickSurebtn();
}
//double click
public static void doubleclickmainname(By locate,String mainname) {
List<WebElement> webelementlist = ReturnDriver.driver
.findElements(locate);
for (WebElement webelementID : webelementlist) {
test類:
static BaseFunLib basefunlib=new BaseFunLib();
//@Parameters({ "ProjectID", "ProjectName" })
@BeforeMethod
public void beforeTestMethod() {
ReturnDriver.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
/*
* 1、選擇查找人員 2、點擊主頁的條件添加 “+”
*
* 驗證是否彈出查詢指標彈出框
*/
@Test (dataProvider = "AdvanceSerach",dataProviderClass=StaticProvider.class)
public void testserachPSN(String PID,String PName,String UserName,String MainName,String ItemName,String ItemResult,String B01tName) {
AdvanceSearchPageWebElement pagetemp=PageFactory.initElements(ReturnDriver.driver,AdvanceSearchPageWebElement.class);
//初始化用列
loginclass.login(PID,PName,UserName);
GetTestUrlByXmlParameter GetUrlTool=new GetTestUrlByXmlParameter(PID,PName);
String AdvanceUrl=GetUrlTool.GetAdvanceSerachUrl();
AdvanceSearchLogicMethod.SelectSerachWay("1",AdvanceUrl);
pagetemp.addconditions.click();
Assert.assertTrue(pagetemp.searchdlg.getText().contains(MainName));
}
/*
* 1、保存查詢條件 2、點擊 “查看保存的查詢” 3、刪除剛剛保存的查詢條件 驗證彈出框的text是否包含剛剛保存的條件名稱
*/
@Test (dataProvider = "AdvanceSerach",dataProviderClass=StaticProvider.class)
public void testserachBysex(String PID,String PName,String UserName,String MainName,String ItemName,String ItemResult,String B01tName) {
AdvanceSearchPageWebElement pagetemp=PageFactory.initElements(ReturnDriver.driver,AdvanceSearchPageWebElement.class);
//初始化用列
loginclass.login(PID,PName,UserName);
GetTestUrlByXmlParameter GetUrlTool=new GetTestUrlByXmlParameter(PID,PName);
String AdvanceUrl=GetUrlTool.GetAdvanceSerachUrl();
String AdvanceSerachName=ItemName + "=" + ItemResult+ System.currentTimeMillis();
AdvanceSearchLogicMethod.saveserachterm(AdvanceSerachName,AdvanceUrl,ItemName,MainName);
pagetemp.seesaveconditions.click();
Assert.assertTrue(pagetemp.seeconditionsdlg.getText()
.contains(AdvanceSerachName));
basefunlib.Clickdeletelink();
}