Cypress的哪些坑

311 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情 大家好,我是阿萨。昨天讲解了Cypress的那些独特的地方。今天我们来学习下Cypress 的那些坑。

一. 异步

Cypress执行的代码是异步的,异步是啥意思呢? 就是不按照代码顺序去执行代码,它随机运行的,所以很有可能后写的代码先执行。先写的代码后执行。

首先看如下代码:

const btn=cy.get('#btn)
btn.find('btn2').click()

如果在Cypress中写如上的代码,一定会失败。失败的原因是Cypress是异步的。所以有可能第二句代码先执行,所以导致 btn 是underfined。最终用例失败。

二.async /await 不工作

Cypress 不支持async 和await代码。 虽然Cypress 类似于Promise,但是不同于 Promise, Promise 本身没有重试的概念,但Cypress 却支持命令自动重试。

刚才讲解了异步,肯定有人说,那我不用异步,直接调用async 和await 是不是就可以了。可惜并不管用。 它不生效。

三. 赋值永远失败

自动化测试经常会把返回值传递给 下一个请求。 参数传递是写脚本经常见到的事情。所以大家在传递参数的时候一定要注意 传递参数的方式。

describe('Refer', function(){
let testVar    
it('testVar is null',function(){
cy.visit('https://www.baidu.com') 
cy.contains('textbox').then(($el)=>{
testVar = $el.text()
cy.log(testVar)  
// 这里值不为空 
}) 
cy.log(testVar) 
// 这里值永远为空
})})

四. 同源策略

同源策略是浏览器安全的基石。 这也意味着 当 2个iframe 直接有访问时,必须同时满足 协议相同,域名相同,端口相同的三个条件。这个限制就会导致如下代码直接报错。 同源策略或导致 有重定向的网站,不同域名的网站访问出现问题。大家要注意这一点。

describe('Invalid URL visit', function(){
let testVar
it('invalid visit',function(){
cy.visit('https://www.baidu.com')

        cy.visit('https://www.taobao.com') 
        
        })

})

大家日常写脚本的时候避免以上四个坑,尤其是赋值的坑。简直被坑惨了。