1. 程式人生 > 其它 >UI自動化測試——頁面物件設計模式筆記

UI自動化測試——頁面物件設計模式筆記

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 import
NoSuchFrameException 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 import
By 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)