Как устранить ошибку с пропущенными символами в команде Cypress type()?

#cypress

#cypress

Вопрос:

У меня возникла проблема с вводом текста в поле поиска элемента select2. В некоторых тестах случайный символ отсутствует при выполнении команды type(). Я пытался ждать () перед началом ввода и вводить с таймаутом после каждого символа, но ничего не помогло. Таким образом, реализованный мной обход заключается в том, что строка помещается в поле целиком, а не вводится символ за символом:

 this.getSelect2Input().invoke('val', str).trigger('change')
 

но в этом случае тест не понимает, что строка была введена, и продолжает ждать ввода. Итак, решением было добавить пробел в конце строки:

 this.getSelect2Input().invoke('val', str).trigger('change').type(' ');
 

Это работает, но не для всех тестов, так как в некоторых случаях пробел обрабатывается как дополнительный символ, и строка не может быть найдена. В этом случае я не могу найти ничего другого, кроме как ввести пробел и удалить его (я знаю, что это не очень хорошее решение, но что я могу сделать?):

 this.getSelect2Input().invoke('val', str).trigger('change').type(' {backspace}');
 

Но теперь это работает не так хорошо, так как в некоторых случаях пробел печатается, но не удаляется. Может кто-нибудь посоветовать, как инициировать поиск select2 после установки значения поля? type({‘enter’}) также не работает.

Комментарии:

1. Что this.getSelect2Input() возвращает?

2. Привет, @AlapanDas Это всего лишь метод объекта страницы getSelect2Input() {return cy.get([выбор элемента здесь])} вы можете думать об этом как об общем методе cy.get(). И что касается вашего ответа: как вы можете видеть, в моем вопросе я упомянул, что я попробовал рекомендованное вами решение, но оно не сработало.

3. Вы использовали delay и timeout оба следовали should . Это не упоминается в вопросе?

4. Нет, я использовал просто delay без should и подождите, прежде чем начать печатать. Почему мне нужно использовать should? Вы имеете в виду, что тест будет повторять ввод, если утверждение не выполняется?

5. .использование should приведет к тому, что cypress будет повторять попытку до тех пор, пока значение, которое вы вводите, не будет соответствовать введенному значению.

Ответ №1:

Если this.getSelect2Input() переводится во что-то cy.get('locator') , вы можете добавить задержку с помощью type(), а также добавить .should , чтобы убедиться, что предполагаемое значение, которое вы вводите, введено правильно.

 // Delay each keypress by 0.1 sec
this.getSelect2Input().type('slow.typing@email.com', {
    delay: 100
}).should('have.value', 'slow.typing@email.com')
 

Или вы также можете добавить timeout :

 // Add a timeout of 10 seconds
this.getSelect2Input().type('slow.typing@email.com', {
    timeout: 10000
}).should('have.value', 'slow.typing@email.com')