- Updated some existing api docs to reflect structure changes - Added missing ‘pause’ command to sidebar and .yml english.
3.5 KiB
title, comments, description
| title | comments | description |
|---|---|---|
| its | true |
Get a property on the previously yielded subject.
{% note info %}
If you want to call a function on the previously yielded subject, use cy.invoke.
{% endnote %}
Syntax
.its(propertyName)
Usage
.its() requires being chained off another cy command that yields an object with properties.
{% fa fa-check-circle green %} Valid Usage
cy.wrap({width: '50'}).its('width') // Get the 'width' property
cy.location().its('href') // Get the 'href' property
{% fa fa-exclamation-triangle red %} Invalid Usage
cy.its('window') // Errors, cannot be chained off 'cy'
cy.clearCookies().its('length') // Errors, 'clearCookies' does not yield Object
Arguments
{% fa fa-angle-right %} propertyName (String)
Name of property or nested properties (with dot notation) to get.
Yields
.invoke() yields the value of the property.
Timeout
Examples
Plain Objects
Get property
cy.wrap({foo: 'bar'}).its('foo').should('eq', 'bar') // true
DOM Elements
Get the length property of a DOM element
cy
.get('ul li') // this returns us the jquery object
.its('length') // calls the 'length' property returning that value
.should('be.gt', 2) // ensure this length is greater than 2
})
Strings
Get length of title
cy.title().its('length').should('eq', 24)
Functions
Get function property
var fn = function(){
return 'bar'
}
cy.wrap({foo: fn}).its('foo').should('be.a', 'function')
Inspect function
You can access functions to then drill into their own properties instead of invoking them.
// Your app code
// a basic Factory constructor
var Factory = function(arg){
...
}
Factory.create = function(arg){
return new Factory(arg)
}
// assign it to the window
window.Factory = Factory
cy
.window() // yields window object
.its('Factory') // yields Factory function
.invoke('create', 'arg') // now invoke properties on it
{% note info %}
Check out our example recipe on testing window.fetch using .its()
{% endnote %}
Nested Properties
You can drill into nested properties by using dot notation.
var user = {
contacts: {
work: {
name: 'Kamil'
}
}
}
cy.wrap(user).its('contacts.work.name').should('eq', 'Kamil') // true
Command Log
Get responseBody of aliased route
cy
.server()
.route(/comments/, 'fixture:comments.json').as('getComments')
.get('#fetch-comments').click()
.wait('@getComments')
.its('responseBody')
.should('deep.eq', [
{id: 1, comment: 'hi'},
{id: 2, comment: 'there'}
])
The commands above will display in the command log as:
When clicking on its within the command log, the console outputs the following:

