selenium-web自動化(po模型)
阿新 • • 發佈:2021-06-24
什麼是po模型呢?簡單理解就是:把每個頁面當成一個物件,給這些頁面當成一個類,主要就是完成元素定位和業務操作;把它和測試指令碼區分開來,需要什麼取這些頁面類去呼叫即可。這樣的好處在於頁面元素髮生變化時,只需要去維護頁面類即可,其他部分就不用管。
PO:指測試頁面和測試指令碼分離,即頁面封裝成類,供測試指令碼進行呼叫
專案架構如下:
base基類(所有頁面公共方法的二次封裝)
''' 所有頁面公共方法的二次封裝 在指令碼中加入太多的sleep後會影響指令碼的執行速度 driver:返回瀏覽器的一個例項 timeout:超時的總時長 poll_frequency:迴圈去查詢的間隙時間,預設0.5s ''' from selenium.webdriver.support.wait import WebDriverWait class BaseAction(): ''' 基類 ''' def __init__(self,driver): self.driver = driver def find_element(self,feature,timeout=10,poll=2): '''方法內部去呼叫系統的定位元素''' return WebDriverWait(self.driver, timeout, poll).until(lambda x: x.find_element(*feature)) def send_keyword(self,feature,text,timeout=10,poll=2): '''輸入內容''' self.find_element(feature,timeout,poll).send_keys(text) def get_text(self,feature,timeout=10,poll=2): '''獲取元素的文字內容''' return self.find_element(feature,timeout,poll).text def click_element(self,feature,timeout=10,poll=2): '''點選元素''' self.find_element(feature,timeout,poll).click() def clear_element(self,feature,timeout=10,poll=2): '''清空元素''' self.find_element(feature,timeout,poll).clear() def get_element(self,feature,timeout,poll): '''返回定位到的元素''' return self.find_element(feature,timeout,poll)
頁面元素查詢類 page
''' By是selenium中內建的一個class,在這個class中有各種方法來定位元素 ''' from selenium.webdriver.common.by import By from base.base_action import BaseAction class AssignworkPage(BaseAction): #一個def是一個動作我們在case中呼叫這個方法即可對頁面進行操作 #點選作業中心 center_work = By.LINK_TEXT,'作業中心' #點選佈置作業 bz_work = By.XPATH,'//*[@id="app"]/main/div/div[2]/div[1]/div[1]/div/button[1]' def click_centerwork(self): self.click_element(self.center_work) def work_bz(self): self.click_element(self.bz_work)
測試case類
import unittest,json from time import sleep from selenium import webdriver from page.assign_homeorkpage import AssignworkPage from selenium.webdriver.common.action_chains import ActionChains class Work_Build(unittest.TestCase): def setUp(self): str = '' with open('../common/bk.json', 'r', encoding='utf-8') as f: listCookies = json.loads(f.read()) cookie = [item["name"] + "=" + item["value"] for item in listCookies] cookiestr = '; '.join(item for item in cookie) # print(listCookies) self.driver = webdriver.Chrome('../common/chromedriver.exe') self.driver.get('url') # driver.get('https://hte.hexfuture.net/#/inCourse/hte/') for cookie in listCookies: if 'expiry' in cookie: del cookie['expiry'] self.driver.add_cookie(cookie) self.driver.get('url') self.assign_Homeworkpage = AssignworkPage(self.driver) def tearDown(self): sleep(3) self.driver.quit() def test_successbuildwork(self): '''佈置作業主流程''' #點選作業中心 self.assign_Homeworkpage.click_centerwork() # assert self.indexPage.get_start_go_to_class_text() == "開始上課" if __name__ == '__main__': unittest.main()
base資料夾下存放著最基礎的頁面元素方法,例如get_element,send_keys,clear,click等頁面操作事件
page資料夾則存放著在我們需要操作頁面的操作的xpath事件,一個def是一個事件。例如點選作業中心
scripts下則只存放測試用例