Bird
Raised Fist0
Cypresstesting~20 mins

cy.prev() and cy.next() in Cypress - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Cypress PrevNext Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Cypress test snippet?

Consider the following HTML and Cypress test code. What text will the assertion check?

Cypress
<ul>
  <li>Item 1</li>
  <li class="selected">Item 2</li>
  <li>Item 3</li>
</ul>

// Cypress test snippet
cy.get('li.selected').prev().should('have.text', 'Item 1');
AThe test fails because the previous sibling has text 'Item 3'.
BThe test passes because the previous sibling has text 'Item 1'.
CThe test fails because there is no previous sibling.
DThe test passes because the previous sibling has text 'Item 2'.
Attempts:
2 left
💡 Hint

Remember, cy.prev() selects the immediate previous sibling element.

❓ Predict Output
intermediate
2:00remaining
What will this Cypress command select?

Given this HTML snippet, what element will cy.get('.active').next() select?

Cypress
<div>
  <button>Save</button>
  <button class="active">Cancel</button>
  <button>Delete</button>
</div>
ANo element, because <code>.active</code> is the last button.
BThe button with text 'Save'.
CThe button with text 'Delete'.
DThe button with text 'Cancel'.
Attempts:
2 left
💡 Hint

cy.next() selects the immediate next sibling element.

❓ assertion
advanced
2:00remaining
Which assertion correctly verifies the previous sibling's class?

You want to check that the previous sibling of an element with id #current has the class highlight. Which assertion is correct?

Cypress
cy.get('#current').prev()
Acy.get('#current').prev().should('have.class', 'highlight');
Bcy.get('#current').prev().should('contain.text', 'highlight');
Ccy.get('#current').prev().should('have.text', 'highlight');
Dcy.get('#current').prev().should('have.attr', 'class', 'highlight');
Attempts:
2 left
💡 Hint

Use the assertion that checks for a CSS class on the element.

🔧 Debug
advanced
2:00remaining
Why does this Cypress test fail?

Given this HTML and test code, why does the test fail?

Cypress
<ul>
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>

// Test code
cy.get('li').last().next().should('exist');
ABecause <code>cy.next()</code> returns no element when called on the last sibling, so the assertion fails.
BBecause <code>cy.last()</code> is not a valid Cypress command.
CBecause <code>cy.get('li').last()</code> selects the first <li> instead of the last.
DBecause <code>cy.next()</code> selects the previous sibling, not the next.
Attempts:
2 left
💡 Hint

Think about what happens when you call next() on the last sibling element.

🧠 Conceptual
expert
3:00remaining
How does cy.prev() behave with non-element siblings?

In Cypress, if an element has a previous sibling that is a text node (like whitespace or newline), what does cy.prev() select?

A<p><code>cy.prev()</code> selects the previous sibling node regardless of type, including text nodes.</p>
B<p><code>cy.prev()</code> returns the parent element if the previous sibling is a text node.</p>
C<p><code>cy.prev()</code> throws an error if the previous sibling is not an element node.</p>
D<p><code>cy.prev()</code> skips non-element nodes and selects the closest previous sibling element node.</p>
Attempts:
2 left
💡 Hint

Think about how Cypress interacts with the DOM elements versus text nodes.

Practice

(1/5)
1. What does cy.prev() do in Cypress testing?
easy
A. Selects the element immediately after the current element
B. Selects all sibling elements of the current element
C. Selects the element immediately before the current element
D. Selects the parent element of the current element

Solution

  1. Step 1: Understand the purpose of cy.prev()

    cy.prev() is used to get the element immediately before the current element in the DOM.
  2. Step 2: Compare with other options

    cy.next() gets the element after, siblings means all at the same level, and parent is the container element. So only cy.prev() matches Selects the element immediately before the current element.
  3. Final Answer:

    Selects the element immediately before the current element -> Option C
  4. Quick Check:

    cy.prev() = previous element [OK]
Hint: Prev means previous element before current [OK]
Common Mistakes:
  • Confusing cy.prev() with cy.next()
  • Thinking it selects parent or all siblings
  • Assuming it selects elements after current
2. Which of the following is the correct syntax to get the next sibling element of a button with id submitBtn using Cypress?
easy
A. cy.get('#submitBtn').prev()
B. cy.get('#submitBtn').next()
C. cy.get('#submitBtn').parent()
D. cy.get('#submitBtn').children()

Solution

  1. Step 1: Identify the method to get next sibling

    To get the next sibling element, Cypress uses cy.next().
  2. Step 2: Match syntax with the element selector

    cy.get('#submitBtn').next() correctly selects the button and then its next sibling.
  3. Final Answer:

    cy.get('#submitBtn').next() -> Option B
  4. Quick Check:

    next() gets next sibling [OK]
Hint: Use .next() after .get() to get next sibling [OK]
Common Mistakes:
  • Using .prev() instead of .next()
  • Using .parent() which gets the container
  • Using .children() which gets child elements
3. Given the HTML structure:
<ul>
  <li>Item 1</li>
  <li id="selected">Item 2</li>
  <li>Item 3</li>
</ul>

What text will the following Cypress command get?
cy.get('#selected').prev().invoke('text')
medium
A. Error: No previous element
B. "Item 3"
C. "Item 2"
D. "Item 1"

Solution

  1. Step 1: Identify the current element and its previous sibling

    The element with id "selected" is the second <li> with text "Item 2". Its previous sibling is the first <li> with text "Item 1".
  2. Step 2: Understand what invoke('text') does

    This command gets the text content of the selected element, so it will return "Item 1".
  3. Final Answer:

    "Item 1" -> Option D
  4. Quick Check:

    prev() gets previous sibling text [OK]
Hint: prev() gets previous sibling's text [OK]
Common Mistakes:
  • Confusing prev() with next()
  • Expecting text of current element
  • Assuming error if previous exists
4. You wrote this Cypress code:
cy.get('.active').next().click()

But the test fails with an error saying Cannot read property 'click' of undefined. What is the most likely cause?
medium
A. There is no next sibling element after the element with class 'active'
B. The selector '.active' is incorrect
C. You should use prev() instead of next()
D. The click() method is not valid in Cypress

Solution

  1. Step 1: Analyze the error message

    The error says Cannot read property 'click' of undefined, meaning next() returned no element.
  2. Step 2: Understand what causes next() to return undefined

    If the current element has no next sibling, next() returns nothing, so calling click() fails.
  3. Final Answer:

    There is no next sibling element after the element with class 'active' -> Option A
  4. Quick Check:

    next() returns undefined if no next sibling [OK]
Hint: Check if next sibling exists before clicking [OK]
Common Mistakes:
  • Assuming selector is wrong without checking DOM
  • Using prev() instead of next() without reason
  • Thinking click() is invalid in Cypress
5. You want to verify that a list item with class selected has a previous sibling with text "Home" and a next sibling with text "Contact". Which Cypress code correctly checks this?
hard
A. cy.get('.selected').prev().should('have.text', 'Home'); cy.get('.selected').next().should('have.text', 'Contact')
B. cy.get('.selected').prev().should('have.text', 'Home').next().should('have.text', 'Contact')
C. cy.get('.selected').prev().should('have.text', 'Contact').next().next().should('have.text', 'Home')
D. cy.get('.selected').prev().next().should('have.text', 'Contact')

Solution

  1. Step 1: Understand chaining of prev() and next()

    Using prev() then next() on the same chain moves from previous element back to the selected element, not to the next sibling.
  2. Step 2: Separate commands for previous and next siblings

    To check previous and next siblings independently, use separate cy.get('.selected') calls with prev() and next().
  3. Final Answer:

    cy.get('.selected').prev().should('have.text', 'Home'); cy.get('.selected').next().should('have.text', 'Contact') -> Option A
  4. Quick Check:

    Use separate calls for prev() and next() [OK]
Hint: Use separate cy.get() for prev() and next() checks [OK]
Common Mistakes:
  • Chaining prev() and next() incorrectly
  • Using next().next() instead of next()
  • Assuming prev().next() gets next sibling
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard