python3+selenium框架設計01-Page Object


頁面對象模型Page Object Modal是一種腳本設計模型,將頁面元素,業務操作分割,當實際頁面發生變化的時候,只需要修改頁面元素文件,業務操作不需要修改。

具體實現需要先寫一個頁面公共類,里面寫公共的方法,比如把元素定位,元素操作等方法重新封裝。之后所有頁面類繼承頁面公共類,頁面類中只寫該頁面需要定位的元素,並把對應元素的操作封裝成一個個方法。最后測試類調用這些方法組成一個業務測試用例。

還是以百度搜索為例子

framework包下面放一些公共類

pageobject包下面放需要測試的頁面類

testsuites包下面放對應頁面的測試類

class BasePage(object):

    def __init__(self,driver):
        self.driver = driver

    def find_element(self,selector):
        by = selector[0]
        value = selector[1]
        element = None
        if by =='id' or by =='name' or by == 'class' or by == 'tag' or by =='link' or by =='plink' or by =='css' or by == 'xpath':
            if by == 'id':
                element = self.driver.find_element_by_id(value)
            elif by == 'name':
                element = self.driver.find_element_by_name(value)
            elif by == 'class':
                element = self.driver.find_element_by_class_name(value)
            elif by == 'tag':
                element = self.driver.find_element_by_tag_name(value)
            elif by == 'link':
                element = self.driver.find_element_by_link_text(value)
            elif by == 'plink':
                element = self.driver.find_element_by_partial_link_text(value)
            elif by == 'css':
                element = self.driver.find_element_by_css_selector(value)
            elif by == 'xpath':
                element = self.driver.find_element_by_xpath(value)
            else:
                print('沒有找到元素')
            return element
        else:
            print('輸入的元素定位方式錯誤')


    def send(self,selector,value):
        element=self.find_element(selector)#調用封裝的定位元素方法
        try:
            element.send_keys(value)
            print('輸入的內容%s' % value)
        except BaseException:
            print('error')

    def click(self,selector):
        element = self.find_element(selector)
        element.click()
這是封裝的公共方法。封裝的元素定位方法需要傳一個數組,數組下標第一個是定位方式,第二個是具體的值。元素定位寫在封裝的元素操作里面,不寫在后面頁面類里是因為方便在頁面類里面重復使用元素。
from framework.base_page import BasePage

class baidu(BasePage):
    kw = ['id','kw']#定位搜索輸入框
    su = ['id','su']#搜索按鈕

    def kw_send(self,value):#搜索框輸入內容
        self.send(self.kw,value)

    def su_click(self):#點擊搜索按鈕
        self.click(self.su)
這是百度搜索頁面的頁面類。定位的元素單獨拿出來,這樣就可以重復使用。然后元素的操作也封裝成一個方法。就比如上面這個搜索框輸入內容。value這個值在后面測試類的時候,可以根據輸入的不同,組裝成不同的測試用例。
from selenium import webdriver
from pageobject.BaiduPage import baidu
import unittest
class BaiduSerch(unittest.TestCase):

    def test_baidu(self):
        dr = webdriver.Firefox()
        dr.get('https://www.baidu.com')
        bai = baidu(dr)
        bai.kw_send('selenium')
        bai.su_click()

if __name__ =='__main__':
    unittest.main()

最后就是測試類的,這里使用了unittest單元測試框架。bai = baidu(dr)每個頁面都需要把driver傳進去。使用WebDriver有一個要注意的就是 腳本運行的時候要保持只有一個driver。


免責聲明!

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



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