.type()

To type into a DOM element, use the .type() command.

cy.get('.action-email').type('[email protected]')
cy.get('.action-email').should('have.value', '[email protected]')

// .type() with special character sequences
cy.get('.action-email').type('{leftarrow}{rightarrow}{uparrow}{downarrow}')
cy.get('.action-email').type('{del}{selectall}{backspace}')

// .type() with key modifiers
cy.get('.action-email').type('{alt}{option}') //these are equivalent
cy.get('.action-email').type('{ctrl}{control}') //these are equivalent
cy.get('.action-email').type('{meta}{command}{cmd}') //these are equivalent
cy.get('.action-email').type('{shift}')

// Delay each keypress by 0.1 sec
cy.get('.action-email').type('[email protected]', { delay: 100 })
cy.get('.action-email').should('have.value', '[email protected]')

cy.get('.action-disabled')
  // Ignore error checking prior to type
  // like whether the input is visible or disabled
  .type('disabled error checking', { force: true })
cy.get('.action-disabled').should('have.value', 'disabled error checking')

.focus()

To focus on a DOM element, use the .focus() command.

cy.get('.action-focus').focus()
cy.get('.action-focus').should('have.class', 'focus')
  .prev().should('have.attr', 'style', 'color: orange;')

.blur()

To blur on a DOM element, use the .blur() command.

cy.get('.action-blur').type('About to blur')
cy.get('.action-blur').blur()
cy.get('.action-blur').should('have.class', 'error')
  .prev().should('have.attr', 'style', 'color: red;')
          

.clear()

To clear on a DOM element, use the .clear() command.

cy.get('.action-clear').type('Clear this text')
cy.get('.action-clear').should('have.value', 'Clear this text')
cy.get('.action-clear').clear()
cy.get('.action-clear').should('have.value', '')

.submit()

To submit a form, use the cy.submit() command.

cy.get('.action-form')
  .find('[type="text"]').type('HALFOFF')
      
cy.get('.action-form').submit()
cy.get('.action-form').next().should('contain', 'Your form has been submitted!')

.click()

To click a DOM element, use the .click() command.

cy.get('.action-btn').click()

// You can click on 9 specific positions of an element:
//  -----------------------------------
// | topLeft        top       topRight |
// |                                   |
// |                                   |
// |                                   |
// | left          center        right |
// |                                   |
// |                                   |
// |                                   |
// | bottomLeft   bottom   bottomRight |
//  -----------------------------------

// clicking in the center of the element is the default
cy.get('#action-canvas').click()

cy.get('#action-canvas').click('topLeft')
cy.get('#action-canvas').click('top')
cy.get('#action-canvas').click('topRight')
cy.get('#action-canvas').click('left')
cy.get('#action-canvas').click('right')
cy.get('#action-canvas').click('bottomLeft')
cy.get('#action-canvas').click('bottom')
cy.get('#action-canvas').click('bottomRight')

// .click() accepts an x and y coordinate
// that controls where the click occurs :)

cy.get('#action-canvas')
cy.get('#action-canvas').click(80, 75) // click 80px on x coord and 75px on y coord
cy.get('#action-canvas').click(170, 75)
cy.get('#action-canvas').click(80, 165)
cy.get('#action-canvas').click(100, 185)
cy.get('#action-canvas').click(125, 190)
cy.get('#action-canvas').click(150, 185)
cy.get('#action-canvas').click(170, 165)

// click multiple elements by passing multiple: true
cy.get('.action-labels>.label').click({ multiple: true })

// Ignore error checking prior to clicking
cy.get('.action-opacity>.btn').click({ force: true })

Canvas to Illustrate Click Positions

click me and me and me and me and me and me


.dblclick()

To double click a DOM element, use the .dblclick() command.

// Our app has a listener on 'dblclick' event in our 'scripts.js'
// that hides the div and shows an input on double click
cy.get('.action-div').dblclick()
cy.get('.action-div').should('not.be.visible')
cy.get('.action-input-hidden').should('be.visible')
Double click to edit

.rightclick()

To right click a DOM element, use the .rightclick() command.

// Our app has a listener on 'contextmenu' event in our 'scripts.js'
// that hides the div and shows an input on right click
cy.get('.rightclick-action-div').rightclick()
cy.get('.rightclick-action-div').should('not.be.visible')
cy.get('.rightclick-action-input-hidden').should('be.visible')
Right click to edit

.check()

To check a checkbox or radio, use the .check() command.

// By default, .check() will check all
// matching checkbox or radio elements in succession, one after another
cy.get('.action-checkboxes [type="checkbox"]').not('[disabled]').check()
cy.get('.action-checkboxes [type="checkbox"]').not('[disabled]').should('be.checked')

cy.get('.action-radios [type="radio"]').not('[disabled]').check()
cy.get('.action-radios [type="radio"]').not('[disabled]').should('be.checked')

// .check() accepts a value argument
cy.get('.action-radios [type="radio"]').check('radio1')
cy.get('.action-radios [type="radio"]').should('be.checked')

// .check() accepts an array of values
cy.get('.action-multiple-checkboxes [type="checkbox"]').check(['checkbox1', 'checkbox2'])
cy.get('.action-multiple-checkboxes [type="checkbox"]').should('be.checked')

// Ignore error checking prior to checking
cy.get('.action-checkboxes [disabled]').check({ force: true })
cy.get('.action-checkboxes [disabled]').should('be.checked')

cy.get('.action-radios [type="radio"]').check('radio3', { force: true })
cy.get('.action-radios [type="radio"]').should('be.checked')



.uncheck()

To uncheck a checkbox or radio, use the .uncheck() command.

// By default, .uncheck() will uncheck all matching
// checkbox elements in succession, one after another
cy.get('.action-check [type="checkbox"]')
  .not('[disabled]')
  .uncheck()
cy.get('.action-check [type="checkbox"]')
  .not('[disabled]')
  .should('not.be.checked')

// .uncheck() accepts a value argument
cy.get('.action-check [type="checkbox"]')
  .check('checkbox1')
cy.get('.action-check [type="checkbox"]')
  .uncheck('checkbox1')
cy.get('.action-check [type="checkbox"][value="checkbox1"]')
  .should('not.be.checked')

// .uncheck() accepts an array of values
cy.get('.action-check [type="checkbox"]')
  .check(['checkbox1', 'checkbox3'])
cy.get('.action-check [type="checkbox"]')
  .uncheck(['checkbox1', 'checkbox3'])
cy.get('.action-check [type="checkbox"][value="checkbox1"]')
  .should('not.be.checked')
cy.get('.action-check [type="checkbox"][value="checkbox3"]')
  .should('not.be.checked')

// Ignore error checking prior to unchecking
cy.get('.action-check [disabled]').uncheck({ force: true })
cy.get('.action-check [disabled]').should('not.be.checked')

.select()

To select an option in a select, use the .select() command.

// at first, no option should be selected
cy.get('.action-select')
  .should('have.value', '--Select a fruit--')

// Select option(s) with matching text content
cy.get('.action-select').select('apples')
// confirm the apples were selected
// note that each value starts with "fr-" in our HTML
cy.get('.action-select').should('have.value', 'fr-apples')

cy.get('.action-select-multiple')
  .select(['apples', 'oranges', 'bananas'])
cy.get('.action-select-multiple')
  // when getting multiple values, invoke "val" method first
  .invoke('val')
  .should('deep.equal', ['fr-apples', 'fr-oranges', 'fr-bananas'])

// Select option(s) with matching value
cy.get('.action-select').select('fr-bananas')
cy.get('.action-select')
  // can attach an assertion right away to the element
  .should('have.value', 'fr-bananas')

cy.get('.action-select-multiple')
  .select(['fr-apples', 'fr-oranges', 'fr-bananas'])
cy.get('.action-select-multiple')
  .invoke('val')
  .should('deep.equal', ['fr-apples', 'fr-oranges', 'fr-bananas'])

// assert the selected values include oranges
cy.get('.action-select-multiple')
  .invoke('val').should('include', 'fr-oranges')

.scrollIntoView()

To scroll an element into view, use the .scrollintoview() command.

// normally all of these buttons are hidden,
// because they're not within
// the viewable area of their parent
// (we need to scroll to see them)
cy.get('#scroll-horizontal button')
  .should('not.be.visible')

// scroll the button into view, as if the user had scrolled
cy.get('#scroll-horizontal button').scrollIntoView()
cy.get('#scroll-horizontal button')
  .should('be.visible')

cy.get('#scroll-vertical button')
  .should('not.be.visible')

// Cypress handles the scroll direction needed
cy.get('#scroll-vertical button').scrollIntoView()
cy.get('#scroll-vertical button')
  .should('be.visible')

cy.get('#scroll-both button')
  .should('not.be.visible')

// Cypress knows to scroll to the right and down
cy.get('#scroll-both button').scrollIntoView()
cy.get('#scroll-both button')
  .should('be.visible')
Horizontal Scroll
Vertical Scroll
Both Scroll

cy.scrollTo()

To scroll the window or a scrollable element to a specific position, use the cy.scrollTo() command.

// You can scroll to 9 specific positions of an element:
//  -----------------------------------
// | topLeft        top       topRight |
// |                                   |
// |                                   |
// |                                   |
// | left          center        right |
// |                                   |
// |                                   |
// |                                   |
// | bottomLeft   bottom   bottomRight |
//  -----------------------------------

// if you chain .scrollTo() off of cy, we will
// scroll the entire window
cy.scrollTo('bottom')

cy.get('#scrollable-horizontal').scrollTo('right')

// or you can scroll to a specific coordinate:
// (x axis, y axis) in pixels
cy.get('#scrollable-vertical').scrollTo(250, 250)

// or you can scroll to a specific percentage
// of the (width, height) of the element
cy.get('#scrollable-both').scrollTo('75%', '25%')

// control the easing of the scroll (default is 'swing')
cy.get('#scrollable-vertical').scrollTo('center', { easing: 'linear' })

// control the duration of the scroll (in ms)
cy.get('#scrollable-both').scrollTo('center', { duration: 2000 })
Horizontal Scroll
Vertical Scroll
Both Scroll

.trigger()

To trigger an event on a DOM element, use the .trigger() command.

// To interact with a range input (slider)
// we need to set its value & trigger the
// event to signal it changed

// Here, we invoke jQuery's val() method to set
// the value and trigger the 'change' event
cy.get('.trigger-input-range')
  .invoke('val', 25)
cy.get('.trigger-input-range')
  .trigger('change')
cy.get('.trigger-input-range')
  .get('input[type=range]').siblings('p')
  .should('have.text', '25')

0