Commands
-
should()同.and(),创建一个断言,断言会自动重试直到它们通过或超时。
.and(chainers)
.and(chainers, value)
.and(chainers, method, value)
.and(callbackFn)
使用案例
cy.get('.err').should('be.empty').and('be.hidden') // Assert '.err' is empty & hidden
cy.contains('Login').and('be.visible') // Assert el is visible
cy.wrap({ foo: 'bar' })
.should('have.property', 'foo') // Assert 'foo' property exists
.and('eq', 'bar') // Assert 'foo' property is 'bar'
-
as() 作用为分配别名以供以后使用,可在带有@前缀的cy.get()或cy.wait()命令中引用别名。在匹配多个相同名称的class和属性中很好用。
.as(aliasName)
使用方法
cy.get('.main-nav').find('li').first().as('firstNav') // Alias first 'li' as @firstNav
cy.route('PUT', 'users', 'fx:user').as('putUser') // Alias that route as @putUser
cy.stub(api, 'onUnauth').as('unauth') // Alias that stub as @unauth
cy.spy(win, 'fetch').as('winFetch') // Alias that spy as @winFetch
案例
it('disables on click', () => {
cy.get('button[type=submit]').as('submitBtn')
cy.get('@submitBtn').click().should('be.disabled')
})
通过和cy.fixture()
配合使用,可以使用this
来访问和获取到别名
beforeEach(() => {
cy.fixture('users-admins.json').as('admins')
})
it('the users fixture is bound to this.admins', function () {
cy.log(`There are ${this.admins.length} administrators.`)
})
另外,可以通过fixture()和as()给所有的路由命名
cy.route(/company/, 'fixture:company').as('companyGet')
cy.route(/roles/, 'fixture:roles').as('rolesGet')
cy.route(/teams/, 'fixture:teams').as('teamsGet')
cy.route(/users\/\d+/, 'fixture:user').as('userGet')
cy.route('PUT', /^\/users\/\d+/, 'fixture:user').as('userPut')
-
blur()和focus(),这就跟js的blur类似,就是从一个焦点的focus出来时,多值输入框,光标离开输入框的时候
使用案例
cy.get('[type="email"]').type('[email protected]').blur() // Blur email input
cy.get('[tabindex="1"]').focus().blur() // Blur el with tabindex
-
check(),在页面中用于chekbox(es)多选和radio(s)单选
使用案例
cy.get('[type="checkbox"]').check() // Check checkbox element
cy.get('[type="radio"]').first().check() // Check first radio element
cy.get('form input').check(['subscribe', 'accept'])//指定value="subscribe"和value="accept"的选中
cy.get('[type="radio"]').check('US') //指定value="US的radio选中
-
children()获取一组dom元素下所有的子元素
使用案例
cy.get('nav').children() // Yield children of nav
cy.get('ul.secondary-nav').children()
cy.get('ul').children('.active')
cy.get('.left-nav>.nav').children().should('have.length', 8)
-
clear() 清除value的值,用于
input
和textarea
使用案例:
cy.get('[type="text"]').clear() // Clear text input
cy.get('textarea').type('Hi!').clear() // Clear textarea
cy.focused().clear() // Clear focused input/textarea
cy.get('textarea').clear().type('Hello, World')
-
click()点击一个dom元素
使用方法
.click()
.click(options)
.click(position)
.click(position, options)
.click(x, y)
.click(x, y, options)
使用案例
cy.get('.btn').click() // Click on button
cy.focused().click() // Click on el with focus
cy.contains('Welcome').click() // Click on first el containing 'Welcome'
cy.get('.nav > a').click()
cy.get('img').click('topRight')
cy.get('#top-banner').click(15, 40)
cy.get('#collapse-sidebar').click('bottomLeft', { force: true })
cy.get('#footer .next').click(5, 60, { force: true })
.click()命令还可以与.type()命令结合使用键修饰符来触发,以便在单击时模拟字符序列,例如ALT + click。 为了使修饰键保持活动状态,应将{release:false}传递给.type()命令的选项。
// execute a SHIFT + click on the first
// { release: false } is necessary so that
// SHIFT will not be released after the type command
cy.get('body').type('{shift}', { release: false })
cy.get('li:first').click()