Skip to main content
Cypress应用

目录

命令

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.requirecy.origin()回调函数中使用依赖项。
Cypress.Screenshot.defaults()设置.screenshot()命令和测试失败时自动截图捕获的默认值。
Cypress.SelectorPlayground配置选择器游乐场使用的选项。
Cypress.session.session()命令相关的辅助方法集合。
Cypress.spec包含当前执行规范文件信息的对象。
Cypress.testingType当前测试类型,例如"e2e""component"
Cypress.version当前Cypress版本。

实用工具

Cypress直接在全局Cypress对象上提供了几个常用库。

实用工具用途
Cypress.$Cypress自动包含jQuery并将其暴露为Cypress.$
Cypress.BlobCypress自动包含Blob库并将其暴露为Cypress.Blob
Cypress.BufferCypress自动包含浏览器的Buffer polyfill并将其暴露为Cypress.Buffer
Cypress._Cypress自动包含lodash并将其暴露为Cypress._
Cypress.minimatchCypress自动包含minimatch并将其暴露为Cypress.minimatch
Cypress.PromiseCypress自动包含Bluebird并将其暴露为Cypress.Promise
Cypress.sinonCypress自动包含Sinon.JS并将其暴露为Cypress.sinon

Node事件

Node事件允许你钩入并扩展Cypress行为。更多细节,请参阅如何使用插件Node事件概述

API用途
After Run Eventafter:run事件在运行结束后触发。通过cypress open运行cypress时,事件将在关闭项目时触发。
After Screenshot Event截图后,你可以通过after:screenshot插件事件获取其详细信息。
After Spec Eventafter:spec事件在规范文件运行后触发。通过cypress open运行cypress时,事件将在浏览器关闭时触发。
Before Run Eventbefore:run事件在运行开始前触发。通过cypress open运行cypress时,事件将在打开项目时触发。
Before Spec Eventbefore:spec事件在规范文件运行前触发。通过cypress open运行cypress时,事件将在浏览器启动时触发。
Browser Launch API在Cypress启动浏览器前,它给你机会修改浏览器首选项、安装扩展、添加和删除命令行参数,以及从setupNodeEvents函数修改其他选项。
Configuration APICypress允许你从Cypress配置中动态修改配置值和环境变量。
Preprocessors API预处理器是负责为浏览器准备支持文件或测试文件的插件。预处理器通常还会监视源文件的更改,重新处理它们,然后通知Cypress重新运行测试。