Selenium中的PageObject模式


PageObject模式簡介

眾所周知,UI頁面元素常常是不穩定的,在使用Selenium編寫WebUI自動化測試用例時,隨着測試腳本的增加,維護和更新這些元素便成為一個令人頭疼的問題。
在普通模式下,腳本直接定位並操作元素,一旦有元素變動時,首先我們需要從眾多的用例中找到使用它的用例,然后逐個修改,逐個調試。這是一個非常耗時耗力的過程。

這就像,隨着一個公司的擴大,人員的增多,必然會引入中層管理者,來分組管理零散的人員。
對於元素也是一樣,我們對元素按頁面進行分組,然后引入PageObject頁面對象,來專門負責元素的定位和操作。這樣腳本只需要使用各個頁面對象提供的操作方法即可,無需再關心元素的定位問題。
當元素變動時,只需要維護對應的頁面對象即可,這樣便可以大大降低框架的維護成本,如下圖。

編寫頁面對象

一個基本的頁面對象如下

# baidu_page.py
class BaiduPage(object):
    # 1. 列出所需要操作的元素定位器,元素定位器即 定位方式+定位表達式 
    search_ipt_loc = ('id', 'kw')
    search_btn_loc = ('id', 'su')
    
   # 2. 初始化時傳入瀏覽器驅動並綁定對象,以使得內部可以通過driver定位及操作函數
    def __init__(self, driver, url=None):
        self.driver = driver
        self.url = url

    def open():
        """打開頁面"""
        self.driver.get(self.url)
    
    # 3. 每個元素每種操作封裝一個方法
    def input_search_keyword(self, keyword):
        """搜索框輸入搜索詞"""
        self.driver.find_element(*self.search_ipt_loc).send_keys(keyword)
    
    def click_search_button(self):
        """點擊百度一下按鈕"""
        self.driver.find_element(*self.search_btn_loc).click()
    
    # 4. 也可以封裝一些本頁面常用的組合操作
    def search(self, keyword):
        """搜索關鍵詞"""
        self.open()
        self.input_search_keyword(keyword)
        self.click_search_button()

使用頁面對象

新建一個用例文件test_baidu.py,導入該頁面對象使用即可。

from selenium import webdriver
from baidu_page import BaiduPage

def test_baidu_search():
     driver = webdriver.Chrome()
     baidu = BaiduPage(driver, url='https://www.baidu.com')
     baidu.search('美國大選')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM