get
通过选择器或别名获取一个或多个DOM元素。
info
该命令的查询行为类似于jQuery中的$(...)
工作原理。
语法
cy.get(selector)
cy.get(alias)
cy.get(selector, options)
cy.get(alias, options)
用法
正确用法
cy.get('.list > li') // 获取.list中的<li>元素
参数
selector (字符串选择器)
用于过滤匹配DOM元素的选择器。
alias (字符串)
使用.as()
命令定义的别名,并通过@
字符和别名名称引用。
你可以使用cy.get()
获取基本类型、常规对象甚至DOM元素的别名。
当使用DOM元素的别名时,如果之前别名的DOM元素已失效,Cypress会重新查询DOM。
info
options (对象)
传入一个选项对象以更改cy.get()
的默认行为。
选项 | 默认值 | 描述 |
---|---|---|
log | true | 在命令日志中显示该命令 |
timeout | defaultCommandTimeout | 在超时前等待cy.get() 解析的时间 |
withinSubject | null | 在其中搜索子元素的元素。如果为null,则从根级DOM元素开始搜索 |
includeShadowDom | includeShadowDom 配置选项值 | 是否跨越shadow DOM边界并在返回结果中包含shadow DOM中的元素 |
生成结果
cy.get()
返回找到的DOM元素或别名查找的结果。cy.get()
是一个查询命令,可以安全地链式调用其他命令。
示例
选择器
获取输入元素
cy.get('input').should('be.disabled')
查找ul
内的第一个li
后代元素
cy.get('ul li:first').should('have.class', 'active')
查找下拉菜单并点击它
cy.get('.dropdown-menu').click()
查找5个具有指定data属性的元素
cy.get('[data-test-id="test-example"]').should('have.length', 5)
查找href属性包含"questions"的链接并点击它
cy.get('a[href*="questions"]').click()
查找id以"local-"开头的元素
cy.get('[id^=local-]')
查找id以"-remote"结尾的元素
cy.get('[id$=-remote]')
查找id以"local-"开头且以"-remote"结尾的元素
cy.get('[id^=local-][id$=-remote]')
查找id包含CSS特殊字符如".", ":"的元素
cy.get('#id\\.\\.\\.1234') // 使 用\\转义字符
在.within()
命令中使用cy.get()
由于cy.get()
是从cy
链式调用的,它总是在整个document
中查找选择器。唯一的例外是在.within()命令内部使用时。
cy.get('form').within(() => {
cy.get('input').type('Pamela') // 仅获取表单内的输入框
cy.get('textarea').type('is a developer') // 仅获取表单内的文本域
})
Get与Find的区别
cy.get
命令总是从cy.root元素开始搜索。在大多数情况下,这是document
元素,除非在.within()命令内部使用。.find命令则从当前主题开始搜索。
<div class="test-title">cy.get vs .find</div>
<section id="comparison">
<div class="feature">两者都是查询命令</div>
</section>
cy.get('#comparison')
.get('div')
// 会找到#comparison外部的div.test-title
// 和内部的div.feature
.should('have.class', 'test-title')
.and('have.class', 'feature')
cy.get('#comparison')
.find('div')
// 搜索范围仅限于#comparison元素树
// 所以只找到div.feature
.should('have.length', 1)
.and('have.class', 'feature')
别名
关于别名的详细解释,请阅读更多关于别名的内容。
获取别名为'todos'的元素
cy.get('ul#todos').as('todos')
//...进行一些操作...
//稍后获取todos
cy.get('@todos')
获取别名为'submitBtn'的元素
beforeEach(() => {
cy.get('button[type=submit]').as('submitBtn')
})
it('点击后禁用', () => {
cy.get('@submitBtn').should('be.disabled')
})
获取别名为'users'的fixture数据
beforeEach(() => {
cy.fixture('users.json').as('users')
})
it('点击后禁用', () => {
// 访问用户数组
cy.get('@users').then((users) => {
// 获取第一个用户
const user = users[0]
cy.get('header').contains(user.name)
})
})
规则
要求
cy.get()
需要链式调用一个返回DOM元素的命令。
断言
超时设置
cy.get()
可能会因等待元素存在于DOM中而超时。cy.get()
可能会因等待添加的断言通过而超时。
命令日志
获取输入框并断言其值
cy.get('input[name="firstName"]').should('have.value', 'Homer')
上述命令将在命令日志中显示为:

当点击命令日志中的get
命令时,控制台会输出以下内容:

历史
版本 | 变更 |
---|---|
5.2.0 | 添加了includeShadowDom 选项。 |