Selenium41-Cookie管理

HTTP协议无状态特性

  • 什么是一次会话

    • 用户打开浏览器访问某个网站, 在这个网站上浏览任意页面, 访问完成后将浏览器关闭的过程称为是一次会话
  • HTTP协议是无状态的协议,带来的问题

    • 一旦数据交换完毕,客户端与服务器的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话
    • 也就是说即使第一次和服务器连接后并登录成功后,第二次请求服务器依然不能直到当前的请求是那个用户

Cookie

  • cookie 就是浏览器储存在用户电脑上的一小段文本文件,是纯文本格式,不包含任何可执行的代码。Web 服务器就可以使用这些信息来识别不同的用户

Cookie典型的应用场景:

  • 用户第一次登陆时,勾选下次直接登录或记住密码

Cookie工作原理

Cookie解决的问题

  • Cookie就是为了记住用户状态,使用方式如下
    • 第一次登录服务器后,如果需要记录该用户状态,服务器就使用Response向客户端浏览器颁发一个Cookie,浏览器会把Cookie数据保存在本地。
    • 该用户发送第二次请求的时候,就会自动的把上次请求存储的Cookie数据自动的携带给服务器,服务器检查该Cookie存储name、value等信息,以此来辨认用户状态。
    • 服务器也可以根据业务需要修改Cookie的内容

Cookie里用键值对格式存储的信息内容主要有

  • name:Cookie信息名--必填项
  • value:Cookie的信息的值--必填项
  • expire:过期时间
  • domain:域名
  • path:路径,如果是/,代表所有路径
  • secure:True代表只有https能使用Cookie,False代表http和https都可以使用。
  • httpOnly:True代表不允许js脚本使用Cookie(保证网站安全,防止XSS攻击)

Selenium自动化测试中Cookie的使用

  • webdriver可以读取、添加和删除Cookie信息。

Selenium如何实现自动登录

  • pageobject里的前台登录页实现类里增加以下方法,进行cookies操作完成自动登录
    • save_cookies:保存前台页登录Cookies到txt格式的文件里,按照用户来保存,不同用户存储在不同文件里。
    • read_cookies:如果存在Cookies文件,就从txt格式的文件读取Cookies数据,如果不存在,就登录然后保存一个Cookies文件。
    • login_success:读取Cookies信息后,加入到当前驱动对象里,再打开登录页,完成自动登录操作。

保存前台页登录Cookies到文件里

  • 保存前台页登录Cookies
    • 新建一个cookies文件夹,把前台页登录Cookies按照用户进行保存

读取Cookies文件里的数据

  • 如果文件存在,读取文件里的cookies信息返回
  • 如果文件不存在,登录保存Cookies并返回

封装登录成功方法

login_success: 读取Cookies信息后,加入到当前的驱动对象里,在打开登录页,完成自动登录操作

删除cookies文件

问题:Cookies是有有效期的,不是一直有效
解决方案:运行测试套件前,删除所有的Cookies文件

优化测试套件

  • 运行测试套件前,删除Cookies文件
from ecshop.utils.delete_cookies import DelCookies
if __name__ == "__main__":
    DelCookies().delete_cookies_files()
    …………

测试案例

  • 前台留言板留言功能,增加两组测试登录后留言功能的测试数据

修改测试用例类

  • 修改测试用例代码:testcase包里的testcase9002.py

注意事项

  • 在Selenium中记录cookie信息,并在下次测试时加入cookie信息,要求不能使用localhost作为测试服务器地址。
  • 需要修改为本机具体的对外IP地址。
posted @ 2022-12-29 23:00  暄总-tester  阅读(95)  评论(0)    收藏  举报