Cypress哪些独特的地方

简介: Cypress哪些独特的地方

大家好,我是阿萨。8月开始了,夏日未央。学习的好时机。大家一起加油。好好学习,天天向上。Cypress的基本用法基本都讲解完了。这一期,总结下Cypress 比其他 Web UI 自动化更好的地方。


一,闭包(Closure)


Cypress 中, 保存一个值或者引用对的最好方式是使用闭包。其中then 就是Cypress的典型应用。


先介绍一个场景: 有个button, 在点击了提交按钮后,这个button的文本会 变化。 然后我们写一个用例来比较下 form 提交后,button 会变化的场景。


代码如下:

it('test then', function() {        cy.get('btn').then(($btn)=>{const txt=$btn.text()            cy.get('form').submit()            cy.get('btn').should(($btn2)=>{                expect($btn2.text()).not.to.eq(txt)                expect($btn2.text()).not.to.eq(txt)        })    }


二, 变量和别名。


Cypress 可以使用wrap 或者as 变量去给元素赋值或者实现变量共享。


  1. wrap

我们先看wrap 的典型使用场景。

通过wrap 传递变量。


const getName =()=>{return 'Sarah'        }
cy.wrap({name:getName}).invoke('name').should('eq','Sarah')

来看看wrap的语法:


cy.wrap(subject)cy.wrap(subject, options)


常见用法,除了上面的例子,还有如下2种;


cy.get('form').within(($form) => {// ... more commands
  cy.wrap($form).should('have.class', 'form-container')})
cy.get('button').then(($button) => {// $button is a wrapped jQuery elementif ($button.someMethod() === 'something') {// wrap this element so we can// use cypress commands on it    cy.wrap($button).click()  } else {// do something else  }})
// import application code for logging inimport { userService } from '../../src/_services/user.service'
it('can assert against resolved object using .should', () => {  cy.log('user service login')const username = Cypress.env('username')const password = Cypress.env('password')
// wrap the promise returned by the application code  cy.wrap(userService.login(username, password))// check the yielded object    .should('be.an', 'object')    .and('have.keys', ['firstName', 'lastName', 'username', 'id', 'token'])    .and('contain', {      username: 'test',      firstName: 'Test',      lastName: 'User',    })
// cy.visit command will wait for the promise returned from// the "userService.login" to resolve. Then local storage item is set// and the visit will immediately be authenticated and logged in  cy.visit('/')// we should be logged in  cy.contains('Hi Test!').should('be.visible')})


2. as

as 是用来分配别名供以后使用。

语法:


.as(aliasName)

常见用法:


cy.get('.main-nav').find('li').first().as('firstNav') // Alias element as @firstNavcy.intercept('PUT', '/users').as('putUser') // Alias route as @putUsercy.stub(api, 'onUnauth').as('unauth') // Alias stub as @unauthcy.spy(win, 'fetch').as('winFetch') // Alias spy as @winFetch


给元素加个别名

it('disables on click', () => {  cy.get('button[type=submit]').as('submitBtn')  cy.get('@submitBtn').click().should('be.disabled')})

对用cy.intercept()定义的被拦截路由进行别名,然后使用cy.wait()等待别名路由。


cy.intercept('PUT', '/users', { fixture: 'user' }).as('editUser')
// we'll assume submitting `form` triggers a matching requestcy.get('form').submit()
// once a response comes back from the `editUser`// this `wait` will resolve with the subject containing `url`cy.wait('@editUser').its('url').should('contain', 'users')


说白了, 这2个传递变量的方式就是为了规避Cypress的异步执行的坑。


明天讲解Cypress的那些坑。


今天就到这了。

相关文章
|
6月前
|
JavaScript 前端开发 程序员
程序员必备技能之JS模块化,改变你的JavaScript开发方式!(一)
程序员必备技能之JS模块化,改变你的JavaScript开发方式!
|
3月前
|
JavaScript 前端开发 安全
TypeScript:解锁JavaScript的超级英雄模式!类型系统如何化身守护神,拯救你的代码免于崩溃与混乱,戏剧性变革开发体验!
【8月更文挑战第22天】TypeScript作为JavaScript的超集,引入了强大的类型系统,提升了编程的安全性和效率。本文通过案例展示TypeScript如何增强JavaScript:1) 显式类型声明确保函数参数与返回值的准确性;2) 接口和类加强类型检查,保证对象结构符合预期;3) 泛型编程提高代码复用性和灵活性。这些特性共同推动了前端开发的标准化和规模化。
59 0
|
6月前
|
算法 程序员 开发者
探寻代码世界中的独特注释
作为开发者在编程开发中,注释是我们编写的代码中不可或缺的一部分,尽管我们常常强调清晰的代码本身就是最好的文档,但注释依然在软件开发的全生命周期中发挥着不可替代的关键作用,扮演着关键的角色,帮助我们更好地理解和维护代码。而在代码注释的海洋中,有时我们会发现一些独特而富有创意的注释,它们既有幽默感,又蕴含着智慧,或让人会心一笑,或引发深思。有些注释展现了开发者的幽默和创造力,通过有趣的文字让我们在编码过程中轻松一笑;有些注释则引发了思考,激发了我们对更好解决方案的探索和思考;还有些注释融入了文化和历史元素,为代码增添了趣味和人文关怀。代码注释不仅仅是对代码功能的解释,更是程序员与读者之间的沟通桥梁
52 1
探寻代码世界中的独特注释
|
5月前
|
JSON 自然语言处理 前端开发
学会这个插件,职业生涯少写 1w 行代码。
学会这个插件,职业生涯少写 1w 行代码。
42 0
|
6月前
|
Web App开发 JavaScript 前端开发
程序员必备技能之JS模块化,改变你的JavaScript开发方式!(二)
程序员必备技能之JS模块化,改变你的JavaScript开发方式!
|
JavaScript 前端开发 开发工具
简简单单一个vite⚡⚡插件搞定用户的另类需求——自给自足的感觉真好
简简单单一个vite⚡⚡插件搞定用户的另类需求——自给自足的感觉真好
|
存储 JavaScript 前端开发
20个JS精简代码无形装逼集合,最为致命,记得收藏好
20个JS精简代码无形装逼集合,最为致命,记得收藏好
|
测试技术
Cypress的那些独特的地方
大家好,我是阿萨。12月是学习的好时机。大家一起加油。好好学习,天天向上。Cypress的基本用法基本都讲解完了。这一期,总结下Cypress 比其他 Web UI 自动化更好的地方。
189 0
|
JSON API 数据格式
工具函数(不知道你们能不能用得上)
工具函数(不知道你们能不能用得上)