亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Selenium的PageFactory在大型項目中的應用

系統 1957 0

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

?

??? 因為最近遇到的技術問題一直沒找到可行的解決辦法,一直在翻看selenium的源代碼,之前寫測試代碼的時候就是拿來即用,寫什么功能啊,就按手動的操作步驟去轉換 ,近日看到一個文章,又去wiki上查了查,覺得寫的不錯就記錄下來了。

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

      
         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
      
      
        //
      
      
         當前日期加 n 天之后 
      
      
        10
      
               Date date = DateUtils.addDays(
      
        new
      
      
         Date(), nextDays);


      
      
        11
      
      
        //
      
      
         格式化時間格式
      
      
        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
      
       }
    

?


測試執行:

      
        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);
        
      
      
        

        



    }

}
      
    

?

這個時候就完成對搜索這一功能的冒煙測試,測試執行代碼沒有使用TestNG,只是直接用了一個main函數。為了寫博客簡單方便,不推薦大家效仿。

如果還需要測試其它功能和使用其它節點,直接在PageObject類中加入相應的Field即可。

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

寫到這里,如果沒用過這個方法的人會越看越暈,現在簡單的講解一下它執行的原理:

在 PageObject類中我們創建的Field的名稱是和頁面有一定的對應關系的,不是隨意取的,如果像上面代碼這么寫,默認的selenium會根據 Id最先進行元素查找,如果沒有查找到再通過name進行查找,下面的我就不說了,因為你已經想到了。。。如果你擔心頁面的不規范或者復雜度比較高,容易 產生ID,name,Css等的沖突,selenium不能準確的識別元素, 那么請往下看:

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
      
      
        //
      
      
         當前日期加 n 天之后 n=30
      
      
        11
      
               Date date = DateUtils.addDays(
      
        new
      
      
         Date(), nextDays);


      
      
        12
      
      
        //
      
      
         格式化時間格式
      
      
        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
      
       }
    

?


當你看到這兩個annotations的時候,你已經明白了,是的,selenium提供注解的方式對頁面的元素進行準確的定位,可 以參考的關鍵字有:className、css、id、linkText、name、partialLinkText、tagName、xpath.

另外selenium還提供了2個關鍵字,一個是how,另一個是using,如何使用它們就不在這里寫了,因為筆者覺得,用這兩個關鍵字更麻煩,理解起來也麻煩。

關于PageObject & PageFactory的使用,就簡單的寫了這么多,關于PageFactory還有很多知識,我會抽出時間寫在下篇文章里,如果有正在使用這種模式的朋友,請多多批評和指點,相互討論學習。

?

Selenium的PageFactory在大型項目中的應用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 大色综合色综合资源站 | 亚洲人成网站色7799在线观看 | 久热re国产手机在线观看 | 又粗又大的机巴好爽欧美 | 视频在线观看一区 | 天天草天天草 | 夜夜摸夜夜操 | 中文字幕在线日本 | 亚洲欧美在线精品一区二区 | 五月天婷婷免费视频观看 | 九九在线| 天天干国产 | 亚洲黄色在线看 | 久久免费精品一区二区 | 伊人色综| 久草视频首页 | 亚洲一区二区三区四区五区 | 亚洲精品国产高清不卡在线 | 国产日韩欧美中文 | 一级a做爰片欧欧美毛片4 | 黄频免费观看 | 日本黄色录象 | 思思久久这里只精品99re66 | 奇米第一色 | 99热这里只有精品9 99热这里只有精品99 | 天天摸日日舔 | 欧美亚洲一区二区三区 | 奇米久久| 伊人精品视频在线观看 | 国产精品a v 免费视频 | 亚洲欧美日本国产综合在线 | 国产乱人伦偷精品视频不卡 | 欧美性大战久久久久久久蜜桃 | 成人亚洲国产综合精品91 | 欧美成人香蕉在线观看 | 亚洲一区二区三区视频 | 亚洲精品无码不卡在线播放he | 国产欧美久久精品 | 99国产在线| 久久频这里精品99香蕉久 | 亚洲成人在线视频播放 |