当前位置: 首页 > news >正文

【如何学习Python自动化测试】—— Cookie 处理

前提

      网络通信是当今社会最为普及和繁荣的技术之一,其承载了人们生活中瞬息万变的信息传递和交流。而作为网络通信的核心要素,网络协议、socket、cookie和session则是网络通信的灵魂。

一、网络协议

      网络协议是计算机和网络设备之间相互通信的规则和标准。 它规定了数据的传输方式、传输格式、传输速率和错误校验等内容。通常,网络协议由多个层次构成,每个层次负责不同的功能,通过层与层之间的协作,实现了数据的可靠传输和通信的顺畅进行。常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议等等。

常见的网络协议有以下几种:

  1. TCP/IP协议:TCP/IP协议是互联网最常用的协议,它是一种分层协议体系,由传输控制协议(TCP)和互联网协议(IP)两部分组成,负责数据在因特网中的正确传输和路由选择。

  2. HTTP协议:HTTP(Hypertext Transfer Protocol)协议是Web应用程序最常用的协议。它定义了Web浏览器和Web服务器之间交换的信息格式,主要用于客户端发送请求和服务器传回响应。

  3. FTP协议:FTP(File Transfer Protocol)协议是一种用于文件传输的协议。它为客户端和服务器之间的文件传输提供了标准格式和传输方式。

  4. SMTP协议:SMTP(Simple Mail Transfer Protocol)协议用于电子邮件的传输,它定义了电子邮件传输的格式和规则。SMTP协议指定了邮件发送的服务器和接收的服务器,通过建立连接来传输电子邮件。

  5. DNS协议:DNS(Domain Name System)协议是一种用于将域名转换为IP地址的协议。它通过在分布式数据库中搜索域名和IP地址的映射,实现了域名到IP地址的转换。

二、Socket

      Socket是一种用于网络通信的编程接口。 它是在应用层和传输层之间的一个抽象层,负责应用程序之间的数据传输。Socket可以实现不同操作系统及不同编程语言之间的互相通信,并且可以通过不同的协议来进行数据传输。

      在Socket编程中,应用程序可以通过Socket向网络上的其他应用程序发送和接收数据。它使用一种类似于文件I/O操作的方式进行编程,通过调用Socket API提供的函数来实现网络通信。想了解Socket编程可点击Socket通信编程与传输协议分析。

      常见的Socket协议有TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的协议,通过三次握手建立连接,保证数据传输的可靠性,但在传输数据时可能会存在一定的延迟。UDP是一种无连接的协议,可以快速传输数据,但传输过程中数据的丢失或重复出现无法得到保证。

      在网络编程中,Socket被广泛应用于实现各种网络服务和应用程序,例如HTTP服务器、FTP服务器、聊天软件等。Socket编程也是网络编程的核心技术之一。

三、Cookie

      Cookie(通常称为“浏览器Cookie”或“HTTP Cookie”)是一种存储在客户端(浏览器)中的小数据文件,用于在客户端和服务器之间传递信息。它是Web浏览器和Web服务器之间数据交换的重要机制之一。 例如,我们平常使用的网站会在我们登录时使用Cookie来记录我们的用户名和密码,在下一次访问时直接携带Cookie信息,无需重新登录。由于Cookie是在浏览器中存储的,所以它具有跨浏览器和跨域名的优势。

      当浏览器向Web服务器发送请求时,服务器可以在响应头中包含一个Set-Cookie头部,告诉浏览器将一个Cookie存储在本地。浏览器在接收到这个响应后,将会把Cookie存储在本地,并在之后向该服务器发起请求时自动把这个Cookie带上。

      Cookie通常用于实现用户会话管理、用户行为追踪、购物车、广告定向等功能。它可以存储一些简单的数据,如登录状态、用户偏好设置、购物车中的商品信息等。一般来说,Cookie的内容是经过加密处理的,以免被恶意窃取或篡改。

      Cookie有一些限制,如每个域名下Cookie的数量和大小都有限制,浏览器可以禁止Cookie、用户可以手动删除Cookie等。因此,Cookie不适合存储大量或敏感的数据。为了解决这些问题,HTML5提供了一种新的本地存储机制——Web Storage,它可以存储更多数据并且数据不会在每次HTTP请求时被发送到服务器。

四、Session

      Session是一种在Web应用程序中管理用户状态的机制。 它通常用于在Web服务器上存储有关当前用户的信息,以实现用户会话管理。Session是基于服务器端的技术,在用户登录时创建并在用户退出或会话超时后销毁。

      当用户通过Web浏览器访问一个使用Session的Web应用程序时,应用程序将会在服务器上创建一个唯一的会话标识符(session ID)并将其传递给浏览器。浏览器随后将该会话标识符存储在Cookie中,以便在后续的请求中将其发送回服务器。服务器会根据该会话标识符来找到该用户对应的会话数据。

      Session通常用于存储用户的登录状态、用户的购物车信息、用户的偏好设置等信息。Session数据可以存储在服务器的内存中、硬盘上或者数据库中,具体的实现方式取决于Web应用程序的特定需求。

      值得注意的是,Session也有一些限制。例如,当服务器负载过高时,可能会出现Session数据丢失或者超时的情况。因此,Web开发人员应考虑使用其他技术来实现高可用性、高扩展性的Web应用程序。


8 、 Cookie 处理

      通过 webdriver 可以对浏览器中的 cookie 进行处理,常见处理方式有获取 cookie、添加 cookie、删除指定 cookie、删除所有 cookie。

8.1 获取 cookie 信息

from selenium import webdriver	 
from time import sleep	 
drvier=webdriver.Firefox()	 
drvier.get('http://www.chuangyijia.com/login')        
打开前台登陆页面  drvier.implicitly_wait(3)	 
drvier.find_element_by_id('email').send_keys('810155067@qq.com')                                           
输入用户名  drvier.find_element_by_id('pwd').send_keys('a654321')  
输入密码	 drvier.find_element_by_css_selector('#submit').click() 
点击登陆	 cookie = drvier.get_cookies()	 
获取登陆后的 cookie 信息	 print cookie	 
打印获取到的 cookie 信息       

8.2 向 cookie 中添加信息

from selenium import webdriver	 
from time import sleep	 
drvier=webdriver.Firefox()	 
drvier.get('http://www.chuangyijia.com/login')           
打开前台登陆页面 cookie = drvier.add_cookie({'name': 'key-test ', 'value': 'key-test'})	 
添加 cookie 信息   

      添加 cookie,可以使用 add_cookie 方式添加。

8.3 删除 cookie 中的信息

drvier.delete_cookie('ci_session')	 
删除 cookie	 drvier.delete_all_cookies()	 
删除所有 cookie  

9、 expected_conditions

      在自动化测试过程中,通常需要对测试结果做出判断,在此可以通过expected_conditions来实现预期结果的判定,以此来断言执行状况。
      expected_conditions 提供了很多方法,常用的方法如下:

  • title_is:判断当前页面的 title 是否为预期结果

  • title_contains:判断当前页面的 title 是否包含预期字符

  • presence_of_element_located:判断一个元素是否存在,但是不表示该元素可见,如果该元素存在,则返回该元素,否则抛出异常。

  • visibility_of_element_located:判断页面是否存在元素,并且该元素可见,如果存在并可见,则返回该元素,否则抛异常。

  • element_to_be_clickable:判断页面是否存在元素,并且该元素可见可点击,如果存在并可见可点击,则返回该元素,否则抛异常。

  • presence_of_all_elements_located:判断至少有一个页面存在,叧要有一个,则返回一个所有元素的列表 ,否则返回空列表。

  • text_to_be_present_in_element:判断一个元素的文本中是否包含了预期字符串,匹配则返回True,否则返回 False。

from selenium import webdriver
导入 webdriverfrom selenium.webdriver.support import expected_conditions 
导入 expected_conditions 模块from selenium.webdriver.common.by import By
在 expected_conditions 中需要使用定位,by 提供统一使用 find_element()方法, 简化了定位操作from time import sleep
导入 sleep 模块drvier=webdriver.Firefox()
打开浏览器drvier.get('http://www.chuangyijia.com/login')
打开登陆页面drvier.implicitly_wait(3)
等待 3 秒drvier.find_element_by_id('email').send_keys('810155067@qq .com')
输入用户名drvier.find_element_by_id('pwd').send_keys('a654321') 
输入密码drvier.find_element_by_css_selector('#submit').click() 
登陆sleep(2)
此时等待 2 秒,主要是为了获取 title,太快的话,获取的 title 是登陆成功之前的 titleis_title=expected_conditions.title_is(u'首页-创意家') 
判断页面的 title 是否为预期的字符串is_title(drvier)
如果与预期字符串相等,这里返回结果为 True,否则为 False。Title_is 是一个 Class,该 class 中实现了__call__方法,那么这个类对象就能像函数一样调用了。is_in_title=expected_conditions.title_contains(u'创意家') 
判断 title 中是否包含预期字符串is_in_title(drvier)
可以用 print 打印他的返回结果为 TrueFalseis_exist=expected_conditions.presence_of_element_located((By.CSS_SELECTOR,'.sq_menu > a:nth-child(3)'))
判断元素是否存在页面上,不一定会显示在页面上print is_exist(drvier)
如果存在,这里返回元素信息, 否则这里会出现NoSuchElementException 的异常。in_ele=expected_conditions.presence_of_all_elements_locate d((By.TAG_NAME,'li'))
页面是否至少存在一个指定元素print in_ele(drvier)
如果存在,这里返回一个列表, 否则返回列表为空visibility_exist=expected_conditions.visibility_of_element _located((By.TAG_NAME,'li'))
检查元素是否可见visibility_exist(drvier)
如果元素存在并可见, 则返回元素信息,元素不可见,则返回异常, NoSuchElementException 的异常,如果元素存在,但是不可见, 则返回 False。is_text_in_ele=expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,'.menu > ul:nth-child(1) > li:nth-	 child(1) > a:nth-child(1)'),u'意')	 
检查元素中是否包含字符串                                   print is_text_in_ele(drvier)                                
如果检查中包含字符串,则返回 True,否则返回 False

相关文章:

【如何学习Python自动化测试】—— Cookie 处理

前提 网络通信是当今社会最为普及和繁荣的技术之一,其承载了人们生活中瞬息万变的信息传递和交流。而作为网络通信的核心要素,网络协议、socket、cookie和session则是网络通信的灵魂。 一、网络协议 网络协议是计算机和网络设备之间相互通信的规则和标准…...

IOS+Appium+Python自动化全实战教程

由于公司的产品坐落于不同的平台,如ios、mac、Android、windows、web。因此每次有新需求的时候,开发结束后,留给测试的时间也不多。此外,一些新的功能实现,偶尔会影响其他的模块功能正常的使用。 网上的ios自动化方面的…...

华硕灵耀XPro(UX7602ZM)原装Win11系统恢复安装教程方法

华硕灵耀XPro(UX7602ZM)原装Win11系统恢复安装教程方法: 第一步:需要自备华硕6个底包工厂安装包(EDN.KIT.OFS.SWP.HDI.TLK)或者自己备份的iso/esd/wim等镜像恢复 支持系列: 灵耀系列原装系统 无畏系列原装系统 枪…...

SpringBoot整合Redis,redis连接池和RedisTemplate序列化

SpringBoot整合Redis 1、SpringBoot整合redis1.1 pom.xml1.2 application.yml1.3 配置类RedisConfig,实现RedisTemplate序列化1.4 代码测试 2、SpringBoot整合redis几个疑问?2.1、Redis 连接池讲解2.2、RedisTemplate和StringRedisTemplate 3、RedisTemp…...

学习课题:逐步构建开发播放器【QT5 + FFmpeg6 + SDL2】

目录 一、播放器开发(一):播放器组成大致结构与代码流程设计 二、播放器开发(二):了解FFmpeg与SDL常用对象和函数 三、播放器开发(三):FFmpeg与SDL环境配置 四、播放器开发(四):多线程解复用与解码模块实现 五、播放器开发(五…...

Linux 6.7全面改进x86 CPU微码加载方式

导读最近,社区在清理 Linux 上的 Intel/AMD x86 CPU 微代码加载方面做了大量的工作,这些工作现已合并到 Linux 6.7 中。 由于在启动时加载 CPU 微代码对于减少不断出现的新 CPU 安全漏洞以及有时解决功能问题非常重要,Thomas Gleixner 最近开…...

【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载,docs无法加载,redocs无法使用

使用fastapi的时候,swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有时候无法加载(国内环境原因或者是局域网屏蔽),此时就需要自己用魔法下载好对应文件,然后替换到fastapi里面去。 fastapi里面依靠这…...

算法-中等-链表-两数相加

记录一下算法题的学习11 两数相加 题目:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字…...

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用 1.概述 在学习51单片机过程中,选择了STC的12C2052AD型号单片机作为入门芯片。前几个课题实验使用默认的内部晶振烧录程序,运行都没有问题。 选择一个LED亮度渐变的课题做实验&…...

使用STM32+SPI Flash模拟U盘

试验目的:使用STM32F103C8T6 SPI Flash(WSQ16)实现模拟U盘的功能 SPI Flash读写说明: Step1 设置SPI1 用于读取SPI Flash; Step2:设置SPI Flash 的使能信号 Step3:使能USB通信 Step4&#xf…...

【自主探索】基于 frontier_exploration 的单个机器人自主探索建图

文章目录 一、概述1、功能2、要求 二、使用方法1、用于运行演示2、用于开发人员2.1. 探索无/地图数据2.2. 使用 /map 数据进行探索 三、提供的组件1、explore_client1.1. 调用的操作1.2. 订阅主题1.3. 发布主题 2、explore_server2.1. 提供的操作2.2. 调用的操作2.3. 调用的服务…...

模板初阶(1):函数模板,类模板

一、函数模板 1.1 概念 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的特定类型版本。 格式&#xff1a; template <typename T>或template <class T> template <class T>…...

AIGC: 关于ChatGPT中生成输出表格/表情/图片/图表这些非文本的方式

ChatGPT 不止是 文本输出 ChatGPT是一个文本模型, 它本身并不能直接去生成图片图表等内容在我们的工作当中&#xff0c;经常需要通过表格, 图表的方式去进行数据的处理和展示在这种情况下&#xff0c;GPT由于不支持去直接的生成图片和图表&#xff0c;我们还能够使用它的GPT帮…...

gen_arrow_contour_xld

area_center (SymbolRegions, Area, Row, Col) gen_arrow_contour_xld (Arrow, Row sin(rad(Orientation)) * 70, Col - cos(rad(Orientation)) * 70, Row - sin(rad(Orientation)) * 70, Col cos(rad(Orientation)) * 70, 25, 25) gray_range_rect&#xff1a;用一个矩形…...

智能时代的智能工具(gpt)国产化助手

目前gpt对代码以及其他领域都是可以支持&#xff0c;在国内有很多&#xff0c;常用的百度的 文心一言 &#xff0c;阿里的 通义千问 &#xff0c;还有&#xff08;“豆包”&#xff0c;“”讯飞星火“”&#xff09;等&#xff0c;除了写代码可以外&#xff0c;也可以很好的支持…...

量子计算 | 解密著名量子算法Shor算法和Grover算法

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…...

缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置 前言 在 Python 的logging模块中&#xff0c;它不仅提供了基础的日志功能&#xff0c;还拥有一系列高级配置选项来满足复杂应用的日志管理需求。 说到logging 模块的高级配置&#xff0c;必须提及日…...

​LeetCode解法汇总1410. HTML 实体解析器

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 「HTML 实…...

OpenGL 绘制旋转球(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里其实就是指三个互相垂直的三个圆形,正好之前已经完成了圆形平面的绘制,那么这里就需要对之前的圆形进行一些改造,使得它们可以以任意一种姿态在OpenGL中进行绘制(添加变换矩阵)。 这里同样对其进行封装,具体内容如…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...