<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

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

      因為最近遇到的技術問題一直沒找到可行的解決辦法,一直在翻看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還有很多知識,我會抽出時間寫在下篇文章里,如果有正在使用這種模式的朋友,請多多批評和指點,相互討論學習。

    posted on 2014-05-28 09:45 順其自然EVO 閱讀(318) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

    <2014年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成图片网站| 国产午夜免费高清久久影院| www国产亚洲精品久久久| 成人一区二区免费视频| 91嫩草亚洲精品| 免费人成视频在线观看不卡| 中文字幕无线码中文字幕免费| 亚洲第一页在线观看| 免费一级毛片不卡不收费| 特级精品毛片免费观看| 精品亚洲视频在线| 内射干少妇亚洲69XXX| 免费A级毛片无码A| 精品无码免费专区毛片| 日日狠狠久久偷偷色综合免费| 亚洲狠狠狠一区二区三区| 亚洲日本va午夜中文字幕久久| 精品香蕉在线观看免费| 狠狠躁狠狠爱免费视频无码| 亚洲国产精品综合久久久| 国产亚洲情侣一区二区无| 最新中文字幕免费视频| 久久精品私人影院免费看| 四虎影视在线看免费观看| 亚洲高清中文字幕免费| 亚洲AV无码成人专区片在线观看 | 亚欧日韩毛片在线看免费网站| 亚洲а∨精品天堂在线| 中文字幕亚洲综合久久| 激情97综合亚洲色婷婷五| 女人18毛片特级一级免费视频| 日韩精品无码免费一区二区三区 | 亚洲国产二区三区久久| 亚洲精品综合久久| 国产精品成人免费综合| 成人AV免费网址在线观看| 免费看又黄又无码的网站 | 国产一级一毛免费黄片| 特级毛片爽www免费版| 18禁亚洲深夜福利人口| 亚洲中文无码mv|