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

2021-01-28 08:13

阅读:551

标签:用户   mamicode   end   ssid   dom   多个   冲突   通过   图片   

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

关于cookie的方法和使用
如图所示,通过F12查看浏览器所存储的cookie,一个网站存储的cookie有多个,每个cookie都有Nmae、Value、Domain等属性,我们在实际使用webdriver调用的时候,每条cookie存储为字典格式。技术图片

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

driver.get_cookie(name)

name: 单个的cookie名称

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

driver.get_cookies()

3.在当前会话中添加cookie

driver.add_cookie(cookie_dict)

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

name:cookie名称

value:cookie名称对应的值

domain:服务器域名

expiry:Cookie有效终止日期

path:Web服务器中可获取服务器设置Cookie的页面路径

httpOnly:防脚本***设置

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

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

driver.delete_all_cookies()

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

driver.delete_cookie(name)

name: 单个cookie的名称

使用cookie时的一些注意事项
1、使用add_cookie()方法前,应该先进入这个网站的网址中,才能添加cookie,否则无法添加成功

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

3、使用add_cookie()方法中,每次只能添加一个cookie,也就是单个cookie字典,所以代码中需要循环插入

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

实例演示
这里我们思路是,先登录一个网站后获取cookie,然后打开新的浏览器进入同一个网站,写入cookie后看是否已经是登录状态,由于账号密码的私密性,这次的实例代码中我隐藏了账号密码信息。技术图片

代码示例:

from selenium import webdriver
from time import sleep

# 第一个浏览器来进行登录,然后记录登录后的cookie
driver = webdriver.Chrome()
driver.get("https://www.fhyx.com/account/login.html")
sleep(3)
driver.find_element_by_id("LoginForm_username").send_keys("userName")
driver.find_element_by_id("LoginForm_password").send_keys("passWord")
# 手动在命令行中输入验证码
code = input("验证码是:")
driver.find_element_by_id("LoginForm_code").send_keys(code)
sleep(1)
driver.find_element_by_xpath("//button[text()=‘登 录‘]").click()
sleep(3)
cookie_login = driver.get_cookies()
print("登陆后获取的cookie %s" % cookie_login)

# 第二个新打开的浏览器用来添加cookie
driver2 = webdriver.Chrome()
driver2.get("https://www.fhyx.com")
sleep(2)

# 循环赋值添加cookie
# driver2.delete_all_cookies()
for cookie in cookie_login:
cookie_list = {
‘domain‘: ‘.fhyx.com‘,
‘name‘: cookie["name"],
‘value‘: cookie["value"],
"expires": "",
‘path‘: ‘/‘,
‘httpOnly‘: False,
‘HostOnly‘: False,
‘Secure‘: False,
}
print("添加cookie: %s : %s" % (cookie["name"], cookie["value"]))
driver2.add_cookie(cookie_list)

driver.get("https://www.fhyx.com")
sleep(1)
# 获取单个cookie
cookie_id = driver2.get_cookie("PHPSESSID")
print("获取单个cookie:PHPSESSID:%s" % cookie_id)
# 获取所有cookie
cookie_all = driver2.get_cookies()
print("已经添加的cookie个数 %s" % len(cookie_all))
# 删除单个cookie
driver.delete_cookie("PHPSESSID")
print("删除PHPSESSID后查询此字段,结果: %s" % driver.get_cookie("PHPSESSID"))
# 删除所有cookie(此时第一个浏览器cookie失效)
driver.delete_all_cookies()
print("全部删除后的cookie: %s " % driver.get_cookies())
输出结果:
技术图片

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

标签:用户   mamicode   end   ssid   dom   多个   冲突   通过   图片   

原文地址:https://blog.51cto.com/14645850/2507657


评论


亲,登录后才可以留言!