黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Selenium的PageFactory在大型項(xiàng)目中的應(yīng)用

系統(tǒng) 2389 0

出路出路,走出去了,總是會(huì)有路的;困難苦難,困在家里就是難。

?

??? 因?yàn)樽罱龅降募夹g(shù)問(wèn)題一直沒(méi)找到可行的解決辦法,一直在翻看selenium的源代碼,之前寫測(cè)試代碼的時(shí)候就是拿來(lái)即用,寫什么功能啊,就按手動(dòng)的操作步驟去轉(zhuǎn)換 ,近日看到一個(gè)文章,又去wiki上查了查,覺(jué)得寫的不錯(cuò)就記錄下來(lái)了。

??? 在使用selenium做UI測(cè)試的時(shí)候,往往并不是頁(yè)面的每個(gè)功能我們都要測(cè)試,總有一些經(jīng)常要進(jìn)行回歸的功能,再細(xì)致一點(diǎn)的說(shuō),有一些節(jié)點(diǎn)是我們經(jīng)常 操作的,那么我從項(xiàng)目初期開(kāi)始就進(jìn)行自動(dòng)化測(cè)試代碼編寫的話,我們可以設(shè)計(jì)適應(yīng)項(xiàng)目的一套自動(dòng)化測(cè)試代碼結(jié)構(gòu),基本的思路就是對(duì)每一個(gè)頁(yè)面都創(chuàng)建一個(gè)相應(yīng) 的PageObject類,如果是公共的模板頁(yè)面當(dāng)然只建立一個(gè)就可以了。這樣下來(lái)就相當(dāng)于建立了很多基礎(chǔ)頁(yè)面一樣,如果項(xiàng)目開(kāi)發(fā)的過(guò)程中還有完整的文檔 或者足夠詳細(xì)的用戶故事,那么就簡(jiǎn)直太完美了~~因?yàn)檫@樣你可以減少很多次的IDE----Browser之間的切換、查找、測(cè)試工作,真的方便很多。但 是這個(gè)看項(xiàng)目而定吧,這種細(xì)致入微的文檔很多團(tuán)隊(duì)似乎都沒(méi)能做到。但是筆者還是真的希望在產(chǎn)品初期或項(xiàng)目開(kāi)始的時(shí)候有完整的文檔給我們這些自動(dòng)化測(cè)試的人 員手中,這樣可以大大加快我們自動(dòng)化測(cè)試代碼的編寫。繞的有點(diǎn)遠(yuǎn)了。。?;貧w正題,如何做這種一個(gè)頁(yè)面一個(gè)基礎(chǔ)類的實(shí)現(xiàn)呢?最實(shí)際的,看代碼:

      
         1
      
      
        public
      
      
        class
      
      
         PageObject {


      
      
         2
      
      
         3
      
      
        private
      
      
         WebElement searchTypeSng;


      
      
         4
      
      
        private
      
      
         WebElement fromCity;


      
      
         5
      
      
        private
      
      
         WebElement toCity;


      
      
         6
      
      
        private
      
      
         WebElement fromDate;


      
      
         7
      
      
         8
      
      
        public
      
       String calDate(
      
        int
      
      
         nextDays) {


      
      
         9
      
      
        //
      
      
         當(dāng)前日期加 n 天之后 
      
      
        10
      
               Date date = DateUtils.addDays(
      
        new
      
      
         Date(), nextDays);


      
      
        11
      
      
        //
      
      
         格式化時(shí)間格式
      
      
        12
      
      
        return
      
      
         DateFormatUtils.ISO_DATE_FORMAT.format(date);


      
      
        13
      
      
            }


      
      
        14
      
      
        15
      
      
        public
      
      
        void
      
      
         searchTrip(WebDriver driver,String from, String to ,String date) {


      
      
        16
      
      
                BaseUtils.clearAndTypeString(driver,fromCity, from);


      
      
        17
      
      
                BaseUtils.clearAndTypeString(driver,toCity, to);


      
      
        18
      
      
                BaseUtils.clearAndTypeString(driver,fromDate, date);


      
      
        19
      
      
                searchTypeSng.submit();


      
      
        20
      
      
            }


      
      
        21
      
      
        22
      
       }
    

?


測(cè)試執(zhí)行:

      
        public
      
      
        class
      
      
         UsingPageObject {



    
      
      
        public
      
      
        static
      
      
        void
      
      
         main(String[] args) {



        WebDriver driver 
      
      = 
      
        new
      
      
         FirefoxDriver();



        EventFiringWebDriver eventDriver 
      
      = 
      
        new
      
      
         EventFiringWebDriver(driver);

        

        eventDriver.register(
      
      
        new
      
      
         MyWebDriverListener());

        

        eventDriver.get(
      
      "http://flight.qunar.com/"
      
        );

        

        
      
      
        
          PageObject object = PageFactory.initElements(driver, PageObject.class);
        
      
      
        
          String date = object.calDate(30);
        
        
           object.searchTrip(driver,"北京", "廈門", date);
        
      
      
        

        



    }

}
      
    

?

這個(gè)時(shí)候就完成對(duì)搜索這一功能的冒煙測(cè)試,測(cè)試執(zhí)行代碼沒(méi)有使用TestNG,只是直接用了一個(gè)main函數(shù)。為了寫博客簡(jiǎn)單方便,不推薦大家效仿。

如果還需要測(cè)試其它功能和使用其它節(jié)點(diǎn),直接在PageObject類中加入相應(yīng)的Field即可。

分割線-------------------------------------------------------------------------------------------------分割線

寫到這里,如果沒(méi)用過(guò)這個(gè)方法的人會(huì)越看越暈,現(xiàn)在簡(jiǎn)單的講解一下它執(zhí)行的原理:

在 PageObject類中我們創(chuàng)建的Field的名稱是和頁(yè)面有一定的對(duì)應(yīng)關(guān)系的,不是隨意取的,如果像上面代碼這么寫,默認(rèn)的selenium會(huì)根據(jù) Id最先進(jìn)行元素查找,如果沒(méi)有查找到再通過(guò)name進(jìn)行查找,下面的我就不說(shuō)了,因?yàn)槟阋呀?jīng)想到了。。。如果你擔(dān)心頁(yè)面的不規(guī)范或者復(fù)雜度比較高,容易 產(chǎn)生ID,name,Css等的沖突,selenium不能準(zhǔn)確的識(shí)別元素, 那么請(qǐng)往下看:

selenium還提供了一種注解的方式,還是直接上代碼:

      
         1
      
      
        public
      
      
        class
      
      
         PageObject {


      
      
         2
      
      
        private
      
      
         WebElement searchTypeSng;


      
      
         3
      
      
        
           @FindBy(name="fromCity")
        
      
      
         4
      
      
        private
      
      
         WebElement fromCity;


      
      
         5
      
      
        
           @FindBy(name="toCity")
        
      
      
         6
      
      
        private
      
       WebElement 
      
        
          toWhere
        
      
      ;


      
         7
      
      
        private
      
      
         WebElement fromDate;


      
      
         8
      
      
         9
      
      
        public
      
       String calDate(
      
        int
      
      
         nextDays) {


      
      
        10
      
      
        //
      
      
         當(dāng)前日期加 n 天之后 n=30
      
      
        11
      
               Date date = DateUtils.addDays(
      
        new
      
      
         Date(), nextDays);


      
      
        12
      
      
        //
      
      
         格式化時(shí)間格式
      
      
        13
      
      
        return
      
      
         DateFormatUtils.ISO_DATE_FORMAT.format(date);


      
      
        14
      
      
            }


      
      
        15
      
      
        16
      
      
        public
      
      
        void
      
      
         searchTrip(WebDriver driver,String from, String to ,String date) {


      
      
        17
      
      
                BaseUtils.clearAndTypeString(driver,fromCity, from);


      
      
        18
      
      
                BaseUtils.clearAndTypeString(driver,toWhere, to);


      
      
        19
      
      
                BaseUtils.clearAndTypeString(driver,fromDate, date);


      
      
        20
      
      
                searchTypeSng.submit();


      
      
        21
      
      
            }


      
      
        22
      
      
        23
      
       }
    

?


當(dāng)你看到這兩個(gè)annotations的時(shí)候,你已經(jīng)明白了,是的,selenium提供注解的方式對(duì)頁(yè)面的元素進(jìn)行準(zhǔn)確的定位,可 以參考的關(guān)鍵字有:className、css、id、linkText、name、partialLinkText、tagName、xpath.

另外selenium還提供了2個(gè)關(guān)鍵字,一個(gè)是how,另一個(gè)是using,如何使用它們就不在這里寫了,因?yàn)楣P者覺(jué)得,用這兩個(gè)關(guān)鍵字更麻煩,理解起來(lái)也麻煩。

關(guān)于PageObject & PageFactory的使用,就簡(jiǎn)單的寫了這么多,關(guān)于PageFactory還有很多知識(shí),我會(huì)抽出時(shí)間寫在下篇文章里,如果有正在使用這種模式的朋友,請(qǐng)多多批評(píng)和指點(diǎn),相互討論學(xué)習(xí)。

?

Selenium的PageFactory在大型項(xiàng)目中的應(yīng)用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論