前言:在測試過程中,初了登錄的測試用例外,很多測試用例是不需要每次都進行一次登錄操作的。
這個時候,我們只需要獲取到cookies后,將其放入一個文件中,打開目標url時,將文件中的cookies獲取並添加到瀏覽器驅動即可。
一、實現一次登錄,獲取cookies,將此功能做如下封裝:
from testcases.test_login import LoginPage from common.get_yaml import get_yaml_data from selenium import webdriver import os import time import json # cookies的yaml文件路徑 cookies_yaml_path = os.path.dirname(os.path.dirname(__file__)) + "\\cookies.yaml" class GetCookies: @classmethod def get_cookie(cls, driver): # 實例化登錄頁面對象:LoginPage對象 lp = LoginPage(driver) # 調用登錄頁的登錄動作,傳入賬號密碼 lp.action_login("admin", "111111") time.sleep(2) # 獲取cookies並寫入文件 cookies = driver.get_cookies() with open(cookies_yaml_path, "w")as f: json.dump(cookies, f)
核心思想和步驟:
1、建一個存放cookies的yaml文件,並獲得其路徑。
2、實現登錄。
3、登錄后使用driver.get_cookies()獲取cookies內容。
4、with open(cookies的yaml文件路徑,“w”寫模式),調用json模塊將其序列化並寫入文件(json模塊的dump方法)。
獲取到cookies后,下一步就是進行添加cookies,將此功能做如下封裝。
def open_url(cls, url, driver): # 清除瀏覽器cookie driver.delete_all_cookies() # 從cookies.yaml文件中獲取最新的cookie並加入瀏覽器中 cookies_str = get_yaml_data("cookies.yaml", os.path.dirname(os.path.dirname(__file__)) + "\\")for cookie in cookies_str: driver.add_cookie(cookie) # 打開需要測試的頁面url driver.get(url)
核心思想和步驟:
1、driver.delete_all_cookies(),清楚瀏覽器的cookies。
2、從cookies的yaml文件中獲取cookies文本。
3、利用for循環將cookies添加到瀏覽器,使用driver.add_cookie().
4、打開目標url。
注意:當我們獲取到了cookies后,需要打開目標url之前,先打開一個我們測試的網頁(相同domian的網頁,通常打開首頁即可)
不然的話,會報如下錯誤:
selenium.common.exceptions.InvalidCookieDomainException: Message: Document is cookie-averse
如上圖,在調用封裝的open_url前,打開相同domain的url,就可以避免如上報錯。