We use file upload testing to check if a website correctly accepts and processes files from users.
File upload (cy.selectFile) in Cypress
cy.get('input[type=file]').selectFile('path/to/file')
Use a CSS selector to find the file input element.
The file path is relative to the Cypress project root or absolute.
cy.get('input[type=file]').selectFile('cypress/fixtures/sample.png')
cy.get('#upload').selectFile('cypress/fixtures/document.pdf')
cy.get('input[type=file]').selectFile({ contents: Cypress.Buffer.from('Hello') })
This test visits a page with a file upload form, selects a sample image file, submits the form, and checks for a success message.
describe('File Upload Test', () => { it('uploads a sample image file', () => { cy.visit('https://example.com/upload') cy.get('input[type=file]').selectFile('cypress/fixtures/sample.png') cy.get('form').submit() cy.contains('Upload successful').should('be.visible') }) })
Always keep test files in the cypress/fixtures folder for easy access.
Use cy.selectFile to simulate real user file selection without UI interaction.
Check that the file input element is visible and enabled before selecting a file.
File upload testing ensures your site handles user files correctly.
cy.selectFile lets you pick files in tests easily.
Keep test files organized and verify upload success messages.
Practice
cy.selectFile in Cypress testing?Solution
Step 1: Understand the role of
This command is designed to simulate a user action of selecting a file in a file input element during automated tests.cy.selectFileStep 2: Compare options with this purpose
Options B, C, and D describe actions unrelated to file selection for upload, such as downloading, deleting, or opening files, whichcy.selectFiledoes not do.Final Answer:
To simulate a user selecting a file for upload in a test -> Option AQuick Check:
File selection = Simulate user upload [OK]
- Confusing file upload with file download
- Thinking selectFile deletes files
- Assuming selectFile opens files in browser
example.txt using cy.selectFile?Solution
Step 1: Understand file path usage in
The file path should point to the test fixture location, usually inside thecy.selectFilecypress/fixturesfolder.Step 2: Evaluate each option's path
cy.get('input[type=file]').selectFile('cypress/fixtures/example.txt') correctly uses the relative path to the fixture file. cy.get('input[type=file]').selectFile('example.txt') uses just the filename without path, which won't work. cy.get('input[type=file]').selectFile({ contents: 'example.txt' }) incorrectly uses an object with contents as string. cy.get('input[type=file]').selectFile('file://example.txt') uses an invalid file URI.Final Answer:
cy.get('input[type=file]').selectFile('cypress/fixtures/example.txt') -> Option DQuick Check:
Use fixture path for selectFile [OK]
- Using only filename without path
- Passing file contents as string instead of path
- Using invalid file URI scheme
cy.get('input[type=file]').selectFile('cypress/fixtures/photo.png')
.should('have.prop', 'files').then(files => {
expect(files[0].name).to.equal('photo.png')
})Solution
Step 1: Understand
After selecting a file, the input element'sselectFileand file input propertiesfilesproperty contains the selected files. Accessingfiles[0].nameshould give the file name.Step 2: Analyze the assertion
The assertion checks if the first file's name equals 'photo.png', which matches the selected file. This is valid and should pass.Final Answer:
The test will pass because the file name matches -> Option AQuick Check:
File name check = Pass [OK]
- Assuming files property is missing
- Confusing syntax chaining in Cypress
- Expecting undefined file name
cy.get('#fileInput').selectFile('example.pdf')What is the most likely reason for the failure?
Solution
Step 1: Check file path requirements for
The file path must be relative to theselectFilecypress/fixturesfolder or an absolute path. Just 'example.pdf' without path likely causes failure.Step 2: Verify other options
Selector syntax '#fileInput' is valid.selectFileworks on input elements. Manual upload is not required in tests.Final Answer:
The file path is incorrect or missing the fixture folder -> Option BQuick Check:
File path must include fixture folder [OK]
- Using filename without path
- Thinking selector syntax is wrong
- Believing selectFile can't upload files
cy.selectFile. Which code snippet correctly uploads two files named doc1.pdf and image1.png located in the fixtures folder?Solution
Step 1: Understand multiple file upload syntax
cy.selectFileaccepts an array of file paths to upload multiple files. Each path must be relative to the fixtures folder or absolute.Step 2: Evaluate each option
cy.get('input[type=file]').selectFile(['cypress/fixtures/doc1.pdf', 'cypress/fixtures/image1.png']) correctly provides an array with full fixture paths. cy.get('input[type=file]').selectFile('cypress/fixtures/doc1.pdf, cypress/fixtures/image1.png') uses a single string with comma-separated paths, which is invalid. cy.get('input[type=file]').selectFile({ files: ['doc1.pdf', 'image1.png'] }) uses an object with files array but missing paths. cy.get('input[type=file]').selectFile(['doc1.pdf', 'image1.png']) uses array without fixture folder path, which will fail.Final Answer:
cy.get('input[type=file]').selectFile(['cypress/fixtures/doc1.pdf', 'cypress/fixtures/image1.png']) -> Option CQuick Check:
Array of fixture paths = Correct multiple upload [OK]
- Passing comma-separated string instead of array
- Omitting fixture folder in paths
- Using object without correct file paths
Ready to prove it?
Pass the test and this pattern moves unknown
