Cypress: получение элемента из таблицы с использованием другого элемента в качестве ссылки - PullRequest
0 голосов
/ 03 апреля 2020

хорошо, вот ситуация. У меня есть веб-страница, на которой я добавляю элементы в таблицу, и когда я добавляю этот элемент, веб-страница автоматически присваивает ему номер.

Мой вопрос: как мне получить этот номер? Потому что он генерируется автоматически, поэтому я не знаю, каким будет его число. Таблица выглядит примерно так:

Имя Номер
Оранжевый 35
Яблоко 452
Лимон 77

И код:

<tr data-id="77">
                    <td class="col col-md-5 text-left">
                        Lemon
                    </td>
                    <td class="col col-md-5 text-left">
                        77
                    </td>
</tr>

Как видите, число 77 не имеет уникального идентификатора, и когда я создал Lemon, у меня не было возможности узнать, каким будет это число.

Моей первой идеей было получить элемент на left, который является Lemon, потому что я знаю его имя (это я, который дает его имя, используя .type (), а затем пытаюсь получить элемент справа от Lemon, который будет числом, которое я понятия не имею, какое число его будет.

Это возможно? Есть ли лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 04 апреля 2020

Вы можете попробовать это

cy.get('[data-id="77"] td:nth-child(2)').should('have.text', '77')
1 голос
/ 05 апреля 2020

Не зная, что такое точное числовое содержимое или отличительная особенность содержащего элемента, вам потребуется одна из команд относительного выбора,

Братья, сестры

cy.contains('td', 'Lemon')
  .siblings().eq(0)
  .invoke('text')
  .then(lemonText => {
    const lemonNumber = +lemonText.trim();
    // do something with lemonNumber
})

Далее

cy.contains('td', 'Lemon')
  .next('td')
  .invoke('text')
  .then(lemonText => {
    const lemonNumber = +lemonText.trim();
    // do something with lemonNumber
})
0 голосов
/ 07 апреля 2020

Некоторые опции:

cy.contains('td.col', 'lemon').siblings('td.col').invoke('text').as('lemonNumber');
// or
cy.contains('td.col', 'lemon').parent('tr').invoke('data', 'id').as('lemonNumber');
// or for each row
cy.get('tr').each((row, index) => {
  cy.wrap(row).contains('td', /\w+/).invoke('text').as('rowName' + index);
  cy.wrap(row).contains('td', /\d+/).invoke('text').as('rowNumber' + index);
});
...