Cypress系列(25)- invoke()、wrap()、its()命令详解

701 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

invoke作用

对前一条命令返回的结果进行调用方法

 

语法格式

.invoke(functionName)
.invoke(options, functionName)
.invoke(functionName, args...)
.invoke(options, functionName, args...)

 

参数说明

  • functionName: 需要调用的方法名
  • options: log 和 timeout
  • args: 传递给函数的参数,数量没有限制

 

正确使用的小栗子

// 调用 animate 方法
cy.wrap({ animate: fn }).invoke('animate')

// 找到.modal 元素并调用 show 方法
cy.get('.modal').invoke('show')           

 

栗子

断言函数的返回值

 

调用函数并传递参数

 

作为函数的属性被调用

wrap作用

  • 返回传递给它的对象
  • 返回的是一个 Promise 对象,可以直接接 Cypress 其他命令
  • 如果传递给它的就是一个 Promise 对象,则返回它的值

 

语法格式

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

 

subject

需要返回的对象

 

options

  • log: 是否将命令显示到命令日志中,默认 true
  • timeout: 命令超时时间

最简单的栗子

// 声明一个整数
cy.wrap(123).should('eq', 123)

// 声明一个字符串
cy.wrap('abc').and('contain', 'a')

 

声明一个对象的栗子

 

对象属性值是函数的栗子

 

页面元素 Element 的栗子

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

www.cnblogs.com/poloyy/cate…

 

its作用

获取上一条命令结果的属性值

 

语法格式

.its(propertyName)
.its(propertyName, options)

 

参数说明

propertyName: 索引、属性名、要获取的嵌套属性名称

options: log、timeout

 

命令返回结果

属性值

 

正确写法

cy.wrap({ width: '50' }).its('width') // 获取宽度属性
cy.window().its('sessionStorage')     // 获取 sessionStorage 属性

 

错误写法

cy.its('window')                // 不能链接在 cy 后面
cy.clearCookies().its('length') // clearCookies 并不返回对象

 

各种栗子

获取字典对象的属性值

cy.wrap({age: 52}).its('age').should('eq', 52) // true

 

数组对象,根据索引取值

cy.wrap(['polo', 'yy']).its(1).should('eq', 'yy')

 

获取元素的属性值

cy
.get('ul li')
.its('length')
.should('be.gt',4)

 

获取字符串对象的属性值

cy
.url()
.its('length')
.should('be.gt', 20)

 

属性值是函数

const fn = () => {
      return 42
}

cy.wrap({getNum: fn}).its('getNum').should('be.a', 'function')

返回的是函数对象本身,而不是 return 的值

 

获取嵌套属性值

const user = {
  contacts: {
    work: {
      name: 'Kamil'
    }
  }
}

cy.wrap(user).its('contacts.work.name').should('eq', 'Kamil') // true