UI自動化測試——頁面物件設計模式筆記
阿新 • • 發佈:2021-08-19
1.uiFrame
(1)下載HTMLTestRunner.py,並放在python的Lib目錄下,其目的是生成HTML的測試用例報告
(2)在uiFrame工程下建立對應的包和目錄
base:存放基礎類
config:配置檔案
data:儲存測試資料
image:儲存圖片檔案
log:儲存日誌檔案
page:編寫物件層的程式碼
repaort:儲存測試報告
test:測試模組
utils:編寫獲取檔案路徑的方法
run.py:程式執行的入口
(3)base包下的base.py
from selenium.webdriver.common.by import By from selenium.webdriver.support.expected_conditions importNoSuchFrameException from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver class webdriver: def __str__(self): #driver指的是webdriver例項化後的物件 return 'driver' #單種元素定位,*loc:識別元素屬性,ctr+滑鼠放置到元素+左鍵:判斷定位元素屬性的方法是否正確 def findElement(self,*loc):return self.driver.find_element(*loc) # 多種元素定位 def findElements(self,*loc): return self.driver.find_element(*loc) #定義所有使用id方法的iframe框架 def findFrame(self, frameID): return self.driver.switch_to.frame(frameID)
(4)page包下的login.py
from selenium.webdriver.common.by importBy from base.base import webdriver import time as t class Login(webdriver): login_loc=(By.ID,'select_all') frameID='login_frame1' def isSelected(self): '''驗證是否被勾選''' return self.findElement(*self.login_loc).is_selected() def clickAllSelcted(self): '''點選全選''' return self.findElement(*self.login_loc).click() def loginFrame(self): '''進入到login頁面的iframe框架''' self.findFrame(frameID=self.frameID)
(5)test包test_login_page.py
import unittest from selenium import webdriver import time as t
'''將page包下的login.py裡的Login類匯入到test包下的test_login_page.py裡,那麼test_login_page.py就可以呼叫Login類裡的所有方法''' from page.login import Login class QQTest(unittest.TestCase,Login): def setUp(self)->None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://file.qq.com/') self.driver.implicitly_wait(30) def tearDown(self)->None: self.driver.quit() def test_file_qq_001(self): '''登入驗證:校驗全選是否被勾選''' self.loginFrame() self.assertEqual(self.isSelected(),True) if __name__ == '__main__': unittest.main(verbosity=2)
(6)untils包下的pathUtils.py
import os def base_dir(_file_=None): #獲取當前工程的路徑 return os.path.dirname(os.path.dirname(__file__))
(7)report包下的21_08_19_14_49_28report.html
2.測試套件實戰
import os.path import unittest
'''將HTMLRunner匯入進來,可以生成HTML的測試報告''' import HTMLTestRunner
'''將base_dir匯入到utils包下的pathUtils.py下''' from utils.pathUtils import base_dir import os import time def suites(): '''獲取被執行的套件''' suite=unittest.TestLoader().discover( # start_dir='D:/code/uiFrame/test', start_dir=os.path.join(base_dir(),'test'), pattern='test_*.py', top_level_dir=None ) return suite '''獲取當前時間''' def nowTime(): return time.strftime('%y_%m_%d_%H_%M_%S',time.localtime()) def run(): '''執行測試套件''' fp=open(os.path.join(base_dir(),'report',nowTime()+'report.html'),'wb') runner=HTMLTestRunner.HTMLTestRunner( stream=fp, title='QQ郵箱測試報告', description='QQ郵箱測試報告詳細的資訊' ) runner.run(suites()) if __name__ == '__main__': run()
3.QQ登入實戰
import unittest from selenium import webdriver import time as t class QQTest(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://file.qq.com/') self.driver.implicitly_wait(30) def tearDown(self) -> None: self.driver.quit() def test_file_qq_001(self): '''登入驗證:校驗全選是否勾選''' self.driver.switch_to.frame('login_frame1') t.sleep(2) isRadio=self.driver.find_element_by_id('select_all') self.assertEqual(isRadio.is_selected(),True) def test_file_qq_002(self): '''登入驗證:校驗點選註冊跳轉到註冊的頁面''' self.driver.switch_to.frame('login_frame1') t.sleep(2) self.driver.switch_to.frame('ptlogin_iframe') t.sleep(2) nowHandler=self.driver.current_window_handle self.driver.find_element_by_link_text('註冊新帳號').click() allHandlers=self.driver.window_handles for handler in allHandlers: if nowHandler!=handler: self.driver.switch_to.window(handler) t.sleep(2) self.assertEqual(self.driver.title,'QQ註冊') self.driver.close() def test_file_qq_003(self): '''登入驗證:校驗點選帳號密碼登入的友好提示資訊''' self.driver.switch_to.frame('login_frame1') t.sleep(2) self.driver.switch_to.frame('ptlogin_iframe') t.sleep(2) self.driver.find_element_by_link_text('帳號密碼登入').click() t.sleep(2) username=self.driver.find_element_by_xpath('//*[@id="uin_tips"]') self.assertEqual(username.text,'支援QQ號/郵箱/手機號登入') if __name__ == '__main__': unittest.main(verbosity=2)