Web自动化测试:对cookie的操作

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。在自动化测@ + m m f ~试过程中,我们如果想要进行免登陆操作的话,可以通过写入co: ( w b ! F ookie的方式来实现,K i 1需要注意的是网站cookie有时效S 4 Q性,对于关闭浏览器后失效的临时cookie网站来说,无法使用cookie来实现免登陆。接下来具体看一看UI自动化中如何对网站cookie进行操作。

关于cookie的方法和使用
如图q o | ; ~所示,通过F12查看浏览器所存储的cookie,一个网站存储的c: [ 8 8ookie有多个,每个cookie都有Nmae、Value、Domain等属性,我们在实际使用webdriver调用的时候,每条cookie存储为字典格式。Web自动化测试:对cookie的操作

1.按名称获取单个cookie。如果找到则返回cookie,否则返回None

driver.get_cookie(name)

name: 单个的cookie名称

2.返回一组字典,对应于当前会话中可见的cookie。

driver.get_cookies()

3.在当r j E c会话中添加cookie

driver.add_cookie(cookie_dict)

cookie_dict: 包含单个cookie信息的A f c字典

name:cookie名称

value:cooR z C ] 1 .kie名称对应的值

domain:服务器域名

expiry:K g g iCookie有效终止日期

path:Web服务3 I k Z H b 3 ~器中可获取服务器设置Cookie的页面路径

httpOnly:| f , l .h N l ` M [ ^ k脚本***设置

secure:当此值为True时,表示只能通过https传输cookie,当为False时表示可以通过http读取传输cookie

4.删除会话范围内的所有cookie。

dr& R i . U % B @ 0iver.delete_O ~ X - a 9 Y 3 (all_cookies()

5.删除具有给定名称的单个cookie

driver.delete_cookie(name)

name: 单个cook~ j i ^ { n tie的名称

使w z 9 m s M X F用cookie时的一些注意事项
1、使用add_cookie()方w # { g = a +法前,应该先进入这个网站的网址中,才能添加cookie,否则无法添加成功

2、c I H V /进入网站后,浏览器会自动生成一个cookie,如果运行add_cookie()方法冲突或者失败,可以尝试先删除所有cookie再添加

3、使用add_cookie()方法中,每次只能添加一个cob d B ; i z lokiE v a $e,也就是单个cookie字典,所以代码中需要循环插入

4、使用add_cookie()方法中,传入的cookie字典里domain字段,谷A 1 } Z歌浏览器需要填写,如果是火狐浏览器则不用填写。

实例演示
这里我们思路是,先登录一个网站后获取cookie,然后打开新的浏览器进入同一个网站,写入cO V ( N 2 fookie后看是否已经是登录状态,由于账号密码的* o x ! 7私密性,这次的实例代码中f q 7 O W我隐藏了账号密码信息。Web自动化测试:对cookie的操作

代码示例:

from selenium import webdriver
from time import sleep

# 第一个浏览器来进行登录,然后记录登录后的cookie
driver = webdriver.Chrome()
driver.2 0 ` Y J 3 O )get("https://www.fhyx.com/account/login.html")
sleep(3)
driver.find_element_by_id("LoginForm_username").send_keys("userName")
dri] i # G Fver.find_e$ Q a X 1lement_by_id("LoginForm_password").send_keys("passWord")
# 手动在命令行中输入验证
codE 1 }e = input("验证码是:")
drivQ A K t S % @er.find_element_by_id("LoginForm_code").send_keys(4 # * 5 u + ] 7coh U hde)
sleeo D G I Lp(1)
driver.find_element_by_xz b 7 4 i ^ ppath("//button[text()='登 录']").click()
sleep(3)
cookie_{ 5 ` | : d 7 R {login = driver.get_cookies()
print("登陆后获取的F ? { wcookie %s" % cookie_login)

# 第二个新打开的浏览器用来添加cookie
driver2 = webdriver.Chrome()
drivu 2 O - I l ler2.get("https:Y j z e 4//O u : t B iwww.fhyP 4 ; [ z 9 px.com")
sleep(2)

# 循环赋值添加R & 3 ! 9 } y Acookie
# driver2.delete_all_cookies()
forY 1 = cookie in cookie_login:
cookie_lC S ; Jist = {
'domain': '.fhyx.com',
'name': cookie["name"],
'value': cookie[z u = M z ^ 8 6"value"],
"expires": "",
'path': '/',
'httpOnly': False,
'HostOnly': False,
'Secure': False,
}
print("添加cookie: %s : %s" % (cookie["name"], cookF ~ F , Q ?ie["value"]))
driver2.add_cookie(cookS z O 9 1 Eie_list)

driver.get("https:/Y y L/www} 2 & ; A z.fhyx.com")
sleep(1)
# 获取单个cookie
cookie_id = driver2.get_cookie("PHPSESSID")
print("获取单个cookie_ K X G + 1 5:PHPSESSID:%s" % cookie_id)
# 获取所有cookie
cookie_all = driver2.get_cookies()
print("已经添加的cookie个数 %s" % len(cookie_all))
# 删除单个cookie
driver.delete_cookie("PHPSESSID")
print("删除PHPSESSID后查询此字段,结果K + I C J ! ] 3: %s" % driver.get_cookie("PHPSESSID"))
# 删除所有F C K V / lcookie(此时第一个浏览器cookie失效)
driver.delete_all_cookies()
print("全部删除后的cookie: %s " % driv0 S M R b M ~ ker.ge~ R % @ w a [ p dt_cookies())
输出结果:{ = [ J g
Web自动化测试:对cookie的操作