Невозможно найти и выбрать элемент в массиве - PullRequest
0 голосов
/ 13 сентября 2018

Я учусь использовать cypress.io и одновременно хочу изучать JavaScript.

В настоящее время я пытаюсь автоматизировать внутреннее приложение для работы в качестве подтверждения концепции того, почему мы должнырассмотрите возможность переключения на cypress.io вместо Webdriver.

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

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

Код следующий:

//Selecting profiles
cy.get('.card')
    .each(($el) => {
        if ($el.contains() === profile) {
            cy.wrap($el).click();
        }
    })

Переменная профиля передается в функцию, в которой находится этот фрагмент.

Я просматриваю документацию по кипарису для функций .each и .contains.

Но когда я запускаю этот код, я получаю исключение, говорящее

TypeError: $ el.contains не является функцией

Но, глядя на документ Cypress, яможет прикреплять функции к объекту $ el.

.get('ul>li').each(($el, index, $list) => {
// $el is a wrapped jQuery element
if ($el.someMethod() === 'something') {
  // wrap this element so we can
  // use cypress commands on it
  cy.wrap($el).click()
} else {
  // do something else
}})

1 Ответ

0 голосов
/ 13 сентября 2018

.contains() - это функция Cypress. Как сказано на странице документа, $el - это элемент в JQuery-обертке, а не в Cypress-элементе, поэтому .contains() не будет работать с ним.

Тем не менее, .contains() используется для фильтрации выбора и возвращает цепочку , а не логическое значение или строку, поэтому этот конкретный способ использования .contains() не будет работать в первую очередь , Это побочный эффект от того, как Cypress ставит свои команды в очередь - см. на этой странице документа для получения дополнительной информации.


Для того, что вы пытаетесь сделать, я предлагаю воспользоваться встроенным элементом jQuery:

//Selecting profiles
cy.get('.card')
    .each(($el) => {
        if ($el.text() === profile) {
            cy.wrap($el).click();
        }
    })

Примечание: я предполагаю, что profile - это строка. Если это не так, возможно, потребуется изменить этот код.

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