Skip to main content


Invoke a function on the previously yielded subject.


If you want to get a property that is not a function on the previously yielded subject, use .its().


If you chain further commands off of .invoke(), it will be called multiple times. If you only want the method to be called once, end your chain with .invoke() and start fresh with cy afterwards.


.invoke(options, functionName)
.invoke(functionName, args...)
.invoke(options, functionName, args...)


Correct Usage

cy.get('.input').invoke('val').should('eq', 'foo') // Invoke the 'val' function
cy.get('.modal').invoke('show') // Invoke the jQuery 'show' function
cy.wrap({ animate: fn }).invoke('animate') // Invoke the 'animate' function

Incorrect Usage

cy.invoke('convert') // Errors, cannot be chained off 'cy'
cy.wrap({ name: 'Jane' }).invoke('name') // Errors, 'name' is not a function
cy.wrap({ animate: fn })
.then(() => {}) // 'animate' will be called multiple times


functionName (String, Number)

Name of function to be invoked.

options (Object)

Pass in an options object to change the default behavior of .invoke().

logtrueDisplays the command in the Command log
timeoutdefaultCommandTimeoutTime to wait for .invoke() to resolve before timing out


Additional arguments to be given to the function call. There is no limit to the number of arguments.


  • .invoke() yields the return value of the method.
  • .invoke() is a query, and it is safe to chain further commands.
  • If you chain additional commands off of .invoke(), the function will be called multiple times!



Assert on a function's return value

const fn = () => {
return 'bar'

cy.wrap({ foo: fn }).invoke('foo').should('eq', 'bar') // true

Use .invoke() to test HTML content

Properties that are functions are invoked

In the example below, we use .invoke() to force a hidden div to be 'display: block' so we can interact with its children elements.

.should('be.hidden') // element is hidden
.invoke('show') // call jquery method 'show' on the '.container'
.should('be.visible') // element is visible now
.find('input') // drill down into a child "input" element
.type('Cypress is great') // and type text

Use .invoke('show') and .invoke('trigger')

Function with Arguments

Send specific arguments to the function

const fn = (a, b, c) => {
return a + b + c

cy.wrap({ sum: fn })
.invoke('sum', 2, 4, 6)
.should('', 10) // true
.and('', 20) // true

Use cy.invoke('removeAttr', 'target') to get around new tab

Arguments are automatically forwarded to the function

cy.get('img').invoke('attr', 'src').should('include', 'myLogo')


In the above examples, the subject was an object, but cy.invoke also works on arrays and allows using numerical index to pick a function to run.

const reverse = (s) => Cypress._.reverse(s)
const double = (n) => n * n

// picks function with index 1 and calls it with argument 4
cy.wrap([reverse, double]).invoke(1, 4).should('eq', 16)

jQuery method

If the parent command yields a jQuery element, we can invoke a jQuery method, like attr, text, or val. To confirm the element's id attribute for example:

<div id="code-snippet">The code example</div>
cy.contains('The code example')
.invoke('attr', 'id')
.should('equal', 'code-snippet')

Tip: Cypress has a built-in Chai-jQuery assertion to confirm the attribute. The above example can be written simply as:

cy.contains('The code example').should('have.attr', 'id', 'code-snippet')


Third Party Plugins

Using a Kendo DropDown

If you are using jQuery then the jQuery wrapped elements will automatically have your 3rd party plugins available to be called.

.then((dropDownList) => {
// yields the return of $input.getKendoDropDownList()

We can rewrite the previous example in a more terse way and add an assertion.

.invoke('select', 'apples')
.should('match', /apples/)


.invoke() automatically retries invoking the specified method until the returned value satisfies the attached assertions. The example below passes after 1 second.

let message = 'hello'
const english = {
greeting() {
return message

setTimeout(() => {
message = 'bye'
}, 1000)

// initially the english.greeting() returns "hello" failing the assertion.
// .invoke('greeting') tries again and again until after 1 second
// the returned message becomes "bye" and the assertion passes
cy.wrap(english).invoke('greeting').should('equal', 'bye')
Invoke retries example



  • .invoke() requires being chained off a previous command.


  • .invoke() will wait for the function to exist on the subject before running.
  • .invoke() will throw an error if the invoked function returns a promise. If you want to invoke a function that returns a promise, use .then() instead.
  • .invoke() will automatically retry until all chained assertions have passed.


  • .invoke() can time out waiting for assertions you've added to pass.

Command Log

Invoke jQuery show method on element


The commands above will display in the Command Log as:

Command Log for invoke

When clicking on invoke within the command log, the console outputs the following:

Console Log for invoke


12.0.0.invoke() no longer supports promises or async functions
3.8.0Added support for options argument
3.7.0Added support for arguments of type Number for functionName

See also