從零開始搭建WEB自動化框架04 —— 頁面類

更多內(nèi)容請查看:
從零開始搭建WEB自動化框架01 —— Pytest 使用
從零開始搭建WEB自動化框架02 —— POM 設(shè)計模式
從零開始搭建WEB自動化框架03 —— 元素類

本系列學(xué)習(xí)文章適合的對象為已經(jīng)掌握 Selenium 基礎(chǔ)用法,并有一定實踐經(jīng)驗的同學(xué)搞莺。同時挤巡,希望你可以理解 Page Object Model 設(shè)計模型饵隙。

現(xiàn)在,基礎(chǔ)的元素碴开,Pytest框架已經(jīng)都搭建好了中跌,但是我們的整個框架依然非常的單薄须妻,并沒有任何實質(zhì)性的內(nèi)容呈現(xiàn)。
所以煞额,接下來我們需要針對這個P(Page)做一個類化思恐,讓更實際的內(nèi)容填充到框架中。
Page內(nèi)容并不會全部展示膊毁,有興趣的可以移步github查看胀莹。

上一篇文章已經(jīng)提到過了,什么是類婚温?

類就是具體事務(wù)中提取出來的共性描焰。

元素都會有自己的標(biāo)簽,各種屬性栅螟,所以我們可以依據(jù)這一點荆秦,整理出一個基礎(chǔ)元素類 Element 篱竭,那同樣的,頁面也都有自己的共性萄凤,在做具體頁面的內(nèi)容時室抽,我們需要先將這些頁面的共性提取出來,做一個公共頁面類 PageBase靡努。

每個公司的產(chǎn)品都有自己的特性坪圾、適配的操作系統(tǒng)等,我也是根據(jù)當(dāng)前的情況做了一個提煉惑朦,更多的共性需要各位自己去挖掘兽泄。

class PageCommon(object):

    def __init__(self, ed_driver):
        self._ed_driver = ed_driver
        self._cur_dur = 0
        self._focus = None

    def close(self):
        self._ed_driver.close()
        self._ed_driver.switch_to.window(self._ed_driver.window_handles[-1])

    def scroll_top(self, dur=300):
        fact_dur = self._cur_dur - dur
        js = "var q=document.documentElement.scrollTop={}".format(fact_dur)
        self._ed_driver.execute_script(js)
        self._cur_dur = fact_dur if fact_dur > 0 else 0

    def scroll_bottom(self, dur=300):
        fact_dur = self._cur_dur + dur
        js = "var q=document.documentElement.scrollTop={}".format(fact_dur)
        self._ed_driver.execute_script(js)
        self._cur_dur = fact_dur

我公司是以Web為主,所以以上代碼更適合Web端漾月。當(dāng)然還有更多特性是基于業(yè)務(wù)的病梢,所以就沒有都寫出來。

這里面有一個很關(guān)鍵的地方梁肿,就是它的入?yún)ⅲ篹d_driver蜓陌。

它代表了當(dāng)前的頁面、元素吩蔑、操作是歸屬于哪個瀏覽器的钮热,在并行測試時,這個非常重要烛芬,可以明確你的測試指令發(fā)送到哪個瀏覽器中隧期。

driver 的獲取屬于基礎(chǔ)操作,如果不理解的話可能需要回去再看一下 Selenium 初始化相關(guān)的內(nèi)容赘娄。

當(dāng)擁有基類后仆潮,所有頁面都應(yīng)該繼承這個頁面。

當(dāng)然遣臼,也可能你有一個基類性置,但是基于業(yè)務(wù)形態(tài),可能會有更多的次基類以適配不同的業(yè)務(wù)暑诸,這些就需要自行探索如何設(shè)置繼承了蚌讼。

class StartProcessPage(PageCommon):

    def __init__(self, ed_driver):
        super().__init__(ed_driver)

        self.start_btn = Button(self._ed_driver, By.XPATH, ct.XPATH_SP_START_BTN)
        self.start_time_input = InputView(self._ed_driver, By.XPATH, ct.XPATH_SP_START_TIME_INPUT)

接下來就是設(shè)置具體頁面,并且在頁面中初始化元素个榕。

從這里就可以看出來篡石,我們的頁面其實是承載元素的,而具體的操作則在各自元素中已經(jīng)進(jìn)行了定義西采,做到了完全的分離凰萨。
(詳細(xì)可以見元素篇

使用時,可以直接元素+操作的形式。

spp = StartProcessPage(driver)
spp.start_time_input.input("xxxx")
spp.start_btn.click()

這樣胖眷,一個非常簡單的測試操作就已經(jīng)完成了

當(dāng)然武通,以上的設(shè)置都是基于最小顆粒度去進(jìn)行的,當(dāng)應(yīng)用到實際業(yè)務(wù)時珊搀,還可以有更多的適配冶忱。

比如將常用操作封裝到一個方法中:

def start_process(self):
    self.start_time_input.input("xxxx")
    self.start_btn.click()

更多操作可以參考一下其他人的文章,在頁面類中境析,其實可以變通的地方是非常多的囚枪,它主要是明確一下,我們的操作都是基于頁面而展開的劳淆,這樣在可讀性链沼、維護(hù)上都很有優(yōu)勢。

當(dāng)有了頁面信息沛鸵、頁面元素括勺、一些基礎(chǔ)操作集合之后,一個頁面類大體就完成了曲掰,通過上面的操作已經(jīng)可以開始進(jìn)行流程操作了疾捍,它甚至已經(jīng)可以開始承載我們的自動化測試了,比如:

def test_start_a_order(self, driver):
    spp = StartProcessPage(driver)
    op = OrderPage(driver)
    with step('開始一個訂單'):
        op.click_start_process_btn()
        spp.start_process()
        op.check_order_is_started()

但是好像還缺點東西栏妖,比如說操作日志好像沒有拾氓?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市底哥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌房官,老刑警劉巖趾徽,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翰守,居然都是意外死亡孵奶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蜡峰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來了袁,“玉大人,你說我怎么就攤上這事湿颅≡芈蹋” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵油航,是天一觀的道長崭庸。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么怕享? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任执赡,我火速辦了婚禮,結(jié)果婚禮上函筋,老公的妹妹穿的比我還像新娘沙合。我一直安慰自己,他們只是感情好跌帐,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布首懈。 她就那樣靜靜地躺著,像睡著了一般含末。 火紅的嫁衣襯著肌膚如雪猜拾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天佣盒,我揣著相機(jī)與錄音挎袜,去河邊找鬼。 笑死肥惭,一個胖子當(dāng)著我的面吹牛盯仪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜜葱,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼全景,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牵囤?” 一聲冷哼從身側(cè)響起爸黄,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揭鳞,沒想到半個月后炕贵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡野崇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年称开,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乓梨。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鳖轰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扶镀,到底是詐尸還是另有隱情蕴侣,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布臭觉,位于F島的核電站睛蛛,受9級特大地震影響鹦马,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忆肾,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一荸频、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧客冈,春花似錦旭从、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渠缕,卻和暖如春鸽素,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亦鳞。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工馍忽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人燕差。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓遭笋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親徒探。 傳聞我的和親對象是個殘疾皇子瓦呼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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