WebDriver操作cookie的方法:cookie以字典形式保存
- get_cookies() 獲取所有的cookie
- get_cookie(name) 返回字典的key為"name"的cookie信息
- add_cookie(cookie_dict) 添加字典形式的cookie
- delete_cookie(name) 刪除cookie
- delete_alla-cookies():刪除所有cookie信息
最近在寫項目的登錄功能時,需要把線上環境的token和測試環境的結合使用。所以需要對測試環境的cookie操作。
思路是:用selenium登錄測試環境,同時也用進程在后台用headless方式登錄線上環境。取到線上的token,再給測試環境用。
代碼如下:
1、獲取線上環境代碼
1 from multiprocessing import Process 2 from pageobjects.production_login import Product_Login 3 from config.cfg import * 4 import time 5 6 class Test_Login: 7 '''登錄測試環境''' 8 def __init__(self,driver): 9 self.driver = driver 10 11 def open_browser(self): 12 self.driver.maximize_window() 13 self.driver.implicitly_wait(10) # 等待 14 15 def login(self): 16 '''登錄測試環境,添加線上Token''' 17 self.driver.get(test_url) 18 self.driver.find_element_by_id("vcc_code").send_keys(vcc[1]) 19 self.driver.find_element_by_id("username").send_keys(username[1]) 20 self.driver.find_element_by_id("password").send_keys(password) 21 self.driver.find_element_by_id('btn').click() 22 self.driver.delete_cookie('access_token') # 刪除測試環境的token 23 24 def add_cookie(self,product): 25 '''讀取線上token,寫入cookie''' 26 new_token = product.readtoken()[0] 27 self.driver.add_cookie(new_token) 28 29 def login_test(self): 30 product = Product_Login() 31 lastTime = product.readtoken()[1] #獲取日期 32 if (time.strftime("%d")) == lastTime: #如果日期是今天,則直接取token 33 self.login() 34 self.add_cookie(product) 35 else: 36 p = Process(target=product.login_production) #運行線上環境進程 37 p.start() 38 self.login() 39 p.join() #等待 40 self.add_cookie(product) 41 42 def close_browser(self): 43 self.driver.quit()
2、測試環境使用token
1 import time , unittest,json 2 from selenium import webdriver 3 from selenium.webdriver.chrome.options import Options 4 from config.cfg import * 5 6 7 8 class Product_Login: 9 '''登錄線上環境,把獲取的token寫入配置文件''' 10 11 def login_production(self): 12 '''selenium+chromeheadless獲取線上環境Token''' 13 day = time.strftime("%d") 14 15 chrome_options = Options() 16 chrome_options.add_argument('--headless') 17 driver = webdriver.Chrome(options=chrome_options) 18 driver.implicitly_wait(10) # 等待 23 driver.get(production_url) 24 driver.find_element_by_id("vcc_code").send_keys(vcc[0]) # 登錄 25 driver.find_element_by_id("username").send_keys(username[0]) 26 driver.find_element_by_id("password").send_keys(password) 27 driver.find_element_by_id('btn').click() 28 29 manage_cookie = driver.get_cookie('access_token') 30 driver.quit() 31 manage_cookie = json.dumps(man_cookie) 32 self.writetoken(day,man_cookie) 33 34 def writetoken(self, nowTime,manage_cookie): # 寫線上token 35 36 out = open(r'D:\config.txt', 'w') 37 out.writelines(man_cookie) #寫入token 38 out.writelines("\n") 39 out.writelines(nowTime) #寫入日期 40 out.writelines("\n") 41 out.close() 42 43 def readtoken(self): # 讀token 44 45 out = open(r'D:\config.txt', encoding='utf-8') 46 lines = out.readline() #token 47 if (lines.__contains__("\n")): 48 lines = lines.split("\n")[0] 49 lines = json.loads(lines) 50 lines1 = out.readline() #日期 51 if (lines1.__contains__("\n")): 52 lines1 = lines1.split("\n")[0] 53 54 out.close() 55 return lines,lines1 56
