天天看點

selenium使用unittest架構如何封裝token實作免登入和驗證碼登入

一、selenium使用unittest架構如下:

selenium使用unittest架構如何封裝token實作免登入和驗證碼登入

case下放置要執行的檔案,檔案名要以test開頭

config可以添加一個py檔案,檔案内放置基本ip,如:

HOST=www.baidu.com
           

二、run.py代碼如下:

from BeautifulReport import BeautifulReport
import unittest
import time

current = time.strftime('%Y-%m-%d-%H-%M-%S')	# 生成時間,月份一定要小寫,分鐘一定要大寫
report_name = current + '-report.html'		# 生成測試報告檔案名,參考上面架構中的report下的html報告名
test_suite = unittest.defaultTestLoader.discover('./case', pattern='test*py')	# 執行case檔案夾内所有以test開頭的py檔案,要執行的檔案名命名一定要以test開頭
runner = BeautifulReport(test_suite)
runner.report('selenium自動化測試', report_name, './report')		# 生成的報告名

if __name__ == "__main__":	# run.py執行入口,在run.py執行就可以執行case下所有的檔案
    unittest.main()
           

三、get_token.py檔案寫擷取token的代碼,并封裝

from selenium import webdriver	# 導入webdriver
from PIL import Image	# 導入截圖插件
import time


def get_driver():	# 封裝打開chrome浏覽器
    driver = webdriver.Chrome()
    return driver


def get_token(ob):	# 封裝get_token,通過賬号密碼驗證碼方式登入
    driver = ob
    driver.get('登入界面的url')
    driver.maximize_window()
    driver.find_element_by_xpath('賬号輸入框的xpath').send_keys('你的賬号')	# 點選賬号輸入框并輸入賬号
    driver.find_element_by_xpath('密碼輸入框的xpath').send_keys('你的密碼')	# 點選密碼輸入框并輸入密碼
    driver.save_screenshot('a.png')		# 登入界面截圖
    element = driver.find_element_by_xpath('驗證碼xpath')	# 找到驗證碼的xpath定位
    left = element.location['x']	# 驗證碼圖檔左邊的坐标
    top = element.location['y']		# 驗證碼圖檔上面的坐标
    right = left + element.size['width']	# 驗證碼圖檔右邊的坐标
    bottorm = top + element.size['height']		# 驗證碼圖檔底部的坐标
    im = Image.open('a.png')	# 打開之前截圖的登入界面圖檔
    im = im.crop((left, top, right, bottorm))	# 在登入界面圖檔根據驗證碼上下左右坐标定位到驗證碼圖檔
    im.save('b.png')	# 将驗證碼圖檔截圖
    code = input('請輸入正确的驗證碼:')
    driver.find_element_by_xpath('驗證碼輸入框xpath').send_keys(code)		# 點選輸入框并輸入驗證碼
    driver.find_element_by_xpath('登入按鈕xpath').click()	# 點選登入按鈕,即可登入
    time.sleep(5)
    '''擷取token'''
    token = driver.execute_script('return localStorage.getItem("token");')		# 擷取token
    header = {"X-Access-Token": token}
    return header


if __name__ == "__main__":
    print(get_token())
    
           

四、case裡的py執行用例檔案如何編寫

import unittest  # 導入unittest
from time import sleep
from config.config import HOST	# 導入config檔案中的HOST
from tools.get_token import get_token
from tools.get_token import get_driver
import sys,os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))

class Partment(unittest.TestCase):   #定義測試類,繼承unittest.TestCase
    '''部門管理'''
    # 測試之前初始化
    @classmethod
    def setUpClass(self):
        self.driver = get_driver()
        self.header = get_token(self.driver)
        self.driver.get(HOST+'路徑')
        self.driver.implicitly_wait(15)

    # 定義測試結束後的動作
    @classmethod
    def tearDownClass(self):
        # 關閉浏覽器,恢複測試資料等操作
        sleep(2)
        self.driver.quit()

    def test_01_search_seccess(self):
        '''第一條用例'''
        pass


if __name__ == "__main__":
    unittest.main()
           

繼續閱讀