Scroll Examples

Using the cy.scrollToopen in new window command.

Scroll horizontally

📺 Watch this recipe explained in the video Cypress Horizontal Scroll Exampleopen in new window.

<div id="scrollable-horizontal">
    <div style="width: 3000px">
      <ul>
        <li class="square100">1</li>
        <li class="square100">2</li>
        <li class="square100">3</li>
        <li class="square100">4</li>
        <li class="square100">5</li>
        <li class="square100">6</li>
        <li class="square100">7</li>
        <li class="square100">8</li>
      </ul>
    </div>
  </div>
</div>
#scrollable-horizontal {
  height: 200px;
  width: 400px;
  overflow: auto;
}

.square100 {
  width: 100px;
  height: 100px;
  background-color: teal;
}

#scrollable-horizontal {
  background-color: #ddd;
  border: 1px solid #777;
  border-radius: 4px;
  margin-bottom: 15px;
}

#scrollable-horizontal ul {
  padding: 0;
  overflow: auto;
}

#scrollable-horizontal ul > li {
  list-style: none;
  margin: 20px;
  float: left;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 50px;
}

::-webkit-scrollbar {
  -webkit-appearance: none;
  width: 12px;
  height: 12px;
}

::-webkit-scrollbar-track {
  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb {
  border-radius: 4px;
  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
}

Initially, the scrollable container starts at the left edge

cy.get('#scrollable-horizontal').should(
  'have.prop',
  'scrollLeft',
  0,
)

Some of the blocks are visible, some are hidden by the overflow.

cy.get('#scrollable-horizontal')
  .contains('li', '1')
  .should('be.visible')
cy.get('#scrollable-horizontal')
  .contains('li', '4')
  .should('not.be.visible')

Scroll the container by 300 pixels to the right. I like adding duration parameter to make the scroll visible

// we can give the X pixel amount either as a number
// or as a string: 300 or "300px"
cy.get('#scrollable-horizontal').scrollTo(300, {
  duration: 700,
})

Confirm the element has been scrolled and stays scrolled. ⚠️ Sometimes framework "resets" the scroll, so give our app some time to "think" and then check.

cy.wait(100)
  .get('#scrollable-horizontal')
  .should('have.prop', 'scrollLeft', 300)

Confirm the first block is now hidden and the 4th block is visible.

cy.get('#scrollable-horizontal')
  .contains('li', '1')
  .should('not.be.visible')
cy.get('#scrollable-horizontal')
  .contains('li', '4')
  .should('be.visible')