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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

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

      因?yàn)樽罱龅降募夹g(shù)問題一直沒找到可行的解決辦法,一直在翻看selenium的源代碼,之前寫測(cè)試代碼的時(shí)候就是拿來即用,寫什么功能啊,就按手動(dòng)的操作步驟去轉(zhuǎn)換,近日看到一個(gè)文章,又去wiki上查了查,覺得寫的不錯(cuò)就記錄下來了。
      在使用selenium做UI測(cè)試的時(shí)候,往往并不是頁(yè)面的每個(gè)功能我們都要測(cè)試,總有一些經(jīng)常要進(jìn)行回歸的功能,再細(xì)致一點(diǎn)的說,有一些節(jié)點(diǎn)是我們經(jīng)常 操作的,那么我從項(xiàng)目初期開始就進(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è)就可以了。這樣下來就相當(dāng)于建立了很多基礎(chǔ)頁(yè)面一樣,如果項(xiàng)目開發(fā)的過程中還有完整的文檔 或者足夠詳細(xì)的用戶故事,那么就簡(jiǎn)直太完美了~~因?yàn)檫@樣你可以減少很多次的IDE----Browser之間的切換、查找、測(cè)試工作,真的方便很多。但 是這個(gè)看項(xiàng)目而定吧,這種細(xì)致入微的文檔很多團(tuán)隊(duì)似乎都沒能做到。但是筆者還是真的希望在產(chǎn)品初期或項(xiàng)目開始的時(shí)候有完整的文檔給我們這些自動(dòng)化測(cè)試的人 員手中,這樣可以大大加快我們自動(dòng)化測(cè)試代碼的編寫。繞的有點(diǎn)遠(yuǎn)了。。。回歸正題,如何做這種一個(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í)行代碼沒有使用TestNG,只是直接用了一個(gè)main函數(shù)。為了寫博客簡(jiǎn)單方便,不推薦大家效仿。
      如果還需要測(cè)試其它功能和使用其它節(jié)點(diǎn),直接在PageObject類中加入相應(yīng)的Field即可。
      分割線-------------------------------------------------------------------------------------------------分割線
      寫到這里,如果沒用過這個(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)行元素查找,如果沒有查找到再通過name進(jìn)行查找,下面的我就不說了,因?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者覺得,用這兩個(gè)關(guān)鍵字更麻煩,理解起來也麻煩。
      關(guān)于PageObject & PageFactory的使用,就簡(jiǎn)單的寫了這么多,關(guān)于PageFactory還有很多知識(shí),我會(huì)抽出時(shí)間寫在下篇文章里,如果有正在使用這種模式的朋友,請(qǐng)多多批評(píng)和指點(diǎn),相互討論學(xué)習(xí)。

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

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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲中文字幕伊人久久无码| 亚洲AV无码久久精品蜜桃| 国产99久久久国产精免费| 亚洲av无码一区二区三区乱子伦| 麻豆视频免费播放| 国产精品日本亚洲777| 日韩亚洲人成在线综合日本 | 91精品国产免费| 亚洲国产精品18久久久久久| 亚洲日韩v无码中文字幕| 亚洲高清中文字幕免费| 曰韩无码AV片免费播放不卡| 亚洲欧洲国产视频| 亚洲人成网站色在线入口| aⅴ免费在线观看| 国产高清对白在线观看免费91 | 亚洲国产欧美国产综合一区 | 亚洲精品中文字幕无乱码| 亚洲成?Ⅴ人在线观看无码| 1000部拍拍拍18勿入免费视频下载| 日韩精品亚洲专区在线影视| 中文字幕亚洲精品资源网| 久久久精品国产亚洲成人满18免费网站 | 最新亚洲人成无码网站| 亚洲日本在线播放| 亚洲区小说区激情区图片区| 免费观看美女裸体网站| 91人成网站色www免费下载| 9久久免费国产精品特黄| 亚洲av永久中文无码精品综合 | 亚洲邪恶天堂影院在线观看| 免费看国产一级特黄aa大片| 99久久久国产精品免费无卡顿| 久久不见久久见免费影院www日本 久久WWW免费人成—看片 | 国产免费观看视频| 最近中文字幕无吗高清免费视频| 久操免费在线观看| WWW国产成人免费观看视频| 久久亚洲精品高潮综合色a片| 亚洲免费中文字幕| 亚洲黄色在线网站|