目录
命令
Cypress命令在被调用时不会立即执行,而是将自己加入队列稍后运行。命令可以链式调用,因为Cypress会为你管理一个Promise链,每个命令都会将"subject"传递给下一个命令,直到链结束或遇到错误。
了解更多关于命令链式调用的内容,请参阅命令链介绍。
Cypress命令可分为以下几类:
query
- 读取应用程序状态的命令assertion
- 对给定状态进行断言的命令action
- 像用户一样与应用程序交互的命令other
- 其他对编写测试有帮助的命令
查询命令与其他命令的区别在重试能力指南中有详细说明。
查询命令
查询命令是读取应用程序状态的Cypress命令。它们返回一个subject供后续命令操作或断言,并根据需要重试以确保它们返回的DOM元素或其他数据始终是最新的。
命令 | 用途 |
---|---|
.as() | 为后续使用分配别名。稍后可以在cy.get() 查询或cy.wait() 命令中引用该别名。 |
.children() | 获取一组DOM元素中每个元素的子元素。 |
.closest() | 获取与选择器匹配的第一个祖先元素。 |
.contains() | 通过文本内容选择DOM元素。 |
.document() | 获取活动页面的window.document 。 |
.eq() | 通过索引从集合中选择DOM元素。 |
.filter() | 使用选择器过滤元素。 |
.find() | 使用选择器查找后代元素。 |
.first() | 选择集合中的第一个项目。 |
.focused() | 获取当前获得焦点的DOM元素。 |
.get() | 通过选择器查找DOM元素,或读取之前使用.as() 命令创建的别名。 |
.hash() | 获取活动页面的URL哈希值。 |
.invoke() | 对之前返回的subject调用函数。 |
.its() | 获取之前返回的subject的属性值。 |
.last() | 选择集合中的最后一个项目。 |
.location() | 获取活动页面的window.location 对象。 |
.next() | 获取下一个兄弟元素。 |
.nextAll() | 获取所有后续兄弟元素。 |
.nextUntil() | 获取所有后续兄弟元素直到匹配选择器为止。 |
.not() | 使用选择器过滤选中的元素。 |
.parent() | 获取DOM元素的父元素。 |
.parents() | 获取DOM元素的所有父元素。 |
.parentsUntil() | 获取所有父元素直到匹配选择器为止。 |
.prev() | 获取前一个兄弟元素。 |
.prevAll() | 获取所有前一个兄弟元素。 |
.prevUntil() | 获取所有前一个兄弟元素直到匹配选择器为止。 |
.root() | 获取根DOM元素。 |
.shadow() | 遍历进入元素的shadow DOM。 |
.siblings() | 获取所有兄弟元素。 |
.title() | 获取活动页面的document.title 属性。 |
.url() | 获取活动页面的URL。 |
.window() | 获取活动页面的window 对象。 |
断言命令
断言命令是对应用程序状态进行断言的Cypress命令。它们会暂停测试直到满足给定条件或超时。了解更多关于Cypress断言的内容,请参阅断言介绍和断言参考。
命令 | 用途 |
---|---|
.and() | .should() 的别名。对应用程序状态进行断言。 |
.should() | 对应用程序状态进行断言。断言会自动重试直到通过或超时。 |
操作命令
操作命令是像用户一样与应用程序交互的Cypress命令。它们会等待元素可操作后再与页面交互。
了解更多关于操作命令的内容,请参阅可操作性指南。
命令 | 用途 |
---|---|
.check() | 勾选复选框或单选按钮元素。 |
.clear() | 清除输入框或文本区域的值。 |
.click() | 点击DOM元素。 |
.dblclick() | 双击DOM元素。 |
.rightclick() | 右键点击DOM元素。 |
.scrollIntoView() | 将元素滚动到视图中。 |
.scrollTo() | 滚动到特定位置。 |
.select() | 选择<select> 中的<option> 。 |
.selectFile() | 在HTML5输入元素中选择文件,或模拟将文件拖入浏览器。 |
.trigger() | 触发DOM元素上的事件。 |
.type() | 在DOM元素中输入内容。 |
.uncheck() | 取消勾选复选框。 |
其他命令
Cypress提供了多种辅助编写测试的额外命令。
命令 | 用途 |
---|---|
.blur() | 使焦点元素失去焦点。Blur不是一个操作命令,因为用户不能直接使元素失去焦点,只能聚焦新元素,但.blur() 可以作为测试快捷方式使用。 |
.clearAllCookies() | 清除所有浏览器cookie。 |
.clearAllLocalStorage() | 清除测试交互过的所有源的localStorage 数据。 |
.clearAllSessionStorage() | 清除测试交互过的所有源的sessionStorage 数据。 |
.clearCookie() | 清除特定的浏览器cookie。 |
.clearCookies() | 清除某个域的浏览器cookie。 |
.clearLocalStorage() | 清除当前域和子域的localStorage 数据。 |
.clock() | 覆盖浏览器内置的时间对象(Date , setTimeout 等),允许通过cy.tick() 控制它们。 |
.debug() | 设置debugger 语句并记录上一个命令返回的内容。 |
.each() | 对数组中的每个项目调用回调函数。 |
.end() | 显式结束Cypress命令链。 |
.exec() | 执行系统命令。 |
.fixture() | 从磁盘加载固定数据集。 |
.focus() | 使DOM元素获得焦点。Focus不是一个操作命令,因为用户不能直接使元素获得焦点,但.focus() 可以作为测试快捷方式使用。 |
.getAllCookies() | 获取所有浏览器cookie。 |
.getAllLocalStorage() | 获取测试交互过的所有源的localStorage 数据。 |
.getAllSessionStorage() | 获取测试交互过的所有源的sessionStorage 数据。 |
.getCookie() | 通过名称获取浏览器cookie。 |
.getCookies() | 获取当前域或指定域的浏览器cookie。 |
.go() | 使用浏览器历史记录前进或后退。 |
.hover() | Cypress没有cy.hover()命令。参见Issue #10。 |
.intercept() | 监视和存根网络请求及响应。 |
.log() | 向Cypress命令日志打印消息。 |
.mount() | 为Cypress组件测试挂载组件。 |
.origin() | 在单个测试中访问不同源的多个域。 |
.pause() | 暂停测试执行,允许与被测应用程序交互后再继续。 |
.press() | 触发应用程序中的原生键盘事件以模拟真实用户键盘交互。 |
.readFile() | 从磁盘读取文件。 |
.reload() | 重新加载页面。 |
.request() | 发起HTTP请求。 |
.screenshot() | 对被测应用程序进行截图。 |
.session() | 缓存和恢复cookie、localStorage和sessionStorage(即会话数据),以便在测试之间重建一致的浏览器上下文。 |
.setCookie() | 设置浏览器cookie。 |
.spread() | 使用多个参数调用回调函数。类似于.then() 。 |
.spy() | 包装方法为spy以记录函数调用。 |
.stub() | 替换方法,记录其使用并控制其行为。 |
.submit() | 提交表单。 |
.task() | 通过task 插件事件在Node中执行代码。 |
.then() | 使用当前subject调用回调函数,允许在Cypress测试的特定点执行代码。 |
.tick() | 在用cy.clock() 覆盖原生时间函数后移动时间。 |
.viewport() | 控制应用程序屏幕的大小和方向。 |
.visit() | 访问远程URL。许多测试以此命令开始。 |
.wait() | 等待指定的毫秒数,或等待别名资源解析。 |
.within() | 将后续所有cy命令限定在此元素内。在处理特定元素组(如<form> )时非常有用。 |
.wrap() | 返回传入.wrap() 的对象。如果对象是promise,则返回其解析值。 |
.writeFile() | 向文件写入指定内容。 |
Cypress API
事件
Cypress在浏览器中运行时发出的一系列事件。这些事件不仅对控制应用程序行为有用,也对调试有帮助。了解更多内容,请参阅事件目录。
自定义命令和查询
Cypress提供了编写自定义命令和自定义查询的接口。详见相关页面。
Cypress社区已经创建了大量命令插件,你可以安装或下载使用。
API
Cypress在全局Cypress
对象上暴露了许多属性和方法。
Cypress API与Cypress命令的关键区别在于,Cypress API在被调用时立即执行,而不是排队稍后运行。
属性 | 用途 |
---|---|
Cypress.arch | 底层操作系统的CPU架构名称,由Node的os.arch() 返回。 |
Cypress.browser | 当前浏览器的信息,如浏览器家族和版本。 |
Cypress.Commands | 创建新的自定义命令并扩展或覆盖现有命令。 |
Cypress.config() | 从测试内部获取和设置Cypress配置。 |
Cypress.Cookies.debug() | 每当cookie被修改时生成控制台日志。 |
Cypress.currentRetry | 表示当前测试重试次数的数字。 |
Cypress.currentTest | 包含当前执行测试信息的对象。 |
Cypress.log | 控制打印到命令日志内容的内部API。在编写自定义命令时非常有用。 |
Cypress.dom | 一系列与DOM相关的辅助方法。 |
Cypress.env | 从测试内部获取环境变量。 |
Cypress.isBrowser() | 检查当前浏览器是否匹配给定名称或过滤器。 |
Cypress.isCy() | 检查变量是否是cy或cy链的有效实例。 |
Cypress.Keyboard.defaults() | 设置.type() 命令执行的默认值。 |
Cypress.platform | 底层操作系统名称,由Node的os.platform() 返回。 |
Cypress.require | 在cy.origin()回调函数中使用依赖项。 |
Cypress.Screenshot.defaults() | 设置.screenshot() 命令和测试失败时自动截图捕获的默认值。 |
Cypress.SelectorPlayground |