We use cy.viewport() to test how a website looks and works on different screen sizes. This helps make sure the site works well on phones, tablets, and computers.
You want to check if a button is visible on a small phone screen.
You need to test if a menu changes correctly on a tablet size.
You want to verify that images resize properly on a desktop screen.
You want to make sure text is readable on different devices.
You want to test responsive layouts without changing your actual device.
Syntax
Cypress
cy.viewport(width, height)
// or
cy.viewport(presetName)
// width and height are numbers (pixels)// presetName is a string like 'iphone-6', 'ipad-2', 'macbook-15'
You can use exact width and height in pixels.
Or use preset device names for common screen sizes.
Examples
Set viewport to 320 pixels wide and 480 pixels tall (small phone size).
Cypress
cy.viewport(320, 480)
Set viewport to the size of an iPhone 6 using a preset name.
Cypress
cy.viewport('iphone-6')
Set viewport to a 15-inch MacBook screen size preset.
Cypress
cy.viewport('macbook-15')
Sample Program
This test sets the screen size to iPhone 6 and checks if the mobile menu button is visible. Then it sets a desktop size and checks if the full desktop menu is visible.
Cypress
describe('Test responsive layout', () => {
it('shows mobile menu on small screen', () => {
cy.viewport('iphone-6')
cy.visit('https://example.cypress.io')
cy.get('.mobile-menu-button').should('be.visible')
})
it('shows full menu on desktop', () => {
cy.viewport(1280, 720)
cy.visit('https://example.cypress.io')
cy.get('.desktop-menu').should('be.visible')
})
})
OutputSuccess
Important Notes
Always set viewport before visiting the page to simulate the device correctly.
Use cy.viewport() to catch layout bugs early.
Combine with screenshots to see visual differences.
Summary
cy.viewport() changes the screen size for your test.
You can use pixel sizes or device presets.
This helps test responsive design easily.
Practice
(1/5)
1. What is the main purpose of using cy.viewport() in Cypress tests?
easy
A. To change the screen size and test responsive layouts
B. To select elements on the page
C. To wait for an element to appear
D. To take screenshots of the page
Solution
Step 1: Understand the function of cy.viewport()
This command sets the browser's screen size to simulate different devices or resolutions.
Step 2: Identify the purpose in testing
Changing screen size helps test how the website looks and behaves on various devices, ensuring responsive design works.
Final Answer:
To change the screen size and test responsive layouts -> Option A
Quick Check:
cy.viewport() changes screen size = D [OK]
Hint: Remember: viewport changes screen size for responsive tests [OK]
Common Mistakes:
Confusing viewport with element selectors
Thinking viewport waits for elements
Assuming viewport takes screenshots
2. Which of the following is the correct syntax to set the viewport size to 1024 pixels wide and 768 pixels tall in Cypress?
easy
A. cy.viewport({width: 1024, height: 768});
B. cy.viewport(1024, 768);
C. cy.viewport('1024x768');
D. cy.setViewport(1024, 768);
Solution
Step 1: Recall the correct cy.viewport() syntax
The command accepts width and height as two separate number arguments: cy.viewport(width, height).
Step 2: Check each option
cy.viewport(1024, 768); uses two numbers correctly. cy.viewport('1024x768'); uses a string which is invalid. cy.viewport({width: 1024, height: 768}); uses an object which is not supported. cy.setViewport(1024, 768); uses a wrong command name.
Final Answer:
cy.viewport(1024, 768); -> Option B
Quick Check:
cy.viewport(width, height) = C [OK]
Hint: Use two numbers, not strings or objects, in cy.viewport() [OK]
Common Mistakes:
Passing size as a string like '1024x768'
Using an object instead of two numbers
Typing wrong command name like cy.setViewport
3. What will be the viewport size after running this Cypress code?
cy.viewport('iphone-6');
cy.viewport(800, 600);
medium
A. 800 pixels wide and 600 pixels tall
B. iPhone 6 preset size
C. Default viewport size
D. Test will fail due to conflicting viewport commands
Solution
Step 1: Understand command order in Cypress
Commands run in order. The last cy.viewport() call sets the final size.
Step 2: Analyze the code
First sets viewport to iPhone 6 size, then immediately changes it to 800x600 pixels.
Final Answer:
800 pixels wide and 600 pixels tall -> Option A
Quick Check:
Last cy.viewport() sets size = B [OK]
Hint: Last cy.viewport() call overrides previous sizes [OK]
Common Mistakes:
Thinking first viewport call persists
Assuming test fails on multiple viewport calls
Confusing preset names with pixel sizes
4. You wrote this code but the viewport size does not change as expected:
cy.viewport(1024);
What is the problem?
medium
A. Viewport size must be set before visiting the page
B. cy.viewport() does not accept numbers
C. Missing height argument in cy.viewport()
D. cy.viewport() only accepts device names
Solution
Step 1: Check the cy.viewport() parameters
The command requires both width and height as numbers, e.g., cy.viewport(1024, 768).
Step 2: Identify the error
Only width (1024) is provided, height is missing, so viewport size won't change correctly.
Final Answer:
Missing height argument in cy.viewport() -> Option C
Quick Check:
Both width and height needed = A [OK]
Hint: Always provide width and height numbers in cy.viewport() [OK]
Common Mistakes:
Passing only one number instead of two
Thinking cy.viewport accepts only device names
Believing viewport must be set before visiting page
5. You want to test your website's mobile and desktop views in one test. Which code snippet correctly sets the viewport to iPhone X size, runs a test, then changes to desktop size 1280x720 and runs another test?
hard
A. cy.viewport('iphone-x');\ncy.viewport(1280, 720);\ncy.get('#menu').should('be.visible');
B. cy.viewport('iphone-x', 1280, 720);\ncy.get('#menu').should('be.visible');
C. cy.viewport(1280, 720);\ncy.viewport('iphone-x');\ncy.get('#menu').should('be.visible');
D. cy.viewport('iphone-x');\ncy.get('#menu').should('be.visible');\ncy.viewport(1280, 720);\ncy.get('#menu').should('be.visible');
Solution
Step 1: Understand sequential viewport changes
You can call cy.viewport() multiple times to change screen size during a test.
Step 2: Check the code snippets
cy.viewport('iphone-x');\ncy.get('#menu').should('be.visible');\ncy.viewport(1280, 720);\ncy.get('#menu').should('be.visible'); sets iPhone X viewport, runs a check, then sets desktop viewport and runs the check again. This tests both views properly. cy.viewport('iphone-x', 1280, 720);\ncy.get('#menu').should('be.visible'); uses invalid syntax with multiple arguments. cy.viewport(1280, 720);\ncy.viewport('iphone-x');\ncy.get('#menu').should('be.visible'); changes viewport twice before any check. cy.viewport('iphone-x');\ncy.viewport(1280, 720);\ncy.get('#menu').should('be.visible'); runs only one check after both viewport changes, missing the first test.
Final Answer:
Set viewport, test, change viewport, test again -> Option D
Quick Check:
Change viewport before each test step = A [OK]
Hint: Call cy.viewport() before each test step to change screen size [OK]
Common Mistakes:
Passing multiple sizes in one cy.viewport() call
Changing viewport without running tests between
Running tests only after last viewport change
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.