携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
spread 作用
- 将数组拆分为多个参数
- 有点像 py 里面的 *array
语法格式
.spread(callbackFn)
.spread(options, callbackFn)
callbackFn
- 回调函数
- 将数组拆分后作为函数的多个参数
options 参数
timeout: 命令超时时间
正确用法
cy.getCookies().spread(() => {})
错误用法
// 不能直接他通过 cy 调用
cy.spread(() => {})
// locations() 返回的不是一个数组
cy.location().spread(() => {})
命令返回结果
返回回调函数的返回值
实际栗子
代码
运行结果
可以看到
- spread 命令不会出现在命令日志中
- spread 命令的回调函数的参数个数无论是多了还是少了都不会报错,少了不会获取后面的值,多了则是一个空值
cloest作用
获取匹配到的第一个DOM元素(无论是它本身还是它的祖先之一)
语法格式
.closest(selector)
.closest(selector, options)
options 参数
- log: 是否将命令显示到命令日志中,默认 true
- timeout: 命令超时时间
正确用法
// 找到离 td 标签元素最近的 .filled 元素
cy.get('td').closest('.filled')
上一条命令返回的必须是一个 DOM 元素
错误用法
// 不能通过 cy 直接调用
cy.closest('.active')
// url() 返回的并不是 DOM 元素
cy.url().closest()
命令返回结果
匹配成功的 DOM 元素
实际栗子
代码
测试结果
cy.get() 找到的是一个 span 标签
作用
获取指定名称的 Cookie
语法格式
cy.getCookie(name)
cy.getCookie(name, options)
name 必传
options 参数
- log: 是否将命令显示到命令日志中,默认 true
- timeout: 命令超时时间
正确用法
// 获取 token 这个 Cookie
cy.getCookie('token')
命令返回结果
返回一个 Cookie 对象,并且包含以下属性
- domain
- expiry (如果有)
- httpOnly
- name
- path
- sameSite (如果有)
- secure
- value
注意: 当找不到指定 Cookie 时,该命令会返回 null
实际栗子
栗子一:直接访问网站
代码
- 可以用 .should(exist) 判断 cookie 对象是否存在
- 也可以用 .should('have.property') 判断这个 cookie 对象的某个属性是否包含指定的值
- 最后用 .then() 暂存 cookie 对象,以便后续扩展使用
运行结果
getCookie 返回结果
一个 cookie 对象一定会包含上面的六个属性
栗子二:简单登录页面
代码
//<reference types="cypress" /R>
describe('getCookie 登录页面', function () {
const username = 'jane.lane'
const password = 'password123'
before(function () {
// 登录操作
cy.visit("http://localhost:7079/login")
cy.get("input[name=username]").type(username)
cy.get("input[name=password]").type(password)
cy.get("form").submit()
})
it('获取登录后的 cookie', function () {
cy.getCookie("cypress-session-cookie")
.should('exist')
.should('have.property', 'domain', "localhost")
.then((cookies) => {
cy.log(cookies)
})
})
})