python+selenium自動化測試-24設計模式Page Object(PO)

Page Object(頁面對象)是Selenium自動化測試項目開發實踐的最佳設計模式之一。

Page Object主要體現了面向對象的兩大基本特徵:繼承和封裝。對界面交互細節的封裝,這樣可以使測試用例更關注業務而非界面細節,提高測試用例的可讀性;通過抽象封裝成一個BasePage類(封裝公共方法),所有頁面對象(Page類)均繼承該基類,大幅減少冗餘的代碼,同時也提高了可維護性。

1、Page Object工作原理

Page繼承BasePage,Page依賴TestCase,Webdriver在BasePage裏面做環境初始化。
工作原理

2、Page Object應用示例

2.1、Testlogin.py
# -- coding: utf-8 --
from PageObject_design.LoginPage import *
from selenium import webdriver
from time import sleep
import unittest

driver=webdriver.Firefox()
class myUnit(unittest.TestCase):
	
	def setUp(self,driver=driver):
        print('setUp正在執行...')
        driver.implicitly_wait(10)
        driver.maximize_window()

    def tearDown(self):
        print("tearDown執行完畢!")

def test_login(self):
	LoginPage.type_login(self.driver,"username","password")
	
2.2、LoginPage.py
# -- coding: utf-8 --
from PageObject_design.BasePage import *
from selenium.webdriver.common.by import By

class LoginPage(basePage):
    #首頁登錄頁面
    url='/'
    #元素定位器
    username_loc=(By.ID,'username')
    password_loc=(By.ID,'pwd')
    submit_loc=(By.CLASS_NAME,'login-button')

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

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

    #登錄按鈕元素
    def type_submit(self):
        self.find_element(*self.submit_loc).click()

    #登錄功能模塊封裝
    def type_login(driver,username,password):
        #測試用戶名密碼是否可以登錄
        login_page = LoginPage(driver)
        login_page.open()
        login_page.type_username(username)
        login_page.type_password(password)
        login_page.type_submit()
2.3、BasePage.py
# -- coding: utf-8 --
from time import sleep
from selenium.webdriver.common.by import By

class basePage(object):
    #頁面基礎類,定義父類BasePage
    def __init__(self,driver):
        self.driver=driver  #self指的是類實例對象本身,和java裏面的this是類似的
        self.base_url='這裏填入你的測試IP地址'
        self.timeout=10

    #打開不同的子頁面
    def _open(self,url):
        rurl=self.base_url+url
        self.driver.maximize_window()
        self.driver.get(url)
        sleep(2)

    def open(self):
        self._open(self.url)

    #元素定位封裝
    def find_element(self,*loc): #*loc任意數量的位置參數(帶單個型號參數)
        return self.driver.find_element(*loc)
        
    def find_elements(self,*loc): 
        return self.driver.find_elements(*loc)
發佈了53 篇原創文章 · 獲贊 15 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章