Выбор элемента, не равного определенной строке - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь выбрать неправильный ответ (переключатель), чтобы появилось сообщение об ошибке, но ответы случайные (кроме правильного ответа).

Как я могу сказать, получить переключатели, а затем щелкнуть по кнопке, которая не соответствует «правильному ответу» с помощью утверждений кипариса?

cy.get('[data-cy="multipleChoiceQuestionAnswer"]')
        .should('not.contain', 'correct answer')//.find('label').not('corect answer')//.not.includes('correct answer')
.click()

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

1 Ответ

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

хорошо:

  • имейте в виду, что .should('not.contain', 'correct answer') - это утверждение, а не способ фильтрации / получения некоторых элементов.По сути, это просто способ проверить (иначе говоря, «утверждать»), что что-то такое, как вы ожидаете.Такое утверждение, как ваше, полезно только для того, чтобы распечатать журнал Cypress как-то так enter image description here Прочитайте его, как если бы вы говорили

"Ehy Cypress, я выбралэлемент, можете ли вы проверить, что он не содержит правильного ответа , пожалуйста? "

  • Для чего нужны утверждения?Они бесполезны, когда все идет хорошо, но когда тест идет не так.Потому что без утверждений вы можете оказаться за несостоявшимся тестом, когда Cypress скажет вам, что «там нет элемента», но вы не можете знать, какой элемент Cypress не находит.Поместив некоторые утверждения «ключевой точки», вы поймете, почему тест не удался за короткое время.

В любом случае: если ваш HTML-код подобен этому

<div data-cy="multipleChoiceQuestionAnswer"><label>correct answer<input type="checkbox"/></label></div>
<div data-cy="multipleChoiceQuestionAnswer"><label>no<input type="checkbox"/></label></div>
<div data-cy="multipleChoiceQuestionAnswer"><label>nope<input type="checkbox"/></label></div>

, вы можете выполнитьпостановка целей:

cy.get('[data-cy="multipleChoiceQuestionAnswer"]').then(els => {
  // `els` is a jQuery instance, let's parse the various elements
  let $el;
  for(let i = 0, n = els.length; i < n; i++) {
    // it transforms every element in a jQuery instance
    $el = Cypress.$(els[i]);
    // it uses jQuery to get the label text
    if($el.find("label").text() !== "correct answer") {
      // it stops as soon as the answer isn't the correct one
      break;
    }
  }
  // returns the element to be clicked
  return $el.find("input");
})
// it assert about it (to have a useful hint in the Cypress command log)
.should("not.contain", "correct answer")
// clicks it
.click();

Я надеюсь, что код не требует пояснений (если это не так, спросите меня еще несколько уточнений) ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...