Разрешение первой кнопки
cy.contains('Not Met').and('has.class', 'btn-danger')
Это не удается, поскольку cy.contains('Not Met')
возвращает один объект, а первая кнопка с текстом «Не выполнено» не имеет требуемой class.
Недавно я видел ответ , в котором упоминалось «объединение селекторов», что является полезным принципом, когда селекторы не указаны c достаточно, то есть вы можете переместить «btn-danger» 'проверить цепочку:
cy.get('button[class*=btn-danger]').contains('Not Met')
OR
cy.contains('button[class*="btn-danger"]', 'Not Met')
Первый селектор теперь ищет кнопку с атрибутом класса ([class ...]), содержащую (* =) "btn-danger", и имеет текст "Not" Met '.
Правильное нахождение кнопки-компаньона
Вышеприведенное успешно выполняется с примером html, который вы дали, но для правильной проверки кнопки-компаньона нам нужно сделать это немного сложнее, продублировав строку, на которую вы нацеливаетесь, и изменив кнопку компаньона в первой на «btn-warning», т.е.
<td class="evaluation-button-cell">
<button class="conduct btn btn-tertiary">Met</button>
<button class="conduct btn btn-tertiary">Not Met</button>
</td>
<td class="evaluation-button-cell">
<button class="conduct btn btn-tertiary">Met</button>
<button class="conduct btn btn-tertiary">Not Met</button>
<button class="conduct btn btn-warning">N/A</button>
</td>
<td class="evaluation-button-cell">
<button class="conduct btn btn-tertiary">Met</button>
<button class="conduct btn btn-danger">Not Met</button>
<button class="conduct btn btn-warning">N/A</button> <-- not what we seek
</td>
<td class="evaluation-button-cell">
<button class="conduct btn btn-tertiary">Met</button>
<button class="conduct btn btn-danger">Not Met</button>
<button class="conduct btn btn-tertiary">N/A</button> <-- this is the one
</td>
<td class="evaluation-button-cell">
<button class="conduct btn btn-success">Met</button>
<button class="conduct btn btn-tertiary">Not Met</button>
<button class="conduct btn btn-tertiary">N/A</button>
</td>
<td class="evaluation-button-cell">
<button class="conduct btn btn-tertiary">Met</button>
<button class="conduct btn btn-danger">Not Met</button>
</td>
Проблема с
cy.get('button[class*=btn-danger]').contains('Not Met')
OR
cy.contains('button[class*="btn-danger"]', 'Not Met')
заключается в том, что они возвращают только один предмет - хотя есть три кнопки, которые соответствуют, возвращается только первая.
Эту проблему можно решить также путем слияния части contains()
с первым селектором,
cy.get("button[class*='btn-danger']:contains('Not Met')")
, что дает три кнопки, соответствующие критерий.
Чтобы получить кнопку с правильной кнопкой-компаньоном, используйте next()
с селектором того же шаблона,
cy.get("button[class*='btn-danger']:contains('Not Met')")
.next("button[class*='btn-tertiary']:contains('N/A')")
.click();