Могу ошибаться и сейчас есть способ попроще, но когда я подобное делал, то cypress не умел с файлами через инпутами работать, где-то на форумах нашел такое рабочее решение:
1) в папку fixtures помещаете картинку (у меня это car.jpg),
2) в support/commands.js добаляете это
Cypress.Commands.add('upload_file', (fileName, fileType = ' ', selector) => {
cy.get(selector).then(subject => {
cy.fixture(fileName, 'base64')
.then(Cypress.Blob.base64StringToBlob)
.then(blob => {
const el = subject[0];
const testFile = new File([blob], fileName, { type: fileType });
const dataTransfer = new DataTransfer();
dataTransfer.items.add(testFile);
el.files = dataTransfer.files;
});
});
});
3) в сам тест добавляем это
it('Should add picture', () => {
const fileName = 'car.jpg';
const fileType = 'image/jpeg';
const fileInput = 'input#camera';
cy.upload_file(fileName, fileType, fileInput);
let input;
cy.get('input#camera').should(ref => {
input = ref.get(0);
const event = document.createEvent('HTMLEvents');
event.initEvent('change', true, true);
event.eventName = 'change';
input.dispatchEvent(event);
});
});
Это решает проблему null в инпуте