should
创建断言。断言会自动重试直到通过或超时。
info
.and()
的别名
info
注意: .should()
假设您已熟悉核心概念,如断言
语法
.should(chainers)
.should(chainers, value)
.should(chainers, method, value)
.should(callbackFn)
用法
正确用法
cy.get('.error').should('be.empty') // 断言 '.error' 为空
cy.contains('Login').should('be.visible') // 断言元素可见
cy.wrap({ foo: 'bar' }).its('foo').should('eq', 'bar') // 断言 'foo' 属性等于 'bar'
错误用法
cy.should('eq', '42') // 不应直接链式调用 'cy'
参数
chainers (String)
来自 Chai、Chai-jQuery 或 Sinon-Chai 的任何有效链式断言。
value (String)
断言链式断言的值。
method (String)
链式断言上调用的方法。
callbackFn (Function)
传递一个可以包含任意数量显式断言的函数。传递给函数的内容即为所产生的内容。
生成结果
在大多数情况下,.should()
产生与前一命令相同的主题。
cy.get('nav') // 产生 <nav>
.should('be.visible') // 产生 <nav>
然而,一些链式断言会改变主题。在下面的例子中,第二个 .should()
产生字符串 sans-serif
,因为链式断言 have.css, 'font-family'
改变了主题。
cy.get('nav') // 产生 <nav>
.should('be.visible') // 产生 <nav>
.should('have.css', 'font-family') // 产生 'sans-serif'
.and('match', /serif/) // 产生 'sans-serif'
.should()
是一个断言,可以安全地链式调用使用主题的进一步命令。
示例
链式断言
断言复选框被禁用
cy.get(':checkbox').should('be.disabled')
当前DOM元素被产生
cy.get('option:first')
.should('be.selected')
.then(($option) => {
// $option 被产生
})
值
断言类名为 'form-horizontal'
cy.get('form').should('have.class', 'form-horizontal')
断言值不为 'Jane'
cy.get('input').should('not.have.value', 'Jane')
当前主题被产生
cy.get('button')
.should('have.id', 'new-user')
.then(($button) => {
// $button 被产生
})
方法和值
断言锚元素具有href属性
// have.attr 来自 chai-jquery
cy.get('#header a').should('have.attr', 'href')
断言href属性等于 '/users'
cy.get('#header a').should('have.attr', 'href', '/users')
注意: have.attr
断言将主题从原始元素更改为属性的值
cy.get('#header a') // 产生元素
.should('have.attr', 'href') // 产生 "href" 属性
.and('equal', '/users') // 检查 "href" 值
焦点
断言按钮点击后输入框获得焦点
cy.get('#btn-focuses-input').click()
cy.get('#input-receives-focus').should('have.focus') // 等同于 should('be.focused')