This test visits a page, then uses within to type inside a form only. It confirms the input inside the form has the typed value.
Cypress
describe('Scoped queries with cy.within()', () => {
beforeEach(() => {
cy.visit('https://example.cypress.io/commands/actions')
})
it('types only inside the form using within', () => {
cy.get('.action-form').within(() => {
cy.get('.action-email').type('test@example.com').should('have.value', 'test@example.com')
cy.get('.action-btn').click()
})
})
})
OutputSuccess
Important Notes
Always use clear selectors to avoid confusion inside within.
Commands inside within are chained to the scoped element, so no need to repeat the parent selector.
Summary
cy.within() limits commands to a specific part of the page.
It helps tests be more reliable and easier to understand.
Use it when you have similar elements in different sections.
Practice
(1/5)
1. What is the main purpose of using cy.within() in Cypress tests?
easy
A. To run tests faster by skipping some steps
B. To select all elements on the page at once
C. To limit commands to a specific section of the page
D. To reset the browser state between tests
Solution
Step 1: Understand the role of cy.within()
cy.within() scopes all commands inside it to a specific part of the page, so only elements inside that section are targeted.
Step 2: Compare with other options
Options A, C, and D describe unrelated Cypress features. Only To limit commands to a specific section of the page correctly describes cy.within().
Final Answer:
To limit commands to a specific section of the page -> Option C
Quick Check:
Scope commands = Limit to section [OK]
Hint: Think of within as focusing on one page part [OK]
Common Mistakes:
Confusing cy.within() with global selectors
Thinking it speeds up tests by skipping steps
Assuming it resets browser state
2. Which of the following is the correct syntax to use cy.within() to scope commands inside a <form> element with id loginForm?
easy
A. cy.get('#loginForm').within(() => { /* commands */ })
B. cy.within('#loginForm', () => { /* commands */ })
C. cy.within(() => cy.get('#loginForm'))
D. cy.get('#loginForm').scope(() => { /* commands */ })
Solution
Step 1: Recall correct cy.within() usage
The correct pattern is to first get the element, then call within() with a callback containing scoped commands.
Step 2: Analyze each option
cy.get('#loginForm').within(() => { /* commands */ }) matches the correct syntax. cy.within('#loginForm', () => { /* commands */ }) is invalid because cy.within() does not take a selector as first argument. cy.within(() => cy.get('#loginForm')) misuses within by nesting get inside callback. cy.get('#loginForm').scope(() => { /* commands */ }) uses a non-existent scope method.
Final Answer:
cy.get('#loginForm').within(() => { /* commands */ }) -> Option A
Quick Check:
Get element then within callback = C [OK]
Hint: Always call within() on a selected element [OK]
B. Clicks the button inside #section1 with text 'Click Me'
C. Clicks the button inside #section2 with text 'Don't Click Me'
D. Clicks both buttons with class 'btn'
Solution
Step 1: Understand within() scope
The within() limits commands to elements inside #section1. So cy.get('.btn') finds only the button inside #section1.
Step 2: Identify clicked button
The button inside #section1 has text 'Click Me', so that is clicked. Buttons outside #section1 are ignored.
Final Answer:
Clicks the button inside #section1 with text 'Click Me' -> Option B
Quick Check:
Scoped get clicks inside section1 only [OK]
Hint: Within limits get to one section only [OK]
Common Mistakes:
Thinking all buttons on page are clicked
Assuming error due to multiple buttons
Confusing which section is scoped
4. You wrote this Cypress test:
cy.within(() => {
cy.get('.item').click()
})
But it fails with error: Cannot read property 'within' of undefined. What is the likely cause?
medium
A. The callback function is missing parentheses
B. The selector .item is incorrect
C. You cannot use within() with cy.get()
D. You forgot to select an element before calling within()
Solution
Step 1: Analyze error message
The error says within is called on undefined, meaning cy.within() is not a valid method.
Step 2: Check usage of within()
within() is a method on a selected element, like cy.get(...).within(). Calling cy.within() directly is invalid.
Final Answer:
You forgot to select an element before calling within() -> Option D
Quick Check:
Call within() on element, not on cy [OK]
Hint: Always select element before within() [OK]
Common Mistakes:
Calling within() directly on cy
Blaming selector instead of method usage
Ignoring error message details
5. You have two sections on a page, each with a button labeled 'Submit'. You want to click the 'Submit' button only inside the section with id form2. Which Cypress code correctly does this?
hard
A. cy.get('#form2').within(() => { cy.contains('Submit').click() })
B. cy.contains('Submit').click()
C. cy.get('button').contains('Submit').click()
D. cy.within('#form2', () => { cy.get('button').click() })
Solution
Step 1: Identify the need for scoping
Since there are multiple 'Submit' buttons, we must limit the search to the section with id form2 to avoid clicking the wrong button.
Step 2: Check each option's correctness
cy.get('#form2').within(() => { cy.contains('Submit').click() }) correctly uses cy.get('#form2').within() to scope commands, then finds and clicks the 'Submit' button inside. cy.contains('Submit').click() clicks the first 'Submit' button anywhere, which is unsafe. cy.get('button').contains('Submit').click() tries to chain contains incorrectly and is ambiguous. cy.within('#form2', () => { cy.get('button').click() }) uses invalid syntax for within().
Final Answer:
cy.get('#form2').within(() => { cy.contains('Submit').click() }) -> Option A
Quick Check:
Scope then find button inside = A [OK]
Hint: Use get then within to scope clicks [OK]
Common Mistakes:
Clicking buttons without scoping causes wrong clicks
Using within with selector argument
Misusing contains chaining
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.