Как выбрать n-й элемент внутри выделенного элемента в кипарисе - PullRequest
0 голосов
/ 08 июня 2018

говорят, что у меня есть HTML:

<select name="subject" data-testid="contact-us-subject-field">
  <option value="What is this regarding?">What is this regarding?</option>
  <option value="Partnerships">Partnerships</option>
  <option value="Careers">Careers</option>
  <option value="Press">Press</option>
  <option value="Other">Other</option>
</select>

Выбор варианта с известным значением, например, «Карьера», так же прост:

cy.get('[data-testid="contact-us-subject-field"]').select('Careers');

Как выбратьn-й параметр в этом поле, независимо от значения ?

Ответы [ 4 ]

0 голосов
/ 08 апреля 2019

На основе решения от Мигель Руэда , но с использованием опции prevSubject:

Cypress.Commands.add(
  'selectNth',
  { prevSubject: 'element' },
  (subject, pos) => {
    cy.wrap(subject)
      .children('option')
      .eq(pos)
      .then(e => {
        cy.wrap(subject).select(e.val())
      })
  }
)

Использование:

cy.get('[name=assignedTo]').selectNth(2)

Объяснение:

  • Использование children('option') и .eq(pos) перемещения потомков выбора к определенному элементу.
  • Вызов select метода со значением выбранного элемента.
0 голосов
/ 07 августа 2018

В конкретном контексте выбора nth option это может быть уместно:

cy.get('select[name=subject] > option')
  .eq(3)
  .then(element => cy.get('select[name=subject]').select(element.val()))
0 голосов
/ 03 октября 2018

У меня была та же проблема, и я решил ее, создав собственную команду кипариса.Не так красиво, как хотелось бы, но оно сделало свою работу.

Cypress.Commands.add("selectNth", (select, pos) => {
  cy.get(`${select} option +option`)
    .eq(pos)
    .then( e => {
       cy.get(select)
         .select(e.val())
    })
})

, тогда я использовал в тесте как таковой

    cy.viewport(375, 667)
      .selectNth("customSelector", 3)

Часть option +option была единственным способом, которым яМожно найти полный список параметров внутри выбора, и в настоящее время это бит кода, который я пытаюсь обойти, хотя он отлично работает.

0 голосов
/ 08 июня 2018

Используя eq

cy.get('tbody>tr').eq(0)    // Yield first 'tr' in 'tbody'
cy.get('ul>li').eq(4)       // Yield fifth 'li' in 'ul'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...