PO設計模式詳解

PO:page objece什湘,分層機制,讓不同層去做不同類型的事情赎离,讓代碼結構清晰逛犹,增加復用性。
主要有以下幾種分層方式:
1)兩層: 對象邏輯層+業(yè)務數(shù)據(jù)層
2)三層:對象庫層+邏輯層+業(yè)務數(shù)據(jù)層
3)四層:對象庫層+邏輯層+業(yè)務層+數(shù)據(jù)層

優(yōu)勢:
1)效率高 :同理梁剔,PO模式的邏輯層方法有具體定義虽画,情況和元素發(fā)生變化一樣 修改邏輯層,業(yè)務層不變荣病。這樣看來結構簡單清晰码撰,舒服更符合人類習慣, 普通方式就是繼續(xù)堆case众雷。
2) 復用多收益大: 同樣這里如果邏輯復用越多灸拍,PO模式收益越大,因為對于PO模式來說都只需要修改一個地方多處受益砾省。

普通模式:

def test_user_login():
    driver = webdriver.Edge()
    base_url = 'https://mail.qq.com/'
    username = '3494xxxxx'  # qq號碼
    password = 'kemixxxx'  # qq密碼
    driver.get(base_url)
    driver.switch_to.frame('login_frame') #切換到登錄窗口的iframe
    driver.find_element(By.ID, "u").send_keys(username) #輸入賬號
    driver.find_element(By.ID, "p").send_keys(password) #輸入密碼
    driver.find_element(By.ID, "login_button").click()  #點擊登錄

PO模式(三層):
對象庫層

#創(chuàng)建基礎類
class BasePage(object):
    #初始化
    def __init__(self, driver):
        self.base_url = 'https://mail.qq.com/'
        self.driver = driver
        self.timeout = 30

    #打開頁面
    def _open(self):
        url = self.base_url
        self.driver.get(url)
        self.driver.switch_to.frame('login_frame')  #切換到登錄窗口的iframe

    def open(self):
        self._open()

    #定位方法封裝
    def find_element(self,*loc):
        return self.driver.find_element(*loc)

#創(chuàng)建LoginPage類
class LoginPage(BasePage):
    username_loc = (By.ID, "u")
    password_loc = (By.ID, "p")
    login_loc = (By.ID, "login_button")

    #輸入用戶名
    def type_username(self,username):
        self.find_element(*self.username_loc).send_keys(username)

    #輸入密碼
    def type_password(self,password):
        self.find_element(*self.password_loc).send_keys(password)

    #點擊登錄
    def type_login(self):
        self.find_element(*self.login_loc).click()

邏輯層

#創(chuàng)建test_user_login()函數(shù)
def user_login(driver, username, password):
    """測試用戶名/密碼是否可以登錄"""
    login_page = LoginPage(driver)
    login_page.open()
    login_page.type_username(username)
    login_page.type_password(password)
    login_page.type_login()

業(yè)務層

def test_user_login():
    driver = webdriver.Edge()
    username = '3494xxxxx'    #qq號碼
    password = 'kemixxxx'    #qq密碼
    test_user_login(driver, username, password)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸡岗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子编兄,更是在濱河造成了極大的恐慌轩性,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狠鸳,死亡現(xiàn)場離奇詭異揣苏,居然都是意外死亡悯嗓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門卸察,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脯厨,“玉大人,你說我怎么就攤上這事坑质『衔洌” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵涡扼,是天一觀的道長稼跳。 經(jīng)常有香客問我,道長吃沪,這世上最難降的妖魔是什么汤善? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮票彪,結果婚禮上红淡,老公的妹妹穿的比我還像新娘。我一直安慰自己抹镊,他們只是感情好锉屈,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布荤傲。 她就那樣靜靜地躺著垮耳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遂黍。 梳的紋絲不亂的頭發(fā)上终佛,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音雾家,去河邊找鬼铃彰。 笑死,一個胖子當著我的面吹牛芯咧,可吹牛的內(nèi)容都是我干的牙捉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敬飒,長吁一口氣:“原來是場噩夢啊……” “哼邪铲!你這毒婦竟也來了?” 一聲冷哼從身側響起无拗,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤带到,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后英染,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揽惹,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡被饿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搪搏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狭握。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疯溺,靈堂內(nèi)的尸體忽然破棺而出哥牍,到底是詐尸還是另有隱情,我是刑警寧澤喝检,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布嗅辣,位于F島的核電站,受9級特大地震影響挠说,放射性物質(zhì)發(fā)生泄漏澡谭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一损俭、第九天 我趴在偏房一處隱蔽的房頂上張望蛙奖。 院中可真熱鬧,春花似錦杆兵、人聲如沸雁仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攒砖。三九已至,卻和暖如春日裙,著一層夾襖步出監(jiān)牢的瞬間吹艇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工昂拂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留受神,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓格侯,卻偏偏與公主長得像鼻听,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子联四,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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