web自动化测试第14步:对于cookie的操作

news/2024/5/18 15:05:05 标签: selenium, webdriver, cookie, UI自动化, 自动化测试

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

一:关于cookie的方法和使用

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

浏览器<a class=cookie" class="has" src="https://img-blog.csdnimg.cn/20190202151457441.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NDR0dBQUc=,size_16,color_FFFFFF,t_70" />

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

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

3.在当前会话中添加cookie

  1. name:cookie名称
  2. value:cookie名称对应的值
  3. domain:服务器域名
  4. expiry:Cookie有效终止日期
  5. path:Web服务器中可获取服务器设置Cookie的页面路径
  6. httpOnly:防脚本攻击设置
  7. secure:当此值为True时,表示只能通过https传输cookie,当为False时表示可以通过http读取传输cookie

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

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

二、使用cookie时的一些注意事项

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

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

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

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

三、实例演示

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

<a class=cookie演示结果" class="has" src="https://img-blog.csdnimg.cn/20190202152106627.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NDR0dBQUc=,size_16,color_FFFFFF,t_70" />

代码示例:

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())

输出结果:

<a class=cookie演示输出结果" class="has" src="https://img-blog.csdnimg.cn/20190202152142584.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NDR0dBQUc=,size_16,color_FFFFFF,t_70" />


http://www.niftyadmin.cn/n/1431733.html

相关文章

web自动化测试第15步:使用js语句

在selenium中&#xff0c;有方法可以运行js语句&#xff0c;这样的话对于一些selenium中没有的操作&#xff0c;或者实际编写UI自动化中遇到的疑难杂症&#xff0c;多了另外一个解决思路&#xff01;&#xff01;&#xff01;简直像是打开了新世界的大门一样。比如我编写ui自动…

web自动化测试第16步:WebDriverWait元素等待和全局设置

由于现在部分web应用加载方式的选择&#xff0c;页面会需要一定时间逐渐加载完毕&#xff0c;也就是说有的页面元素先加载出来&#xff0c;有的元素后加载出来。如果直接定位所查找的元素的话&#xff0c;可能会由于此元素尚未加载完毕找不到元素从而报错&#xff0c;由于网络不…

web自动化测试第17步:深入xpath元素定位详解

一、xpath高级用法基础格式 格式 /轴方法::标签名[标签属性]实例 //div/parent::span[name‘interName’]实例解释&#xff1a; 定位span标签&#xff0c;span标签是div标签的父级&#xff0c;且span标签的name属性值为&#xff1a;interlNmae 二、基础格式详解 2.1层级路径…

web自动化测试第18步:单元测试框架unittest

在了解了ui自动化的方法后&#xff0c;实际应用时需要按照测试用例的形式来书写&#xff0c;否则执行起来太过冗余&#xff0c;这里引入一个测试框架&#xff1a;unittest&#xff0c;使用这个框架中编写用例&#xff0c;会更方便管理和运行。 一、unitest基础写法格式 1.1引…

web自动化测试第19步:使用unittest运行多个测试用例集

上节课&#xff0c;我们开始使用unittest整合测试用例&#xff0c;但是一个项目中&#xff0c;测试用例会有很多&#xff0c;当有很多的测试文件py脚本时&#xff0c;需要一个测试用例集来统一运行&#xff0c;这里就需要使用unittest中的批量运行来跑脚本。 一、常用方法详解…

web自动化测试第20步:测试用例断言

在运行测试用例时&#xff0c;需要判断用例是否执行成功&#xff0c;此时需要有一个我们期望的结果来进行验证。这里unittest中&#xff0c;如果一个case执行的过程中报错&#xff0c;或者我们判断结果不符合期望&#xff0c;就会判定此条用例执行失败&#xff0c;判断的条件主…

web自动化测试第21步:UI自动化框架结构以及思路

在学会使用unittest后&#xff0c;实际上UI自动化的基础骨架已经搭建起来了&#xff0c;剩下的就是利于这套框架&#xff0c;增添一些我们需要的功能&#xff0c;目前看来&#xff0c;我们已经可以使用此框架来批量运行用例&#xff0c;欠缺的是整体的思路以及一些其他功能细节…

web自动化测试第22步:POM设计模式的实现

关于pom设计模式(project Object model/PageObject)&#xff0c;我的理解是一种底层、逻辑、用例的分层&#xff0c;在项目还没有开发出来时&#xff0c;就可以开始写UI自动化脚本了&#xff0c;在开发完成后&#xff0c;再进行元素定位的适配以及调试&#xff1b;而且也可以多…