最强自动化测试框架Playwright(7)- 使用cookie避免重复登录

playwright在称为浏览器上下文的隔离环境中执行测试。这种隔离模型提高了可重复性,并防止了级联测试失败。测试可以加载现有的经过身份验证的状态。这消除了在每次测试中进行身份验证的需要,并加快了测试执行速度。

每次测试前登录

以下示例登录到 GitHub。执行这些步骤后,将对浏览器上下文进行身份验证。

  • 同步
page = context.new_page()
page.goto('https://github.com/login')# Interact with login form
page.get_by_label("Username or email address").fill("username")
page.get_by_label("Password").fill("password")
page.get_by_role("button", name="Sign in").click()
# Continue with the test

为每个测试重做登录可能会减慢测试执行速度。若要缓解此问题,可以重用现有身份验证状态。

重复使用已登录状态

Web 应用使用基于 Cookie 或基于令牌的身份验证,其中经过身份验证的状态存储为 Cookie 或存储在本地存储中。

 

在控制台使用localStorage可以打印出cookie。

 

Playwright 提供了 browserContext.storageState([options]) 方法,可以将该cookie保存到本地文件中。

context = browser.new_context(storage_state="state.json")

示例:

将cookie保存至state.json文件中

from playwright.sync_api import Playwright, expectdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://pity.fun/#/user/login")page.get_by_placeholder("用户名: tester").click()page.get_by_placeholder("用户名: tester").fill("tester")page.get_by_placeholder("密码: tester").fill("tester")page.get_by_role("button", name="登 录").click()expect(page.get_by_title("工作台")).to_be_visible()# 保存storage state 到指定的文件storage = context.storage_state(path="state.json")# ---------------------context.close()browser.close()with sync_playwright() as playwright:run(playwright)

 

从state.json获取cookie,在创建上下文时使用该cookie进行登录


from playwright.sync_api import Playwright, sync_playwrightdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)# 加载本地cookies,免登陆context = browser.new_context(storage_state="state.json")# 打开页面继续操作page = context.new_page()page.goto('https://pity.fun')page.pause()  # 打断点看是不是已经登录了context.close()browser.close()with sync_playwright() as playwright:run(playwright)
执行可以看到,打开浏览器后,已经登录了。

高级方案

会话存储

重用经过身份验证的状态包括 Cookie 和基于本地存储的身份验证。很少使用会话存储来存储与登录状态关联的信息。会话存储特定于特定域,不会在页面加载期间持久化。Playwright 不提供用于持久保存会话存储的 API,但以下代码片段可用于保存/加载会话存储。

import os
# Get session storage and store as env variable
session_storage = page.evaluate("() => JSON.stringify(sessionStorage)")
os.environ["SESSION_STORAGE"] = session_storage# Set session storage in a new context
session_storage = os.environ["SESSION_STORAGE"]
context.add_init_script("""(storage => {if (window.location.hostname === 'example.com') {const entries = JSON.parse(storage)for (const [key, value] of Object.entries(entries)) {window.sessionStorage.setItem(key, value)}}
})('""" + session_storage + "')")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/34844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈什么是云计算?以及它的应用

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 ​编辑 一、什么是云计算 二、云计算的优势与劣势? 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…

python编程基础与案例集锦,python编程入门经典

大家好,本文将围绕python编程基础与案例集锦展开说明,python编程入门与案例详解是一个很多人都想弄明白的事情,想搞清楚python入门程序例子需要先了解以下几个事情。 【程序1】 题目:输入一行字符,分别统计出其中英文字…

『CV学习笔记』Opencv和PIL Image以及base64编码互相转化

Opencv和PIL Image以及base64编码互相转化 文章目录 一. opencv&PIL.Image&Skimage1.1. opencv-python读取透明图片(带alpha通道)1.2. opencv、PIL.Image、Skimage读取的彩色图片维度区别1.3. opencv、PIL.Image转换二. base64和cv2 imge互相转换三. base64和PIL imge互…

射频入门知识-混频器-1

5.4混频电路-视频_哔哩哔哩_bilibili ​​​​​​​

【算法题】螺旋矩阵II (求解n阶Z形矩阵)

一、问题的提出 n阶Z形矩阵的特点是按照之(Z)字形的方式排列元素。n阶Z形矩阵是指矩阵的大小为nn,其中n为正整数。 题目描述 一个 n 行 n 列的螺旋(Z形)矩阵如图1所示,观察并找出填数规律。 图1 7行7列和8行8列的螺旋(Z形)矩阵 现在给出矩阵大小 n&…

数据结构入门:栈

目录 前言 1. 栈 1.1栈的概念及结构 1.2 栈的实现 1.2.1 栈的定义 1.2.2 栈的初始化 1.2.3 入栈 1.2.4 出栈 1.2.5 栈的元素个数 1.2.6 栈顶数据 1.2.7 栈的判空 2.栈的应用 2.1 题目一:括号匹配 2.1.1 思路 2.1.2 分析 2.1.3 题解 总结 前言 无论你是计算机科学专…

CVE漏洞复现-CVE-2021-22555 Linux Netfilter 权限提升漏洞

CVE-2021-22555 Linux Netfilter 权限提升漏洞 漏洞描述 近日,互联网公开了Linux Netfilter权限提升漏洞的POC及EXP,相关CVE编号:CVE-2021-22555。该漏洞在kCTF中被用于攻击kubernetes pod容器实现虚拟化逃逸,该漏洞已在Linux内…

用chatGPT从左右眼图片生成点云数据

左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…

Arduino驱动MQ2模拟烟雾传感器(气体传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 MQ2气体传感器,可以很灵敏的检测到空气中的烟雾、液化气、丁烷、丙烷、甲烷、酒精、氢气等气体,与Arduino结合使用,可以制作火灾烟雾报警、液化气、丁烷、丙烷、甲烷、酒精、氢气气体泄露报警等相…

面试题. 字符串压缩

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a…

【JavaEE进阶】Spring 更简单的读取和存储对象

文章目录 一. 存储Bean对象1. 配置扫描路径2. 添加注解存储 Bean 对象2.1 使用五大类注解存储Bean2.2 为什么要有五大类注解?2.3 有关获取Bean参数的命名规则 3. 使用方法注解储存 Bean 对象3.1 方法注解储存对象的用法3.2 Bean的重命名3.3 同⼀类型多个 Bean 报错 …

Spring Boot单元测试与Mybatis单表增删改查

目录 1. Spring Boot单元测试 1.1 什么是单元测试? 1.2 单元测试有哪些好处? 1.3 Spring Boot 单元测试使用 单元测试的实现步骤 1. 生成单元测试类 2. 添加单元测试代码 简单的断言说明 2. Mybatis 单表增删改查 2.1 单表查询 2.2 参数占位符 ${} 和 #{} ${} 和 …

学点Selenium玩点新鲜~,让分布式测试有更多玩法

前 言 我们都知道 Selenium 是一款在 Web 应用测试领域使用的自动化测试工具,而 Selenium Grid 是 Selenium 中的一大组件,通过它能够实现分布式测试,能够帮助团队简单快速在不同的环境中测试他们的 Web 应用。 分布式执行测试其实并不是一…

opencv,opengl,osg,vulkan,webgL,opencL,cuda

OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Ruby、MATLAB等…

安卓java A应用切换到B应用,来回切换不执行OnCreate

需求:安卓java如何做到A应用切换到B应用,如果B应用没启动就启动,如果B应用已经启动就仅仅切换到B应用。B应用再切换回A应用,不要重复执行OnCreate! 在 A 应用中的: 在 A 应用中,如果你希望在切换回 B 应用…

小米平板6Max14即将发布:自研G1 电池管理芯片,支持33W反向快充

明天晚上7点(8 月 14 日),雷军将进行年度演讲,重点探讨“成长”主题。与此同时,小米将推出一系列全新产品,其中包括备受瞩目的小米MIX Fold 3折叠屏手机和小米平板6 Max 14。近期,小米官方一直在…

分布式搜索ElasticSearch-ES(一)

一、ElasticSearch介绍 ES是一款非常强大的开源搜索引擎,可以帮我们从海量的数据中快速找到我们需要的内容。 ElasticSearch结合kibana、Logstash、Beats,也就是elastic stack(ELK),被广泛运用在日志数据分析,实时监控等领域。 …

accumulate函数的简单应用

accumulate函数是C numeric库中的一个函数&#xff0c;主要用来对指定范围内元素求和&#xff0c;但也自行指定一些其他操作&#xff0c;如范围内所有元素相乘、相除等。 使用前需要引用头文件&#xff1a; #include <numeric>函数共有四个参数&#xff0c;其中前三个为…

Ajax 笔记(二)—— Ajax 案例

笔记目录 2. Ajax 综合案例2.1 案例一-图书管理2.1.1 渲染列表2.1.2 新增图书2.1.3 删除图书2.1.4 编辑图书 2.2 案例二-背景图的上传和更换2.2.1 上传2.2.2 更换 2.3 案例三-个人信息设置2.3.1 信息渲染2.3.2 头像修改2.2.3 信息修改2.3.4 提示框 Ajax 笔记&#xff1a; Ajax…

React Native 列表组件基础知识

ScrollView 组件 ScrollView组件是一个容器滚动组件&#xff0c;当容器超出指定宽高时就可以进行滚动交互。 ScrollView组件是一次性渲染所有的 React 子组件&#xff0c;这在性能上是比较差的&#xff0c;所以不建议当列表特别长的时候使用此组件。 接下来列举几个常用的一…