WebDriver實(shí)戰(zhàn)之Page-Object設(shè)計(jì)模式

自動(dòng)化腳本初寫之際一定是只求完成功能測(cè)試,頁(yè)面by.id卦停、by.name、by.xpath滿篇飛恼蓬。業(yè)務(wù)邏輯代碼重復(fù)率也是越來(lái)越高惊完。慢慢的寫著寫著開始重構(gòu),開始封裝一些方法处硬。代碼量好一些的人會(huì)在代碼開始寫之前開始預(yù)留一些接口來(lái)處理可以預(yù)見的一些功能擴(kuò)展小槐。當(dāng)代碼封裝好咯,會(huì)發(fā)現(xiàn)頁(yè)面元素和頁(yè)面邏輯是雜糅在一起頁(yè)面更改一個(gè)按鈕就要去代碼里面找到按鈕做相應(yīng)的更改荷辕。那么能不能把頁(yè)面元素和頁(yè)面邏輯分離開來(lái)凿跳。當(dāng)頁(yè)面更改我就只改page類。邏輯更改就只改logic類疮方。那么久引出了這篇文章的主題:Page-Object設(shè)計(jì)模式
我把我以前寫的功能代碼翻譯成Page-Object模式用了大概一個(gè)星期控嗜。有兩點(diǎn)寫在前面希望對(duì)后來(lái)者有多幫助
1、 page類元素可以是webelement或者By類型
使用方式是:

@FindBy(id=“kw”)
            WebElement baiduinput骡显;
            By baidubtn=By.id(“su”);

2疆栏、 page類一定要提前初始化不然會(huì)報(bào)錯(cuò):不能初始化page類
初始化page類不能放在junit的setup()方法、TestNG的beforemorth()
我是放在每個(gè)case里面的
我的Page-Object模式是三個(gè)沒用接口的主要類蟆盐,test類承边、page類、logic類石挂〔┲看名字就知道每個(gè)類分別放的是什么代碼,下面貼一下代碼
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;
   
    //查詢指標(biāo)彈框
     @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");
    
    //添加查詢條件  勾選第二個(gè)復(fù)選框
     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蛔糯、點(diǎn)擊查找人員 2、點(diǎn)擊添加條件的 “+” 3窖式、點(diǎn)擊查詢指標(biāo)彈出框的 “+” 4蚁飒、點(diǎn)擊性別 5、點(diǎn)擊確定
     * 6萝喘、勾選查詢結(jié)果的第二個(gè)input復(fù)選框 比如:勾選性別=女的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、點(diǎn)擊開始查詢按鈕 3阁簸、點(diǎn)擊保存條件按鈕 4爬早、輸入條件名稱 5、點(diǎn)擊確定
     */
    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筛严、點(diǎn)擊主頁(yè)的條件添加 “+”
     * 
     * 驗(yàn)證是否彈出查詢指標(biāo)彈出框
     */
    @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饶米、點(diǎn)擊 “查看保存的查詢” 3桨啃、刪除剛剛保存的查詢條件 驗(yàn)證彈出框的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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市檬输,隨后出現(xiàn)的幾起案子照瘾,更是在濱河造成了極大的恐慌,老刑警劉巖褪猛,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件网杆,死亡現(xiàn)場(chǎng)離奇詭異羹饰,居然都是意外死亡伊滋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門队秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笑旺,“玉大人,你說(shuō)我怎么就攤上這事馍资⊥仓鳎” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸟蟹,是天一觀的道長(zhǎng)乌妙。 經(jīng)常有香客問我,道長(zhǎng)建钥,這世上最難降的妖魔是什么藤韵? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮熊经,結(jié)果婚禮上泽艘,老公的妹妹穿的比我還像新娘欲险。我一直安慰自己,他們只是感情好匹涮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布天试。 她就那樣靜靜地躺著,像睡著了一般然低。 火紅的嫁衣襯著肌膚如雪喜每。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天雳攘,我揣著相機(jī)與錄音灼卢,去河邊找鬼。 笑死来农,一個(gè)胖子當(dāng)著我的面吹牛鞋真,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沃于,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涩咖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了繁莹?” 一聲冷哼從身側(cè)響起檩互,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咨演,沒想到半個(gè)月后闸昨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄风,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年饵较,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遭赂。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡循诉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撇他,到底是詐尸還是另有隱情茄猫,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布困肩,位于F島的核電站划纽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锌畸。R本人自食惡果不足惜勇劣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹋绽。 院中可真熱鬧芭毙,春花似錦筋蓖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至侈百,卻和暖如春瓮下,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钝域。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工讽坏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人例证。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓路呜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親织咧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胀葱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)笙蒙,斷路器抵屿,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法捅位,內(nèi)部類的語(yǔ)法轧葛,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法艇搀,線程的語(yǔ)...
    子非魚_t_閱讀 31,625評(píng)論 18 399
  • 一陣?yán)鋺?zhàn)開始這次寫作尿扯。不是我失敗才寫,是收到各種打擊中符,躲到這個(gè)角落姜胖,被逼的,因?yàn)檫€總是沉浸在心中的那個(gè)理想世界淀散,當(dāng)...
    夜月神閱讀 178評(píng)論 0 1
  • 現(xiàn)在亚再,大學(xué)生越來(lái)越少郭膛,學(xué)習(xí)也越來(lái)越苦,我們都開始抱怨讀書苦氛悬,可是媽媽老給我說(shuō)這句話:‘‘孩子则剃,不要抱怨讀書苦耘柱,...
    加油妹妹閱讀 260評(píng)論 1 1
  • 俗有云:‘民以食為先调煎,食以湯為先’。湯,可以滋潤(rùn)人的身體己肮、可加強(qiáng)身體免疫力補(bǔ)士袄、充營(yíng)養(yǎng)和水份、令人易於吸收谎僻、效果使人...
    井岡工社閱讀 394評(píng)論 0 0