python+selenium2學習筆記POM設計模式-02project
阿新 • • 發佈:2018-12-11
Project:基礎類BasePage,封裝所有頁面都公用的方法, 定義open函式,重定義find_element,switch_frame,send_keys等函式。 在初始化方法中定義驅動driver,基本url,title WebDriverWait提供了顯式等待方式。
新建一個BasePage檔案
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class BasePage(object): """ BasePage封裝所有頁面都公用的方法,例如driver, url ,FindElement等 """ # 初始化driver、url、pagetitle等 # 例項化BasePage類時,最先執行的就是__init__方法,該方法的入參,其實就是BasePage類的入參。 # __init__方法不能有返回值,只能返回None # self只例項本身,相較於類Page而言。 def __init__(self,selenium_driver,base_url,pagetitle): self.driver = selenium_driver self.base_url = base_url self.pagetitle = pagetitle # 通過title斷言進入的頁面是否正確。 # 使用title獲取當前視窗title,檢查輸入的title是否在當前title中,返回比較結果(True 或 False) def on_page(self,pagetitle): return pagetitle in self.driver.title # 開啟頁面,並校驗頁面連結是否載入正確 # 以單下劃線_開頭或__(雙下劃線)的方法,在使用import *時,該方法不會被匯入,保證該方法為類私有的。 def _open(self,url,pagetitle): self.driver.get(url) self.driver.maximize_window() # 使用assert進行校驗,開啟的視窗title是否與配置的title一致。呼叫on_page()方法 assert self.on_page(pagetitle),u'開啟頁面失敗%s'(url) #定義open方法 呼叫_open方法開啟連結 def open(self): self._open(self.base_url,self.pagetitle) #basepage是類,open是這個類裡的方法,想要呼叫方法,需先建立類的例項,這個過程就是例項化 #在定義方法的時候,一定要傳遞一個例項方法的引數self,這個self相當於例項本身 #因為方法是例項的方法,所以如果不把例項當做引數傳遞過來的話,是沒辦法呼叫這個方法的 #重寫元素定位 def find_element(self,*loc): try: # 確保元素是可見的。 # 注意:以下入參為元組的元素,需要加*。Python存在這種特性,就是將入參放在元組裡。 # WebDriverWait(self.driver,10).until(lambda driver: driver.find_element(*loc).is_displayed()) # 注意:以下入參本身是元組,不需要加* WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc)) return self.driver.find_element(*loc) except: print(u'%s頁面未能找到%s元素'(self,loc)) #重寫switch_frame def switch_frame(self,loc): return self.driver.switch_to_frame(loc) #定義script方法,用於執行js def script(self,src): self.driver.execute_script(src) #重寫定義send_keys方法 def send_keys(self,loc,value,clear_first=True,click_firt=True): try: loc = getattr(self,'_%s'% loc) #getattr相當於實現self.loc if click_firt: self.find_element(*loc).click() if clear_first: self.find_element(*loc).clear() self.find_element(*loc).send_keys(value) except AttributeError: print(u'%s頁面未能找到%s元素'(self, loc))
程式碼中有具體的註釋