кипарис - делать действие, пока элемент не появится на экране - PullRequest
1 голос
/ 27 февраля 2020

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

Я тестирую Ka iOS приложение , которое вместо прокрутки использует перелистывание страниц, аналогичное разжигаемому устройству, чтобы пользователю было легче читать.

В настоящее время, так как Ka iOS основан на Firefox ОС, единственный способ использовать приложение на компьютере аналогично устройству - использовать firefox. Проблема в том, что перелистывание страниц при запуске тестов на Cypress (даже с firefox) не работает должным образом, поэтому, когда мы переворачиваем страницу, она не go переходит на ту же страницу, что и на устройстве или firefox.

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

Я попробовал кучу разных вещей без успеха .

То, что мне нужно, довольно просто:

  1. go на страницу
  2. проверить наличие элемента, если нет, перевернуть страницу. продолжайте листать страницы, пока он не найдет элемент
  3. , как только он найдет элемент, взаимодействуйте с ним

Ответы [ 2 ]

3 голосов
/ 28 февраля 2020

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

Ну, шаг за шагом, вам нужно

  • go на страницу

Простой

cy.visit('<your url>')
  • проверка на наличие элемента

Самый простой способ - использовать открытый экземпляр Cypress.$ jQuery и самостоятельно проверить, существует ли элемент.

cy.visit('<your url>')
cy.waitUntil(() => !!Cypress.$('#elementToBeChecked').length)

() => !!Cypress.$('#elementToBeChecked').length - это checkFunction, ожидаемое waitUntil, оно возвращает логическое значение и waitUntil повторяет его, пока не вернется true.

  • check для наличия элемента, если он отсутствует, переверните страницу
cy.visit('<your url>')
cy.waitUntil(() => {
  if (!Cypress.$('#elementToBeChecked').length) {
    return cy.flipPage().then(() => false)
  } else {
    return true
  }
})

, cy.flipPage().then(() => false полезно, чтобы убедиться, что che checkFunctin разрешается в false. waitUntil будет вызывать checkFunction, пока не вернется true.

  • продолжать листать страницы, пока не найдет элемент

Готово

  • как только он найдет элемент, взаимодействуйте с ним
cy.visit('<your url>')
cy.waitUntil(() => {
  if (!Cypress.$('#elementToBeChecked').length) {
    return cy.flipPage().then(() => false)
  } else {
    return true
  }
})
cy.get('#elementToBeChecked').click()

Если вам нужно еще более подробное объяснение того, почему вам нужно waitUntil для такой задачи, как ваша, взгляните здесь .

Надеюсь, это поможет 10

1 голос
/ 27 февраля 2020

Попробуйте использовать https://github.com/NoriSte/cypress-wait-until для условного выполнения действий на странице

...