Cypress系列90- Cypress.Cookies 命令详解以及如何跨测试用例共享 Cookies

如果想从头学起Cypress,可以看下面的系列文章哦

https://www.cnblogs.com/poloyy/category/1768839.html

 

Cypress.Cookies 共有三个命令

Cypress.Cookies.debug(enable, options)

Cypress.Cookies.preserveOnce(names...)

Cypress.Cookies.defaults(options)

 

Cypress.Cookies.debug(enable, options)

作用

  • 是否启用 Cookie 调试功能
  • 更加易于了解 Cypress 是如何操作 Cookie 的

 

参数讲解

enable

  • true:启用,默认,启用后在开发者工具(F12)的 Console 中可以看到详细的 Cookie 操作日志
  • false:不启用,Console 不会显示 Cookie 操作日志

 

options

verbose:是否详细打印 Cookie 操作日志,默认 true

 

栗子一

代码

 

运行结果(Console)

能看到设置和清除 Cookie 都有详细的操作日志

  

栗子二

代码

 

运行结果(Console)

只显示 Cookie 名称,不会显示 Cookie 对象

 

栗子三

代码

 

运行结果(Console)

没有 Cookie 的操作日志

 

Cypress.Cookies.preserveOnce(names...)

前言知识

之前也讲过,Cypress 会在每次测试前自动清除所有 Cookie,以防止在测试用例之间共享状态

 

Cypress 为啥要自动清除 Cookie?

  • 通过在每次测试之前清除 Cookie,可以确保始终从干净状态开始测试
  • 从一个干净的状态开始,可以防止测试用例彼此耦合,也可以防止在一项测试中对应用程序中的某些内容进行更改而影响下游的情况

 

实际场景

如果不保存 Cookie,则每次测试前都需要登录一次,这将大大浪费不必要的测试时间

 

Cypress 如何保存 Cookie

  •  Cypress.Cookies.preserveOnce(names...) 命令可以保存 Cookie,使它在多个测试用例间共享
  • 注意:目前如果使用的是基于 Session 的 Cookie,此命令有效

 

实际使用的模板

 

实际栗子

测试用例代码

两个测试用例,主要校验是否 Cookie 是否能共享

 

commands.js 代码

自定义了一个 login 方法,主要就是登录操作 

 

运行结果

Cookie 成功在多个测试用例之间共享

 

Cypress.Cookies.defaults(options)

作用

  • 设置全局默认 Cookie
  • 可以修改全局默认值并保留一组 Cookie,这些 Cookie 将始终在测试用例之间保留
  • 只要调用了这个方法,将在其他测试用例中都会生效

 

重点

  • 在 cypress/support/index.js 中配置此命令是绝佳选择
  • 因为它会在所有测试文件之前加载

 

options 讲解

只有一个 preserve 参数,接受下面四种数据类型

  • String
  • Array
  • RegExp
  • Function

 

使用方式

// 所有名为 cypress-session-cookies 将不会被清除
Cypress.Cookies.defaults({
    preserve: 'cypress-session-cookies'
})

// 所有名为 cypress-session-cookies 或 sessions_id 将不会被清除
// 多个 Cookie 可以用数组来存储
Cypress.Cookies.defaults({
  preserve: ['sessions_id', 'cypress-session-cookies']
})

// 满足此正则表达式的 Cookie 将不会被清除
Cypress.Cookies.defaults({
  preserve: /session|cookie/
})

Cypress.Cookies.defaults({
  preserve: (cookie) => {
    // 可以在这里实现自己的逻辑
    // 如果函数返回 true, 那 Cookie 则不会被清除
  }
})

一般用前三个就能满足大部分场景了

 

实际栗子

测试用例代码

 

support/index.js 代码

  • 使用正则表达式去匹配
  • 含义:cookie 名称包含 session 或 cookie

 

运行结果

Cookie 也共享成功了

 

总结

  • 这种方式感觉更适合在项目中使用
  • 一般我们都会提前知道需要的 Cookie 是什么,此时就能提前在 support/index.js 中调用此命令去设置 Cookie 了

 

原文地址:https://blog.51cto.com/u_12020737/2838210

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本文技术难度★★★,如果前编内容顺利执行,请继续。如果Selenium尚无法灵活运用的读者,本文可能难度较大。“理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打拼职场的老司机。不记得没关系,只需要知道:有这么一位IT老司机,穿上西装,带大家打拼职场!
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html Cypress简介基于JavaScript的前端测试工具,可以对浏览器中运行的任何内容进行快速、简单、可靠的测试Cypress是自集成的,提供了一套完整的端到端测试,无须借助其他外部
web技术已经进化了,web的测试技术最终还是跟上了脚步,新一代的web自动化技术出现了?Cypress可以对在浏览器中运行的任何东西进行快速、简单和可靠的测试。“Thewebhasevolved.Finally,testinghastoo.Fast,easyandreliabletestingforanythingthatrunsinabrowser.”
不很久不很久以前据说某家公司有两位前端,天天撸bug,为啥嘞?只怪测试MM倾人国,轻语哥哥有bug。✧(๑•̀ㅂ•́)و✧可是最近两位有点犯愁Σ(っ°Д°;)っ。测试MM有几次提了紧急bug,都在旁边鼓励他们改bug了,可是线上bug重现排查比较麻烦,而且改了后还发现没改好,惹得测试MM潸然泪
我刚开始学习JavaScript并且一直在使用赛普拉斯来自动化一些回归测试.我当前编写的测试旨在验证链接的文本和页眉和页脚中的href.我遇到的问题是这些测试需要在各种环境中运行,我似乎无法访问cypress.json中设置的baseUrl属性,以便在我的断言中设置域.在后面的脚本中,它是行cy.ge
cypress在pycharm中编写首先打开pycharm,打开cypress项目 打开此文件  打开后需要在pycharm中设置js语言  设置成功后在intergration文件夹下,创建用例文件夹demo1,创建test.js文件编写代码:  此段代码为进入百度页面,输入Jaredhan,点击搜索后等待1000ms 1、des
前言面试时间经常被问到:你的测试数据放哪?有没有做到测试数据和代码的分类?Cypress使用cypress/fixture目录存放json文件数据,cy.fixture()加载测试数据。官方文档参考https://docs.cypress.io/api/commands/fixture.html#Syntaxfixture使用在cypress/fixture目录写个
示例代码如下:比如现在要点击"loginFrame"中的"J_Quick2Static"按钮cy.get('#loginFrame',{timeout:2000}).then($iframe=>{cy.wrap($iframe.contents().find("#J_Quick2Static"));})
前言Cypress提供了hooks函数,方便我们在组织测试用例的时候,设置用例的前置操作和后置清理。类似于python的unittest里面的setUp和setUpclass功能HooksCypress提供了hooks函数。这些有助于设置要在一组测试之前或每个测试之前运行的条件。它们也有助于在一组测试
前言cypress上默认访问一个跨域的网页会出现异常:CypressdetectedacrossoriginerrorhappenedonpageloadAcrossoriginerrorhappenswhenyourapplicationnavigatestoanewURLwhichdoesnotmatchtheoriginpolicyabove.之前使用selenium的时候,不用关
前言先定位父元素,通过父元素定位子元素.children()通过父元素,定位子元素<olclass="traversal-breadcrumbbreadcrumb"><li><ahref="#">Home</a></li><li><ahref="#">Library</a></l
LoadDatafromTestFixturesinCypressWhencreatingintegrationtestswithCypress,we’lloftenwanttostubnetworkrequeststhatrespondwithlargedatasets.Allofthismockdatacanleadtotestcodethatishardtoread.Inthislesson,we’llseeh
我在应用程序中有一个端点.我们在每个请求中使用params中的不同操作来达到相同的api.网址/application/api样本请求有效负载1:{"action":"CARD_TRANSACTION_HISTORY","data":{"date_from":"2018-12-01","date_to":"2018-12-31","
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 前言啥是可操作类型?就是可以和DOM元素交互的命令,比如:点击,双击.....等等等这些命令模拟用户和应用程序交互,Cypress会触发浏览器事件,进而触发应用程序绑定的时间这一
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 前言重试(Retry-ability)是Cypress的核心概念之一,有助于我们写出更加健壮的测试 命令和断言Cypress测试中经常被调用的两种类型,仍以前面说到的 testLogin.js 为栗
前言做web自动化的时候,我们希望用例失败了能截图,这是之前用selenium写ui自动化用例的时候经常遇到的问题。cypress可以说是业界良心了,不仅帮我们失败的时候自动截图保存下来,还把每个用例都录制成了mp4的小视频,方便追踪问题的时候回复视频screenshots失败截图当我们用
一:Cypress简介随便着Web应用项目的不断发展,测试也要不断发展,Cypress是为现代网络打造的,基于JavaScript语言的一种前端自动化测试工具,测试也是如此,对浏览器中运行的所有内容进行快速,轻松和可靠的测试。Cypress是自集成的,它提供了一套完整的端到端的测试体验,正如官网上所说:安装C
1、fixture路径下创建.json文件夹,内容如下{"loginName":"huahua","password":"huahua"}  2、加载loginEmgs文件(后缀可省略),使用then读取数据before(()=>{cy.fixtures('loginEmgs').then((data)=>{this.data=data;})}) 3、使用数据cy.
命令行安装Cypress:npminstallcypress--save-devnpminit编辑package.json,添加如下的json语句:"scripts":{"open":"cypressopen"},然后执行命令npmrunopen,即可打开Cypresstestrunner:默认看到的examples文件夹里有很多现成的例子:我们在int
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 重试的介绍学习前的三问什么是重试测试为什么重试很重要如何使用重试 为什么要重试使用Cypress进行自动化测试时,仍然会存在一些难以验证的行为,并使得测试变得