- Updated some existing api docs to reflect structure changes - Added missing ‘pause’ command to sidebar and .yml english.
3.7 KiB
title, comments, description
| title | comments | description |
|---|---|---|
| invoke | true |
Invoke a function on the previously yielded subject.
{% note info %}
If you want to get a property that is not a function on the previously yielded subject, use .its().
{% endnote %}
Syntax
.invoke(functionName)
.invoke(functionName, args...)
Usage
.invoke() requires being chained off another cy command that yields an object with function properties.
{% fa fa-check-circle green %} Valid Usage
cy.wrap({animate: fn}).invoke('animate') // Invoke the 'animate' function
cy.get('.modal').invoke('show') // Invoke the jQuery 'show' function
{% fa fa-exclamation-triangle red %} Invalid Usage
cy.invoke('convert') // Errors, cannot be chained off 'cy'
cy.wrap({name: 'Jane'}).invoke('name') // Errors, 'name' is not a function
Arguments
{% fa fa-angle-right %} functionName (String)
Name of function to be invoked.
{% fa fa-angle-right %} args...
Additional arguments to be given to the function call. There is no limit to the number of arguments.
Yields
.invoke() yields the return value of the invoked property.
Timeout
Examples
Function
Assert on a function's return value
var fn = function(){
return 'bar'
}
cy.wrap({foo: fn}).invoke('foo').should('eq', 'bar') // true
{% note info %} Check out our example recipe where we use cy.invoke('text') to test against HTML content {% endnote %}
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.
cy.get('div.container').should('be.hidden') // true
.invoke('show') // call jquery method 'show' on the '.container'
.should('be.visible') // true
.find('input').type('Cypress is great')
{% note info %} Check out our example recipe where we use cy.invoke('show') and cy.invoke('trigger') to click an element that is only visible on hover {% endnote %}
3rd Party Plugins
Using a Kendo DropDown
Invoke functions available from 3rd party plugins included in your app.
cy.get('input').invoke('getKendoDropDownList').then(function(dropDownList){
// yields the return of $input.getKendoDropDownList()
return dropDownList.select('apples')
})
We can rewrite the previous example in a more terse way and add an assertion.
cy
.get('input')
.invoke('getKendoDropDownList')
.invoke('select', 'apples')
.its('val').should('match', /apples/)
Function with Arguments
Send specific arguments to the function
var fn = function(a, b, c){
return a + b + c
}
cy
.wrap({sum: fn})
.invoke('sum', 2, 4, 6)
.should('be.gt', 10) // true
.and('be.lt', 20) // true
{% note info %} Check out our example recipe where we use cy.invoke('removeAttr', 'target') to test clicking on a link without opening in a new tab {% endnote %}
Arguments are automatically forwarded to the function
cy
.get('img').invoke('attr', 'src')
.should('include', 'myLogo')