UNPKG

cypress

Version:

Cypress is a next generation front end testing tool built for the modern web

1,428 lines (1,310 loc) 262 kB
/* eslint-disable @typescript-eslint/no-unused-vars */ /// <reference path="./cypress-npm-api.d.ts" /> /// <reference path="./cypress-eventemitter.d.ts" /> /// <reference path="./cypress-type-helpers.d.ts" /> declare namespace Cypress { type FileContents = string | any[] | object type HistoryDirection = 'back' | 'forward' type HttpMethod = string type RequestBody = string | object | boolean | null type ViewportOrientation = 'portrait' | 'landscape' type PrevSubject = keyof PrevSubjectMap type TestingType = 'e2e' | 'component' type PluginConfig = (on: PluginEvents, config: PluginConfigOptions) => void | ConfigOptions | Promise<ConfigOptions> interface JQueryWithSelector<TElement = HTMLElement> extends JQuery<TElement> { selector?: string | null } interface PrevSubjectMap<O = unknown> { optional: O element: JQueryWithSelector document: Document window: Window } interface CommandOptions { prevSubject: boolean | PrevSubject | PrevSubject[] } interface CommandFn<T extends keyof ChainableMethods> { (this: Mocha.Context, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void } interface CommandFns { [name: string]: (this: Mocha.Context, ...args: any) => any } interface CommandFnWithSubject<T extends keyof ChainableMethods, S> { (this: Mocha.Context, prevSubject: S, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void } interface CommandFnsWithSubject<S> { [name: string]: (this: Mocha.Context, prevSubject: S, ...args: any) => any } interface CommandOriginalFn<T extends keyof ChainableMethods> extends CallableFunction { (...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> } interface CommandOriginalFnWithSubject<T extends keyof ChainableMethods, S> extends CallableFunction { (prevSubject: S, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> } interface CommandFnWithOriginalFn<T extends keyof Chainable> { (this: Mocha.Context, originalFn: CommandOriginalFn<T>, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void } interface CommandFnWithOriginalFnAndSubject<T extends keyof Chainable, S> { (this: Mocha.Context, originalFn: CommandOriginalFnWithSubject<T, S>, prevSubject: S, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void } interface QueryFn<T extends keyof ChainableMethods> { (this: Command, ...args: Parameters<ChainableMethods[T]>): (subject: any) => any } interface QueryFnWithOriginalFn<T extends keyof Chainable> { (this: Command, originalFn: QueryFn<T>, ...args: Parameters<ChainableMethods[T]>): (subject: any) => any } interface ObjectLike { [key: string]: any } interface Auth { username: string password: string } interface RemoteState { auth?: Auth domainName: string strategy: 'file' | 'http' origin: string fileServer: string | null props: Record<string, any> | null } interface Backend { (task: 'net', eventName: string, frame: any): Promise<void> } type BrowserName = 'electron' | 'chrome' | 'chromium' | 'firefox' | 'edge' | string type BrowserChannel = 'stable' | 'canary' | 'beta' | 'dev' | 'nightly' | string type BrowserFamily = 'chromium' | 'firefox' | 'webkit' /** * Describes a browser Cypress can control */ interface Browser { /** * Short browser name. */ name: BrowserName /** * The underlying engine for this browser. */ family: BrowserFamily /** * The release channel of the browser. */ channel: BrowserChannel /** * Human-readable browser name. */ displayName: string version: string majorVersion: number | string path: string isHeaded: boolean isHeadless: boolean /** * Informational text to accompany this browser. Shown in desktop-gui. */ info?: string /** * Warning text to accompany this browser. Shown in desktop-gui. */ warning?: string /** * If `true`, this browser version is not supported in Cypress. */ unsupportedVersion?: boolean } /** * Browser that's exposed in public APIs */ interface PublicBrowser { channel: BrowserChannel displayName: string family: string majorVersion?: string | number | null name: BrowserName path: string version: string } interface Ensure { /** * Throws an error if `subject` is not one of the passed in `type`s. */ isType(subject: any, type: PrevSubject[], commandName: string, cy: Chainable): void /** * Throws an error if `subject` is not a DOM element. */ isElement(subject: any, commandName: string, cy: Chainable): void /** * Throws an error if `subject` is not a `document`. */ isDocument(subject: any, commandName: string, cy: Chainable): void /** * Throws an error if `subject` is not a `window`. */ isWindow(subject: any, commandName: string, cy: Chainable): void /** * Throws an error if `subject` is not a DOM element attached to the application under test. */ isAttached(subject: any, commandName: string, cy: Chainable, onFail?: Log): void /** * Throws an error if `subject` is a disabled DOM element. */ isNotDisabled(subject: any, commandName: string, onFail?: Log): void /** * Throws an error if `subject` is a DOM element hidden by any of its parent elements. */ isNotHiddenByAncestors(subject: any, commandName: string, onFail?: Log): void /** * Throws an error if `subject` is a read-only form element. */ isNotReadonly(subject: any, commandName: string, onFail?: Log): void /** * Throws an error if `subject` is a read-only form element. */ isScrollable(subject: any, commandName: string, onFail?: Log): void /** * Throws an error if `subject` is not a DOM element visible in the AUT. */ isVisible(subject: any, commandName: string, onFail?: Log): void } interface LocalStorage { /** * Called internally to clear `localStorage` in two situations. * * 1. Before every test, this is called with no argument to clear all keys. * 2. On `cy.clearLocalStorage(keys)` this is called with `keys` as an argument. * * You should not call this method directly to clear `localStorage`; instead, use `cy.clearLocalStorage(key)`. * * @see https://on.cypress.io/clearlocalstorage */ clear: (keys?: string[]) => void } // TODO: raise minimum required TypeScript version to 3.7 // and make this recursive // https://github.com/cypress-io/cypress/issues/24875 type Storable = | string | number | boolean | null | StorableObject | StorableArray interface StorableObject { [key: string]: Storable } interface StorableArray extends Array<Storable> { } type StorableRecord = Record<string, Storable> interface OriginStorage { origin: string value: StorableRecord } interface Storages { localStorage: OriginStorage[] sessionStorage: OriginStorage[] } interface StorageByOrigin { [key: string]: StorableRecord } type IsBrowserMatcher = BrowserName | Partial<Browser> | Array<BrowserName | Partial<Browser>> interface ViewportPosition extends WindowPosition { right: number bottom: number } interface WindowPosition { top: number left: number topCenter: number leftCenter: number } interface ElementPositioning { scrollTop: number scrollLeft: number width: number height: number fromElViewport: ViewportPosition fromElWindow: WindowPosition fromAutWindow: WindowPosition } interface ElementCoordinates { width: number height: number fromElViewport: ViewportPosition & { x: number, y: number } fromElWindow: WindowPosition & { x: number, y: number } fromAutWindow: WindowPosition & { x: number, y: number } } /** * Spec type for the given test. "integration" is the default, but * tests run using `open --component` will be "component" * * @see https://on.cypress.io/experiments */ type CypressSpecType = 'integration' | 'component' /** * A Cypress spec. */ interface Spec { name: string // "config_passing_spec.js" relative: string // "cypress/e2e/config_passing_spec.cy.js" or "__all" if clicked all specs button absolute: string // "/Users/janelane/app/cypress/e2e/config_passing_spec.cy.js" specFilter?: string // optional spec filter used by the user specType?: CypressSpecType baseName?: string // "config_passing_spec.cy.js" fileExtension?: string // ".js" fileName?: string // "config_passing_spec.cy" id?: string // "U3BlYzovVXNlcnMvamFuZWxhbmUvYXBwL2N5cHJlc3MvZTJlL2NvbmZpZ19wYXNzaW5nX3NwZWMuY3kuanM=" } /** * Window type for Application Under Test(AUT) */ type AUTWindow = Window & typeof globalThis & ApplicationWindow /** * The interface for user-defined properties in Window object under test. */ interface ApplicationWindow { } // tslint:disable-line /** * The configuration for Cypress. */ type Config = ResolvedConfigOptions & RuntimeConfigOptions & RuntimeServerConfigOptions /** * Several libraries are bundled with Cypress by default. * * @see https://on.cypress.io/api */ interface Cypress { /** * Lodash library * * @see https://on.cypress.io/_ * @example * Cypress._.keys(obj) */ _: _.LoDashStatic /** * jQuery library * * @see https://on.cypress.io/$ * @example * Cypress.$('p') */ $: JQueryStatic /** * Cypress automatically includes a Blob library and exposes it as Cypress.Blob. * * @see https://on.cypress.io/blob * @see https://github.com/nolanlawson/blob-util * @example * Cypress.Blob.method() */ Blob: BlobUtil.BlobUtilStatic /** * Cypress automatically includes a Buffer library and exposes it as Cypress.Buffer. * * @see https://on.cypress.io/buffer * @see https://github.com/feross/buffer * @example * Cypress.Buffer.method() */ Buffer: BufferType /** * Cypress automatically includes minimatch and exposes it as Cypress.minimatch. * * @see https://on.cypress.io/minimatch */ minimatch: typeof Minimatch.minimatch /** * Cypress automatically includes Bluebird and exposes it as Cypress.Promise. * * @see https://on.cypress.io/promise * @see https://github.com/petkaantonov/bluebird * @example * new Cypress.Promise((resolve, reject) => { ... }) */ Promise: Bluebird.BluebirdStatic /** * Cypress includes Sinon.js library used in `cy.spy` and `cy.stub`. * * @see https://sinonjs.org/ * @see https://on.cypress.io/stubs-spies-and-clocks * @see https://example.cypress.io/commands/spies-stubs-clocks */ sinon: sinon.SinonStatic /** * Utility functions for ensuring various properties about a subject. * @see https://on.cypress.io/api/custom-queries */ ensure: Ensure /** * Cypress version string. i.e. "1.1.2" * @see https://on.cypress.io/version * @example ``` expect(Cypress.version).to.be.a('string') if (Cypress.version === '1.2.0') { // test something specific } ``` */ version: string /** * OS platform name, from Node `os.platform()` * * @see https://nodejs.org/api/os.html#os_os_platform * @example * Cypress.platform // "darwin" */ platform: string /** * CPU architecture, from Node `os.arch()` * * @see https://nodejs.org/api/os.html#os_os_arch * @example * Cypress.arch // "x64" */ arch: string /** * Currently executing spec file. * @example * ``` * Cypress.spec * // { * // name: "config_passing_spec.coffee", * // relative: "cypress/integration/config_passing_spec.coffee", * // absolute: "/users/smith/projects/web/cypress/integration/config_passing_spec.coffee" * // specType: "integration" * // } * ``` */ spec: Spec /** * Currently executing test runnable instance. */ currentTest: { title: string titlePath: string[] } /** * Information about current test retry */ currentRetry: number /** * Information about the browser currently running the tests */ browser: Browser /** * Internal class for LocalStorage management. */ LocalStorage: LocalStorage /** * Internal class for session management. */ session: Session /** * Current testing type, determined by the Test Runner chosen to run. */ testingType: TestingType /** * Fire automation:request event for internal use. */ automation(eventName: string, ...args: any[]): Bluebird.Promise<any> /** * Promise wrapper for certain internal tasks. */ backend: Backend /** * Returns all configuration objects. * @see https://on.cypress.io/config * @example ``` Cypress.config() // {defaultCommandTimeout: 10000, pageLoadTimeout: 30000, ...} ``` */ config(): Config /** * Returns one configuration value. * @see https://on.cypress.io/config * @example ``` Cypress.config('pageLoadTimeout') // 60000 ``` */ config<K extends keyof Config>(key: K): Config[K] /** * Sets one configuration value. * @see https://on.cypress.io/config * @example ``` Cypress.config('viewportWidth', 800) ``` */ config<K extends keyof TestConfigOverrides>(key: K, value: TestConfigOverrides[K]): void /** * Sets multiple configuration values at once. * @see https://on.cypress.io/config * @example ``` Cypress.config({ defaultCommandTimeout: 10000, viewportHeight: 900 }) ``` */ config(Object: TestConfigOverrides): void // no real way to type without generics /** * Returns all environment variables set with CYPRESS_ prefix or in "env" object in "cypress.config.{js,ts,mjs,cjs}" * * @see https://on.cypress.io/env */ env(): ObjectLike /** * Returns specific environment variable or undefined * @see https://on.cypress.io/env * @example * // cypress.config.js * { "env": { "foo": "bar" } } * Cypress.env("foo") // => bar */ env(key: string): any /** * Set value for a variable. * Any value you change will be permanently changed for the remainder of your tests. * @see https://on.cypress.io/env * @example * Cypress.env("host", "http://server.dev.local") */ env(key: string, value: any): void /** * Set values for multiple variables at once. Values are merged with existing values. * @see https://on.cypress.io/env * @example * Cypress.env({ host: "http://server.dev.local", foo: "foo" }) */ env(object: ObjectLike): void /** * @returns the number of test retries currently enabled for the run */ getTestRetries(): number | null /** * Checks if a variable is a valid instance of `cy` or a `cy` chainable. * * @see https://on.cypress.io/iscy * @example * Cypress.isCy(cy) // => true */ isCy<TSubject = any>(obj: Chainable<TSubject>): obj is Chainable<TSubject> isCy(obj: any): obj is Chainable /** * Returns true if currently running the supplied browser name or matcher object. Also accepts an array of matchers. * @example isBrowser('chrome') will be true for the browser 'chrome:canary' and 'chrome:stable' * @example isBrowser({ name: 'firefox', channel: 'dev' }) will be true only for the browser 'firefox:dev' (Firefox Developer Edition) * @example isBrowser(['firefox', 'edge']) will be true only for the browsers 'firefox' and 'edge' * @example isBrowser('!firefox') will be true for every browser other than 'firefox' * @example isBrowser({ family: '!chromium'}) will be true for every browser not matching { family: 'chromium' } * @param matcher browser name or matcher object to check. */ isBrowser(name: IsBrowserMatcher): boolean /** * Internal options for "cy.log" used in custom commands. * * @see https://on.cypress.io/cypress-log */ log(options: Partial<LogConfig>): Log /** * Stop the Cypress App on the current machine while tests are running * @see https://on.cypress.io/cypress-stop * @example * Cypress.stop() */ stop(): void Commands: { /** * Add a custom command * @see https://on.cypress.io/api/commands */ add<T extends keyof Chainable>(name: T, fn: CommandFn<T>): void /** * Add a custom parent command * @see https://on.cypress.io/api/commands#Parent-Commands */ add<T extends keyof Chainable>(name: T, options: CommandOptions & { prevSubject: false }, fn: CommandFn<T>): void /** * Add a custom child command * @see https://on.cypress.io/api/commands#Child-Commands */ add<T extends keyof Chainable, S = any>(name: T, options: CommandOptions & { prevSubject: true }, fn: CommandFnWithSubject<T, S>): void /** * Add a custom child or dual command * @see https://on.cypress.io/api/commands#Validations */ add<T extends keyof Chainable, S extends PrevSubject>( name: T, options: CommandOptions & { prevSubject: S | ['optional'] }, fn: CommandFnWithSubject<T, PrevSubjectMap[S]>, ): void /** * Add a custom command that allows multiple types as the prevSubject * @see https://on.cypress.io/api/commands#Validations#Allow-Multiple-Types */ add<T extends keyof Chainable, S extends PrevSubject>( name: T, options: CommandOptions & { prevSubject: S[] }, fn: CommandFnWithSubject<T, PrevSubjectMap<void>[S]>, ): void /** * Add one or more custom commands * @see https://on.cypress.io/api/commands */ addAll<T extends keyof Chainable>(fns: CommandFns): void /** * Add one or more custom parent commands * @see https://on.cypress.io/api/commands#Parent-Commands */ addAll<T extends keyof Chainable>(options: CommandOptions & { prevSubject: false }, fns: CommandFns): void /** * Add one or more custom child commands * @see https://on.cypress.io/api/commands#Child-Commands */ addAll<T extends keyof Chainable, S = any>(options: CommandOptions & { prevSubject: true }, fns: CommandFnsWithSubject<S>): void /** * Add one or more custom commands that validate their prevSubject * @see https://on.cypress.io/api/commands#Validations */ addAll<T extends keyof Chainable, S extends PrevSubject>( options: CommandOptions & { prevSubject: S | ['optional'] }, fns: CommandFnsWithSubject<PrevSubjectMap[S]>, ): void /** * Add one or more custom commands that allow multiple types as their prevSubject * @see https://on.cypress.io/api/commands#Allow-Multiple-Types */ addAll<T extends keyof Chainable, S extends PrevSubject>( options: CommandOptions & { prevSubject: S[] }, fns: CommandFnsWithSubject<PrevSubjectMap<void>[S]>, ): void /** * Overwrite an existing Cypress command with a new implementation * @see https://on.cypress.io/api/commands#Overwrite-Existing-Commands */ overwrite<T extends keyof Chainable>(name: T, fn: CommandFnWithOriginalFn<T>): void /** * Overwrite an existing Cypress command with a new implementation * @see https://on.cypress.io/api/commands#Overwrite-Existing-Commands */ overwrite<T extends keyof Chainable, S extends PrevSubject>(name: T, fn: CommandFnWithOriginalFnAndSubject<T, PrevSubjectMap[S]>): void /** * Add a custom query * @see https://on.cypress.io/api/custom-queries */ addQuery<T extends keyof Chainable>(name: T, fn: QueryFn<T>): void /** * Overwrite an existing Cypress query with a new implementation * @see https://on.cypress.io/api/custom-queries */ overwriteQuery<T extends keyof Chainable>(name: T, fn: QueryFnWithOriginalFn<T>): void } /** * @see https://on.cypress.io/cookies */ Cookies: { debug(enabled: boolean, options?: Partial<DebugOptions>): void } /** * @see https://on.cypress.io/dom */ dom: { /** * Returns a jQuery object obtained by wrapping an object in jQuery. */ wrap(wrappingElement_function: JQuery.Selector | JQuery.htmlString | Element | JQuery | ((index: number) => string | JQuery)): JQuery query(selector: JQuery.Selector, context?: Element | JQuery): JQuery /** * Returns an array of raw elements pulled out from a jQuery object. */ unwrap(obj: any): any /** * Returns a boolean indicating whether an object is a DOM object. */ isDom(obj: any): boolean isType(element: JQuery | HTMLElement, type: string): boolean /** * Returns a boolean indicating whether an element is visible. */ isVisible(element: JQuery | HTMLElement): boolean /** * Returns a boolean indicating whether an element is hidden. */ isHidden(element: JQuery | HTMLElement, methodName?: string, options?: object): boolean /** * Returns a boolean indicating whether an element can receive focus. */ isFocusable(element: JQuery | HTMLElement): boolean isTextLike(element: JQuery | HTMLElement): boolean /** * Returns a boolean indicating whether an element is scrollable. */ isScrollable(element: Window | JQuery | HTMLElement): boolean /** * Returns a boolean indicating whether an element currently has focus. */ isFocused(element: JQuery | HTMLElement): boolean /** * Returns a boolean indicating whether an element is detached from the DOM. */ isDetached(element: JQuery | HTMLElement): boolean /** * Returns a boolean indicating whether an element is attached to the DOM. */ isAttached(element: JQuery | HTMLElement | Window | Document): boolean isSelector(element: JQuery | HTMLElement, selector: JQuery.Selector): boolean /** * Returns a boolean indicating whether an element is a descendent of another element. */ isDescendent(element1: JQuery | HTMLElement, element2: JQuery | HTMLElement): boolean /** * Returns a boolean indicating whether object is undefined or html, body, or document. */ isUndefinedOrHTMLBodyDoc(obj: any): boolean /** * Returns a boolean indicating whether an object is a DOM element. */ isElement(obj: any): boolean /** * Returns a boolean indicating whether a node is of document type. */ isDocument(obj: any): boolean /** * Returns a boolean indicating whether an object is a window object. */ isWindow(obj: any): obj is Window /** * Returns a boolean indicating whether an object is a jQuery object. */ isJquery(obj: any): obj is JQuery isInputType(element: JQuery | HTMLElement, type: string | string[]): boolean stringify(element: JQuery | HTMLElement, form: string): string getElements(element: JQuery): JQuery | HTMLElement[] getContainsSelector(text: string, filter?: string, options?: CaseMatchable): JQuery.Selector getFirstDeepestElement(elements: HTMLElement[], index?: number): HTMLElement getWindowByElement(element: JQuery | HTMLElement): JQuery | HTMLElement getReasonIsHidden(element: JQuery | HTMLElement, options?: object): string getFirstScrollableParent(element: JQuery | HTMLElement): JQuery | HTMLElement getFirstFixedOrStickyPositionParent(element: JQuery | HTMLElement): JQuery | HTMLElement getFirstStickyPositionParent(element: JQuery | HTMLElement): JQuery | HTMLElement getCoordsByPosition(left: number, top: number, xPosition?: string, yPosition?: string): number getElementPositioning(element: JQuery | HTMLElement): ElementPositioning getElementAtPointFromViewport(doc: Document, x: number, y: number): Element | null getElementCoordinatesByPosition(element: JQuery | HTMLElement, position?: string): ElementCoordinates getElementCoordinatesByPositionRelativeToXY(element: JQuery | HTMLElement, x: number, y: number): ElementPositioning getHostContenteditable(element: HTMLElement): HTMLElement getSelectionBounds(element: HTMLElement): { start: number, end: number } } /** * @see https://on.cypress.io/keyboard-api */ Keyboard: { defaults(options: Partial<KeyboardDefaultsOptions>): void } /** * @see https://on.cypress.io/screenshot-api */ Screenshot: { defaults(options: Partial<ScreenshotDefaultsOptions>): void } /** * @see https://on.cypress.io/selector-playground-api */ SelectorPlayground: { defaults(options: Partial<SelectorPlaygroundDefaultsOptions>): void getSelector($el: JQuery): JQuery.Selector } /** * These events come from Cypress as it issues commands and reacts to their state. These are all useful to listen to for debugging purposes. * @see https://on.cypress.io/catalog-of-events#App-Events */ on: Actions /** * These events come from Cypress as it issues commands and reacts to their state. These are all useful to listen to for debugging purposes. * @see https://on.cypress.io/catalog-of-events#App-Events */ once: Actions /** * These events come from Cypress as it issues commands and reacts to their state. These are all useful to listen to for debugging purposes. * @see https://on.cypress.io/catalog-of-events#App-Events */ off: Actions /** * Used to include dependencies within the cy.origin() callback * @see https://on.cypress.io/origin */ require: <T = any>(id: string) => T /** * Trigger action * @private */ action: <T = (any[] | void) >(action: string, ...args: any[]) => T /** * Load files * @private */ onSpecWindow: (window: Window, specList: string[] | Array<() => Promise<void>>) => void } type CanReturnChainable = void | Chainable | Promise<unknown> type ThenReturn<S, R> = R extends void ? Chainable<S> : R extends R | undefined ? Chainable<S | Exclude<R, undefined>> : Chainable<S> /** * Chainable interface for non-array Subjects */ interface Chainable<Subject = any> { /** * Create an assertion. Assertions are automatically retried until they pass or time out. * * @alias should * @see https://on.cypress.io/and */ and: Chainer<Subject> /** * Assign an alias for later use. Reference the alias later within a * [cy.get()](https://on.cypress.io/get) or * [cy.wait()](https://on.cypress.io/wait) command with a `@` prefix. * You can alias DOM elements, routes, stubs and spies. * * @see https://on.cypress.io/as * @see https://on.cypress.io/variables-and-aliases * @see https://on.cypress.io/get * @example * // Get the aliased 'todos' elements * cy.get('ul#todos').as('todos') * * // later retrieve the todos * cy.get('@todos') */ as(alias: string, options?: Partial<AsOptions>): Chainable<Subject> /** * Blur a focused element. This element must currently be in focus. * If you want to ensure an element is focused before blurring, * try using .focus() before .blur(). * * @see https://on.cypress.io/blur */ blur(options?: Partial<BlurOptions>): Chainable<Subject> /** * Check checkbox(es) or radio(s). This element must be an `<input>` with type `checkbox` or `radio`. * * @see https://on.cypress.io/check * @example * // Check checkbox element * cy.get('[type="checkbox"]').check() * // Check first radio element * cy.get('[type="radio"]').first().check() */ check(options?: Partial<CheckClearOptions>): Chainable<Subject> /** * Check checkbox(es) or radio(s). This element must be an `<input>` with type `checkbox` or `radio`. * * @see https://on.cypress.io/check * @example * // Select the radio with the value of 'US' * cy.get('[type="radio"]').check('US') * // Check the checkboxes with the values 'ga' and 'ca' * cy.get('[type="checkbox"]').check(['ga', 'ca']) */ check(value: string | string[], options?: Partial<CheckClearOptions>): Chainable<Subject> /** * Get the children of each DOM element within a set of DOM elements. * * @see https://on.cypress.io/children */ children<E extends Node = HTMLElement>(options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>> children<K extends keyof HTMLElementTagNameMap>(selector: K, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<HTMLElementTagNameMap[K]>> children<E extends Node = HTMLElement>(selector: string, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>> /** * Clear the value of an `input` or `textarea`. * An alias for `.type({selectall}{del})` * * @see https://on.cypress.io/clear */ clear(options?: Partial<CheckClearOptions>): Chainable<Subject> /** * Clear a specific browser cookie for a domain. * * Cypress automatically clears all cookies _before_ each test to prevent * state from being shared across tests when test isolation is enabled. * You shouldn't need to use this command unless you're using it to clear * a specific cookie inside a single test or test isolation is disabled. * * @see https://on.cypress.io/clearcookie */ clearCookie(name: string, options?: CookieOptions): Chainable<null> /** * Clear browser cookies for a domain. * * Cypress automatically clears all cookies _before_ each test to prevent * state from being shared across tests when test isolation is enabled. * You shouldn't need to use this command unless you're using it to clear * specific cookies inside a single test or test isolation is disabled. * * @see https://on.cypress.io/clearcookies */ clearCookies(options?: CookieOptions): Chainable<null> /** * Clear all browser cookies. * * Cypress automatically clears all cookies _before_ each test to prevent * state from being shared across tests when test isolation is enabled. * You shouldn't need to use this command unless you're using it to clear * all cookie inside a single test or test isolation is disabled. * * @see https://on.cypress.io/clearallcookies */ clearAllCookies(options?: Partial<Loggable & Timeoutable>): Chainable<null> /** * Get local storage for all origins. * * @see https://on.cypress.io/getalllocalstorage */ getAllLocalStorage(options?: Partial<Loggable>): Chainable<StorageByOrigin> /** * Clear local storage for all origins. * * Cypress automatically clears all local storage _before_ each test to * prevent state from being shared across tests when test isolation * is enabled. You shouldn't need to use this command unless you're using it * to clear localStorage inside a single test or test isolation is disabled. * * @see https://on.cypress.io/clearalllocalstorage */ clearAllLocalStorage(options?: Partial<Loggable>): Chainable<null> /** * Get session storage for all origins. * * @see https://on.cypress.io/getallsessionstorage */ getAllSessionStorage(options?: Partial<Loggable>): Chainable<StorageByOrigin> /** * Clear session storage for all origins. * * @see https://on.cypress.io/clearallsessionstorage */ clearAllSessionStorage(options?: Partial<Loggable>): Chainable<null> /** * Clear data in local storage for the current origin. * * Cypress automatically clears all local storage _before_ each test to * prevent state from being shared across tests when test isolation * is enabled. You shouldn't need to use this command unless you're using it * to clear localStorage inside a single test or test isolation is disabled. * * @see https://on.cypress.io/clearlocalstorage * @param {string} [key] - name of a particular item to remove (optional). * @example ``` // Removes all local storage keys cy.clearLocalStorage() .should(ls => { expect(ls.getItem('prop1')).to.be.null }) // Removes item "todos" cy.clearLocalStorage("todos") ``` */ clearLocalStorage(key?: string): Chainable<Storage> /** * Clear keys in local storage that match given regular expression. * * @see https://on.cypress.io/clearlocalstorage * @param {RegExp} re - regular expression to match. * @example ``` // Clears all local storage matching /app-/ cy.clearLocalStorage(/app-/) ``` */ clearLocalStorage(re: RegExp): Chainable<Storage> /** * Clear data in local storage. * Cypress automatically runs this command before each test to prevent state from being * shared across tests. You shouldn't need to use this command unless you're using it * to clear localStorage inside a single test. Yields `localStorage` object. * * @see https://on.cypress.io/clearlocalstorage * @param {options} [object] - options object * @example ``` // Removes all local storage items, without logging cy.clearLocalStorage({ log: false }) ``` */ clearLocalStorage(options: Partial<Loggable>): Chainable<Storage> /** * Clear data in local storage. * Cypress automatically runs this command before each test to prevent state from being * shared across tests. You shouldn't need to use this command unless you're using it * to clear localStorage inside a single test. Yields `localStorage` object. * * @see https://on.cypress.io/clearlocalstorage * @param {string} [key] - name of a particular item to remove (optional). * @param {options} [object] - options object * @example ``` // Removes item "todos" without logging cy.clearLocalStorage("todos", { log: false }) ``` */ clearLocalStorage(key: string, options: Partial<Loggable>): Chainable<Storage> /** * Click a DOM element. * * @see https://on.cypress.io/click * @example * cy.get('button').click() // Click on button * cy.focused().click() // Click on el with focus * cy.contains('Welcome').click() // Click on first el containing 'Welcome' */ click(options?: Partial<ClickOptions>): Chainable<Subject> /** * Click a DOM element at specific corner / side. * * @param {PositionType} position - The position where the click should be issued. * The `center` position is the default position. * @see https://on.cypress.io/click * @example * cy.get('button').click('topRight') */ click(position: PositionType, options?: Partial<ClickOptions>): Chainable<Subject> /** * Click a DOM element at specific coordinates * * @param {number} x The distance in pixels from the element's left to issue the click. * @param {number} y The distance in pixels from the element's top to issue the click. * @see https://on.cypress.io/click * @example ``` // The click below will be issued inside of the element // (15px from the left and 40px from the top). cy.get('button').click(15, 40) ``` */ click(x: number, y: number, options?: Partial<ClickOptions>): Chainable<Subject> /** * `cy.clock()` overrides native global functions related to time allowing them to be controlled * synchronously via [cy.tick()](https://on.cypress.io/tick) or the yielded clock object. * This includes controlling: * * `setTimeout` * * `clearTimeout` * * `setInterval` * * `clearInterval` * * `Date` Objects * * The clock starts at the unix epoch (timestamp of 0). * This means that when you instantiate new Date in your application, * it will have a time of January 1st, 1970. * * To restore the real clock call `.restore()` * * @example * cy.clock() * ... * // restore the application clock * cy.clock().then(clock => { * clock.restore() * }) * // or use this shortcut * cy.clock().invoke('restore') * * @see https://on.cypress.io/clock */ clock(): Chainable<Clock> /** * Mocks global clock and sets current timestamp to the given value. * Overrides all functions that deal with time. * * @see https://on.cypress.io/clock * @example * // in your app code * $('#date').text(new Date().toJSON()) * // in the spec file * // March 14, 2017 timestamp or Date object * const now = new Date(2017, 2, 14).getTime() * cy.clock(now) * cy.visit('/index.html') * cy.get('#date').contains('2017-03-14') * // to restore the real clock * cy.clock().then(clock => { * clock.restore() * }) * // or use this shortcut * cy.clock().invoke('restore') */ clock(now: number | Date, options?: Loggable): Chainable<Clock> /** * Mocks global clock but only overrides specific functions. * * @see https://on.cypress.io/clock * @example * // keep current date but override "setTimeout" and "clearTimeout" * cy.clock(null, ['setTimeout', 'clearTimeout']) */ clock(now: number | Date, functions?: Array<'setTimeout' | 'clearTimeout' | 'setInterval' | 'clearInterval' | 'Date'>, options?: Loggable): Chainable<Clock> /** * Mocks global clock and all functions. * * @see https://on.cypress.io/clock * @example * // mock clock but do not log this command * cy.clock({ log: false }) */ clock(options: Loggable): Chainable<Clock> /** * Get the first DOM element that matches the selector (whether it be itself or one of its ancestors). * * @see https://on.cypress.io/closest */ closest<K extends keyof HTMLElementTagNameMap>(selector: K, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<HTMLElementTagNameMap[K]>> closest<E extends Node = HTMLElement>(selector: string, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>> /** * Get the DOM element containing the text. * DOM elements can contain more than the desired text and still match. * Additionally, Cypress prefers some DOM elements over the deepest element found. * * @see https://on.cypress.io/contains * @example * // Yield el in .nav containing 'About' * cy.get('.nav').contains('About') * // Yield first el in document containing 'Hello' * cy.contains('Hello') * // you can use regular expression * cy.contains(/^b\w+/) * // yields <ul>...</ul> * cy.contains('ul', 'apples') * // tries to find the given text for up to 1 second * cy.contains('my text to find', {timeout: 1000}) */ contains(content: string | number | RegExp, options?: Partial<Loggable & Timeoutable & CaseMatchable & Shadow>): Chainable<Subject> /** * Get the child DOM element that contains given text. * * @see https://on.cypress.io/contains * @example * // Yield el in .nav containing 'About' * cy.get('.nav').contains('About') */ contains<E extends Node = HTMLElement>(content: string | number | RegExp): Chainable<JQuery<E>> /** * Get the DOM element with name "selector" containing the text or regular expression. * * @see https://on.cypress.io/contains * @example * // yields <ul>...</ul> * cy.contains('ul', 'apples') */ contains<K extends keyof HTMLElementTagNameMap>(selector: K, text: string | number | RegExp, options?: Partial<Loggable & Timeoutable & CaseMatchable & Shadow>): Chainable<JQuery<HTMLElementTagNameMap[K]>> /** * Get the DOM element using CSS "selector" containing the text or regular expression. * * @see https://on.cypress.io/contains * @example * // yields <... class="foo">... apples ...</...> * cy.contains('.foo', 'apples') */ contains<E extends Node = HTMLElement>(selector: string, text: string | number | RegExp, options?: Partial<Loggable & Timeoutable & CaseMatchable & Shadow>): Chainable<JQuery<E>> /** * Double-click a DOM element. * * @see https://on.cypress.io/dblclick */ dblclick(options?: Partial<ClickOptions>): Chainable<Subject> /** * Double-click a DOM element at specific corner / side. * * @param {PositionType} position - The position where the click should be issued. * The `center` position is the default position. * @see https://on.cypress.io/dblclick * @example * cy.get('button').dblclick('topRight') */ dblclick(position: PositionType, options?: Partial<ClickOptions>): Chainable<Subject> /** * Double-click a DOM element at specific coordinates * * @param {number} x The distance in pixels from the element's left to issue the click. * @param {number} y The distance in pixels from the element's top to issue the click. * @see https://on.cypress.io/dblclick * @example ``` // The click below will be issued inside of the element // (15px from the left and 40px from the top). cy.get('button').dblclick(15, 40) ``` */ dblclick(x: number, y: number, options?: Partial<ClickOptions>): Chainable<Subject> /** * Right-click a DOM element. * * @see https://on.cypress.io/rightclick */ rightclick(options?: Partial<ClickOptions>): Chainable<Subject> /** * Right-click a DOM element at specific corner / side. * * @param {PositionType} position - The position where the click should be issued. * The `center` position is the default position. * @see https://on.cypress.io/click * @example * cy.get('button').rightclick('topRight') */ rightclick(position: PositionType, options?: Partial<ClickOptions>): Chainable<Subject> /** * Right-click a DOM element at specific coordinates * * @param {number} x The distance in pixels from the element's left to issue the click. * @param {number} y The distance in pixels from the element's top to issue the click. * @see https://on.cypress.io/rightclick * @example ``` // The click below will be issued inside of the element // (15px from the left and 40px from the top). cy.get('button').rightclick(15, 40) ``` */ rightclick(x: number, y: number, options?: Partial<ClickOptions>): Chainable<Subject> /** * Set a debugger and log what the previous command yields. * * @see https://on.cypress.io/debug */ debug(options?: Partial<Loggable>): Chainable<Subject> /** * Save/Restore browser Cookies, LocalStorage, and SessionStorage data resulting from the supplied `setup` function. * * @see https://on.cypress.io/session */ session(id: string | object, setup: () => void, options?: SessionOptions): Chainable<null> /** * Get the window.document of the page that is currently active. * * @see https://on.cypress.io/document * @example * cy.document() * .its('contentType') * .should('eq', 'text/html') */ document(options?: Partial<Loggable & Timeoutable>): Chainable<Document> /** * Iterate through an array like structure (arrays or objects with a length property). * * @see https://on.cypress.io/each */ each<E extends Node = HTMLElement>(fn: (element: JQuery<E>, index: number, $list: E[]) => void): Chainable<JQuery<E>> // Can't properly infer type without breaking down Chainable each(fn: (item: any, index: number, $list: any[]) => void): Chainable<Subject> /** * End a chain of commands * * @see https://on.cypress.io/end */ end(): Chainable<null> /** * Get A DOM element at a specific index in an array of elements. * * @see https://on.cypress.io/eq * @param {Number} index A number indicating the index to find the element at within an array of elements. A negative number counts index from the end of the list. * @example * cy.get('tbody>tr').eq(0) // Yield first 'tr' in 'tbody' * cy.get('ul>li').eq('4') // Yield fifth 'li' in 'ul' * cy.get('li').eq(-2) // Yields second from last 'li' element */ eq<E extends Node = HTMLElement>(index: number, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>> /** * Execute a system command. * @see https://on.cypress.io/exec */ exec(command: string, options?: Partial<ExecOptions>): Chainable<Exec> /** * Get the DOM elements that match a specific selector. Opposite of `.not()` * * @see https://on.cypress.io/filter */ filter<K extends keyof HTMLElementTagNameMap>(selector: K, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<HTMLElementTagNameMap[K]>> // automatically returns the correct HTMLElement type /** * Get the DOM elements that match a specific selector. Opposite of `.not()` * * @see https://on.cypress.io/filter */ filter<E extends Node = HTMLElement>(selector: string, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>> /** * Get the DOM elements that match a specific selector. Opposite of `.not()` * * @see https://on.cypress.io/filter */ filter<E extends Node = HTMLElement>(fn: (index: number, element: E) => boolean, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>> /** * Get the descendent DOM elements of a specific selector. * * @see https://on.cypress.io/find * @example * cy.get('.article').find('footer') // Yield 'footer' within '.article' */ find<K extends keyof HTMLElementTagNameMap>(selector: K, options?: Partial<Loggable & Timeoutable & Shadow>): Chainable<JQuery<HTMLElementTagNameMap[K]>> /** * Finds the descendent DOM elements with the given selector. * * @see https://on.cypress.io/find * @example * // Find the li's within the nav * cy.get('.left-nav>.nav').find('>li') */ find<E extends Node = HTMLElement>(selector: string, options?: Partial<Loggable & Timeoutable & Shadow>): Chainable<JQuery<E>> /** * Get the first DOM element within a set of DOM elements. * * @see https://on.cypress.io/first */ first(options?: Partial<Loggable & Timeoutable>): Chainable<Subject> /** * Load a fixed set of data located in a file. * * @see https://on.cypress.io/fixture */ fixture<Contents = any>(path: string, options?: Partial<Timeoutable>): Chainable<Contents> // no log? /** * Load a fixed set of data located in a file with given encoding. * * @see https://on.cypress.io/fixture */ fixture<Contents = any>(path: string, encoding: Encodings, options?: Partial<Timeoutable>): Chainable<Contents> // no log? /** * Focus on a DOM element. * * @see https://on.cypress.io/focus * @example * cy.get('input').first().focus() // Focus on the first input */ focus(options?: Partial<Loggable & Timeoutable>): Chainable<Subject> /** * Get the DOM element that is currently focused. * * @see https://on.cypress.io/focused * @example * // Get the element that is focused * cy.focused().then(function($el) { * // do something with $el * }) * // Blur the element with focus * cy.focused().blur() * // Make an assertion on the focused element * cy.focused().should('have.attr', 'name', 'username') */ focused(options?: Partial<Loggable & Timeoutable>): Chainable<JQuery> /** * Get one or more DOM elements by node name: input, button, etc. * @see https://on.cypress.io/get * @example * cy.get('input').should('be.disabled') * cy.get('button').should('be.visible') */ get<K extends keyof HTMLElementTagNameMap>(selector: K, options?: Partial<Loggable & Timeoutable & Withinable & Shadow>): Chainable<JQuery<HTMLElementTagNameMap[K]>> /** * Get one or more DOM elements by selector. * The querying behavior of this command matches exactly how $(…) works in jQuery. * @see https://on.cypress.io/get * @example * cy.get('.list>li') // Yield the <li>'s in <.list> * cy.get('ul li:first').should('have.class', 'active') * cy.get('.dropdown-menu').c