Как все параметры из раскрывающегося списка (выбрать) можно протестировать в Cypress?

Как мы можем выбрать все options из обычного раскрывающегося списка и проверить их с помощью Cypress?

<select id = "cars_list">
  <option value = "volvo">Volvo</option>
  <option value = "saab">Saab</option>
  <option value = "mercedes">Mercedes</option>
  <option value = "audi">Audi</option>
</select>
//The below test can check only for one option, how can we verify the rest? 

describe("Select all values from drop down list", function() {
  it("Cypress test and verify all options", function() {
  cy.visit("Https://sometestingsite.com")  
  cy.get('#cars_list').then(function($select){
   $select.val('volvo')
   })
   cy.get('select').should('have.value', 'volvo')
   });
});

Вы рассматривали какую-то петлю? Но действительно ли полезно проверить, что если вы выбираете значение, это значение выбирается?

jonrsharpe 03.12.2018 22:08

Возможно, неправильный код скрывает вопрос - я думаю, тест должен подтвердить, что список опций имеет ожидаемые значения - вы можете подтвердить @soccerway?

user9161752 03.12.2018 22:39

Да, я хотел бы подтвердить, что option list имеет ожидаемые характеристики. Кто-то проголосовал против, не знаю почему?

soccerway 03.12.2018 22:41

Извините за резкий комментарий по поводу вашего кода. Не могли бы вы показать DOM на выбранном элементе? Я думаю, вы могли бы использовать что-то вроде cy.get('#cars_list').its('options').then(options => ...).

user9161752 03.12.2018 22:45

Хорошо, DOM - это именно то, что вы уже показали. Может, cy.get('#cars_list option').then(options => ...) подойдет?

user9161752 03.12.2018 22:50

Я добавил образ DOM

soccerway 03.12.2018 22:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
6
7 011
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы предположил, что тест может выглядеть так

cy.get('#cars_list option').then(options => {
  const actual = [...options].map(o => o.value)
  expect(actual).to.deep.eq(['volvo', 'saab', 'mercedes', 'audi'])
})

ИЛИ

cy.get('#cars_list').children('option').then(options => {
  const actual = [...options].map(o => o.value)
  expect(actual).to.deep.eq(['volvo', 'saab', 'mercedes', 'audi'])
})

ИЛИ

cy.get('#cars_list').find('option').then(options => {
  const actual = [...options].map(o => o.value)
  expect(actual).to.deep.eq(['volvo', 'saab', 'mercedes', 'audi'])
})

Выбор нескольких дочерних элементов с помощью cy.get(), затем их разворачивание с помощью [...options], сопоставление с их значением с помощью .map(o => o.value) и использование глубокого равенства для сравнения массивов.

Я не тестировал это, поэтому код может нуждаться в доработке.

Я получаю сообщение об ошибке типа cypress_runner.js:161489 TypeError: Invalid attempt to spread non-iterable instance

soccerway 03.12.2018 23:06

Возможно, console.info варианты. Мы ожидаем, что Cypress выберет несколько элементов, поэтому он должен быть повторяемым.

user9161752 03.12.2018 23:09

Я только что заметил, что вы спросили о голосовании против. Я поддержал не меня. Наверное, просто проходил какой-то тролль.

user9161752 03.12.2018 23:13

Нет проблем, Хирам, это работает с указанным выше кодом HTML DOM. Но могу ли я спросить еще одну вещь, если у тега select есть <option selected = "selected" disabled = "true">--Please Select --</option> в html DOM, при запуске его счетного массива 5, поскольку AssertionError: ожидается [Array (5)], чтобы глубоко равняться [Array (4)]

soccerway 03.12.2018 23:43

Кажется, вам нужно взглянуть на документацию по массиву javascript? Поможет в построении ваших тестов. Функцию slice() можно использовать для получения подмножества массива.

user9161752 03.12.2018 23:55

Спасибо, я использую shift () для удаления первого значения, теперь все в порядке

soccerway 04.12.2018 00:58

Я не знал, что это лучший выбор, чем slice().

user9161752 04.12.2018 07:16

Другие вопросы по теме