python3+selenium架構設計01-Page Object

來源:互聯網
上載者:User

標籤:water   一個個   none   移動   driver   als   import   stc   cap   

頁面物件模型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 BasePageclass 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 webdriverfrom pageobject.BaiduPage import baiduimport unittestclass 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。

python3+selenium架構設計01-Page Object

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.