#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')