Cypress系列(38)- each()、within() 命令详解

323 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

each作用

遍历数组数据结构(具有 length 属性的数组或对象)

 

语法格式

.each(callbackFn)

 

callbackFn

  • 回调函数
  • 可以拥有三个参数:value、index、collection

 

正确用法

// 遍历每个 li 元素
cy.get('ul>li').each(() => {...})

// 遍历每个 cookie 
cy.getCookies().each(() => {...})

 

错误用法

// 不能直接通过 cy 调用
cy.each(() => {...})   

// location() 返回的结果不是一个数组
cy.location().each(() => {...}) 

 

命令返回结果

返回和上一条命令一样的结果

 

实际栗子

代码

 

栗子一的结果

遍历三次,每次都可以获取 li 元素和索引值(从 0 开始)

 

栗子二的结果

  • 若想提前结束遍历,可以通过判断然后直接 return false 
  • 若想在 .each() 命令后继续操作原始数组(未遍历前),可以直接在 .each() 命令后接 .then() 命令进行操作

within 作用

  • 将所有后续 cy 命令的作用域限定在此元素内
  • 在特定的元素组(例如  )中工作时很有用

 

语法格式

.within(callbackFn)
.within(options, callbackFn)

 

callbackFn

  • 回调函数
  • 第一个参数是上一条命令的返回结果(必须是元素)

 

options 参数

log: 是否将命令显示到命令日志中,默认 true

 

正确用法

cy.get('form').within(($form) => {
     // 在回调函数里,cy 命令的作用域将限定在 form 中
}) 

 

错误用法

// 不能直接他通过 cy 调用
cy.within(() => {})

// getCookies() 返回的不是一个元素
cy.getCookies().within(() => {})

 

命令返回结果

返回和上一条命令一样的结果

 

实际栗子

代码

重点:回调函数里的 cy.get() 只会从 form 表单里面找元素,而不是整个页面

 

get() 和 within() 命令的返回结果

两个命令的返回结果都是 form 表单 

 

 

获取输入框的效果