WebDriver實戰(zhàn)之Page-Object設計模式

自動化腳本初寫之際一定是只求完成功能測試,頁面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();

    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,839評論 18 399
  • 一陣冷戰(zhàn)開始這次寫作。不是我失敗才寫,是收到各種打擊,躲到這個角落,被逼的,因為還總是沉浸在心中的那個理想世界,當...
    夜月神閱讀 253評論 0 1
  • 現(xiàn)在,大學生越來越少,學習也越來越苦,我們都開始抱怨讀書苦,可是媽媽老給我說這句話:‘‘孩子,不要抱怨讀書苦,...
    加油妹妹閱讀 341評論 1 1
  • 俗有云:‘民以食為先,食以湯為先’。湯,可以滋潤人的身體、可加強身體免疫力補、充營養(yǎng)和水份、令人易於吸收、效果使人...
    井岡工社閱讀 491評論 0 0

友情鏈接更多精彩內(nèi)容