【pytest、playwright】多账号同时操作

news2024/12/24 2:25:46

目录

 方案实现思路:

方案一:

方案二:


 方案实现思路:

依照上图所见,就知道,一个账号是pytest-playwright默认的环境,一个是 账号登录的环境

方案一:

直接上代码:

import time
from playwright.sync_api import Page, BrowserContext
import pytest
from pages.explore.explore import ExplorePage
from playwright.sync_api import expect
class TestLogin():
    @pytest.fixture(autouse=True)
    def for_each(self,page:Page):
        self.login = ExplorePage(page)
        # 打开页面1,已登录的账号进行操作
        self.login.gotoURL()
        yield
        print('后置操作')


    def testmore(self,playwright):
        browser = playwright.chromium.launch(channel='chrome', headless=False)
        context = browser.new_context()
        page2 = context.new_page()
        self.login2 = ExplorePage(page2)
        # 打开页面2,未登录的账号进行操作
        self.login2.gotoURL()

代码解读:

  • 在case执行前,会自动调用for_each方法,这里面默认的登录用户就是conftest.py中配置的用户,执行case时,我们又重新打开浏览器,重新创建一个context上下文,这里我们就是账号2了,此时是未登录状态。此时就有了两个浏览器同时打开,第一个是登陆状态,第二个是未登录状态~
  • 这种方式实现并不好,因为如果我们需要登录的话,很可能有些网站支持不了

方案二:

在conftest.py文件中来配置:

@pytest.fixture(scope='module')
def more_context(browser_context_args, browser, pytestconfig):
    # 将browser_context_args中配置的信息复制到context_args中,除了storage_state【这个是登录用户的信息】
    context_args = {k: v for k, v in browser_context_args.items() if k != 'storage_state'}
    # 获取新的登录用户的信息,并且需要将\\替换为/,否则找不到文件
    storage_state = str(pytestconfig.rootpath.joinpath('auth/cookie.json')).replace('\\', '/')
    # 从文件中读取出新的登录用户的信息,并且将内容填充到context_args的storage_state中
    # 关于新的登录用户信息,这部分,也可以不做,那就表示第二个用户是未登录状态,也可以满足一些自动化的测试点
    with open(storage_state, 'r') as file:
        context_args['storage_state'] = json.load(file)
    # 根据新的context_args信息,来创建新的context上下文对象
    context = browser.new_context(
        **context_args
    )
    return context

上述中cookie.json的内容怎么来,可以看这篇文章:【pytest、playwright】构建POM项目,以及解决登录问题,allure环境问题 

case中的实现:

import time

import playwright.sync_api
from playwright.sync_api import Page, BrowserContext
import pytest
from pages.explore.explore import ExplorePage
from playwright.sync_api import expect
class TestLogin():
    @pytest.fixture(autouse=True)
    def for_each(self, page:Page):
        self.login = ExplorePage(page)
        # 打开页面1,已登录的账号进行操作
        self.login.gotoURL()
        yield
        print('后置操作')


    def testmore02(self, more_context:BrowserContext):
        page2 = more_context.new_page()
        self.login2 = ExplorePage(page2)
        # 打开页面2,未登录的账号进行操作
        self.login2.gotoURL()
        time.sleep(5)
        print('账号2')

上述就会产生两个用户了,一个是playwright默认生成的,一个是我们手动创建的~

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

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

相关文章

Unity学习笔记 9.2D射线

下载源码 UnityPackage 1.Ray2D 让小球向右发射射线: Ray2D ray;void Start() {// Ray2D(起点,终点)ray new Ray2D(this.transform.position, Vector2.right);// Debug.DrawLine(起点,终点,颜色,显示时间)Debug.DrawL…

视图的作用

目录 视图的作用 创建视图 为 scott 分配创建视图的权限 查询视图 复杂视图的创建 视图更新的限制问题 更新视图中数据的部门编号(视图的存在条件) 限制通过视图修改数据表内容 创建只读的视图 复杂视图创建 oracle从入门到总裁:​​​​​​h…

阿里云ECS选型推荐配置

本文介绍构建Kubernetes集群时该如何选择ECS类型以及选型的注意事项。 集群规格规划 目前在创建Kubernetes集群时,存在着使用很多小规格ECS的现象,这样做有以下弊端: 网络问题:小规格Worker ECS的网络资源受限。 容量问题&…

网络链路层之(1)基础概念

网络链路层之(1)基础概念 Author: Once Day Date: 2024年3月27日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSD…

Fastjson配置消息转换器(时间格式问题)

问题: 我们可以看见,日期的格式有点问题。 由于ArticleListVO类的createTime成员变量是Date类型,默认是由java的Jackson来处理,使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法,例如&…

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…

【Git篇】复习git

文章目录 🍔什么是git⭐git和svn的区别 🍔搭建本地仓库🍔克隆远程仓库🛸git常用命令 🍔什么是git Git是一种分布式版本控制系统,它可以追踪文件的变化、协调多人在同一个项目上的工作、恢复文件的旧版本等…

金蝶BI方案治好我的数据分析困难症

结构分析、趋势分析、分布分析、对比分析……这还是大方向的,细分下来还会根据数据类型和具体场景不同而不同,不仅如此,每个月的数据分析需求还可能不同,导致分析量多且复杂,加班加点也忙不过来。但金蝶BI方案就不一样…

servlet开发详解

一、什么是servlet,干什么用的??? tomcat作为一个web服务器,也称作servlet容器。servlet只有放在web服务器中才能运行,不能独立运行。tomcat这个容器要做三件事:接收请求、处理请求和响应请求。…

VMware ESXi部署macOS Monterey

正文共:1024 字 30 图,预估阅读时间:2 分钟 最早使用黑苹果是在2015年,装在了古老的Acer商务本上(老樹發新芽,acer tm 4750g裝黑蘋果);上次安装黑苹果是在两年前(VMware…

uniapp写小程序如何实现分包

众所众知小程序上传的过程中对包的大小有限制,正常情况下不允许当个包超过2M,所以需要分包 需要再pages.json这个文件夹中进行配置 "pages": [{"path": "pages/index/index","style": {"navigationBarTit…

【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录 一. BlobServer架构1.BlobClient2. BlobServer3. BlobCache4. LibraryCacheManager 二、BLOB的生命周期1. 分阶段清理2. BlobCache的生命周期3. BlobServer 三、文件上下载流程1. BlobCache 下载2. BlobServer 上传3. BlobServer 下载 四. Flink中支持的BLOB文件类型1…

VTK 示例 基本的流程-事件交互、球体、

流程可以总结如下: 导入所需的头文件: 首先,导入了一系列 VTK 头文件,这些文件包含了所需的类和函数声明。 创建对象: 创建了两个球体(一个较大,一个较小),一个平面&…

Docker和 Containerd 的区别

自 Docker 开启了使用容器的爆发式增长,有越来越多的工具和标准来帮助管理和使用这项容器化技术,与此同时也造成了有很多术语让人感到困惑。 容器生态系统 容器生态系统是由许多令人兴奋的技术、大量的专业术语和大公司相互争斗组成的。 幸运的是&…

Windows平台cmake编译QT源码库,使用VScode开发QT

不愿意安装庞大的QT开发IDE,可以编译QT源码库。 下载源码可以用国内镜像,如清华大学的:Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我用的是 6.5.3,进去之后,不要下载整个源…

linux环境gitlab迁移到新服务器

目录 备份项目备份gitlab配置阿里云磁盘格式化准备 最近服务器中了挖矿病毒,清理几次,都没有搞定,只能重新安装gitlab 备份项目 先把项目备份到本地 git pull git remote prune origin确保本地代码是最新的并且拥有所有的分支 git remote …

unity 横版过关单向通行实现(PlatformEffector2D)

目录 前言一、什么是 PlatformEffector2D?二、使用步骤1.创建模型2.创建jump脚本3.PlatformEffector2D组件 三、效果总结 前言 在 2D 游戏中,处理角色与平台之间的交互是一个常见但复杂的任务。为了简化这一过程,Unity 提供了 PlatformEffec…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resol…

基于PHP高校网上教材征订系统的设计与实现(论文+源码)_kaic

高校网上教材征订系统设计与实现 摘 要 本高校网上教材征订系统是针对目前高校网上教材征订管理的实际需求,从实际工作出发,对过去的高校网上教材征订系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算…

VBA高级应用30例应用2:MouseMove鼠标左键按下并移动鼠标事件

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…