這多是最簡單的Page Object庫

作過web自動化測試的同窗,對Page object設計模式應該不陌生。css

Page object庫應該根據如下目標開發:python

  • Page object應該易於使用git

  • 清晰的結構github

    • PageObjects 對於頁面對象web

    • PageModules對於頁面內容shell

  • 只寫測試,而不是基礎。設計模式

  • 在可能的狀況下防止樣板代碼。瀏覽器

  • 不須要本身管理瀏覽器。測試

  • 在運行時選擇瀏覽器,而不是在類級別。url

  • 不須要直接接觸selenium。

這只是一種設計模式,只要遵循它有思想,不借助第三方庫,咱們同樣能夠實現這種設計模式。

建立baidu_page.py 文件,實現page層封裝。

class BasePage:
    """
   基礎Page
   """
   def __init__(self, driver):
        self.driver = driver

    def get(self, url):
        self.driver.get(url)

    def id_(self, id_):
        return self.driver.find_element_by_id(id_)

    def xpath(self, xpath):
        return self.driver.find_element_by_xpath(xpath)


class BaiduPage(BasePage):
    """
   百度首頁Page
   """

   @property
   def search_box(self):
        return self.id_("kw")

    @property
   def search_button(self):
        return self.xpath("//*[@id='su']")

咱們本質上要將元素的定位和元素的操做分開,page層用來定義元素的定位。

接下來建立,test_baidu.py文件,用來實現自動化測試。

from selenium import webdriver
from baidu_page import BaiduPage

dr = webdriver.Chrome()
page = BaiduPage(dr)
page.get("https://www.baidu.com")
page.search_box.send_keys("page object")
page.search_button.click()

dr.close()

這裏你將看不到元素的定位,分層的好處就是,當元素的定位發生改變時,只須要維護好page層便可,對於測試用例來講不須要關心元素怎麼定位,只要專心設計好用例便可。

但是,Page層的編寫並不太簡便,本質上它的做用只是定義一些元素的定位。那我告訴你,只須要4行代碼也能夠實現上面baidu_page.py的功能,你會不會太簡單了?

from page_objects import PageObject, PageElement

class BaiduPage(PageObject):
    search_box = PageElement(css='#kw')
    search_button = PageElement(id_='su')

是的,就這麼簡單,專一於元素的定位的編寫,幾乎沒有多月的東西。並且還能夠添加超時時間哦!

from page_objects import PageObject, PageElement

class BaiduPage(PageObject):
    search_box = PageElement(css='#kw', time_out=2)
    search_button = PageElement(id_='su', time_out=10)

這樣不再用寫噁心的顯式等待了,是否是很爽!?

定位一組元素也是很是簡單的說。

from page_objects import PageElements

class BaiduPage(PageObject):
    ……
    # 百度搜索結果
   search_result = PageElements(xpath="//div/h3/a")

啥? 項目地址? 別急!別急!

GitHub地址:
https://github.com/defnngj/selenium_page_objects

原項目已經再也不維護,我閱讀了原項目代碼,雖然只有100多行,但設計很是精妙。惋惜缺乏元素的等待,這將有助於定位元素的穩定性,因此,在原有項目的基礎上增長的該功能。

下載安裝:

$ python setup.py install

經過pip命令安裝:

$ pip install -i https://testpypi.python.org/pypi selenium-page-objects

該項目已經更新爲:poium 項目地址:https://github.com/defnngj/poium

相關文章
相關標籤/搜索