Регистрация и утверждение количества ранее неизвестных элементов DOM - PullRequest
0 голосов
/ 12 ноября 2018

Я впервые использую Cypress, и я почти завершил свой первый тест.Но для этого мне нужно заявить против неизвестного номера.Позвольте мне объяснить:

Когда тест начинается, генерируется случайное количество элементов, и я не должен контролировать такое количество (это требование).Итак, я пытаюсь получить такой номер следующим образом:

var previousElems = cy.get('.list-group-item').its('length'); 

Я не совсем уверен, правильно ли я получаю данные, так как я не могу их записать («консоль кипариса»)показывает мне «[Объект]», когда я его печатаю).Но, скажем, такая строка возвращает (5) в качестве примера.

Во время теста я моделирую пользователя, создающего дополнительные элементы (2) и удаляющего элемент (1).Допустим, пользователь просто создает один дополнительный элемент.

Итак, в конце теста мне нужно проверить, равно ли число элементов с одинаковым классом (5 + 2-1) =(6) элементы.Я делаю это следующим образом:

cy.get('.list-group-item').its('length').should('eq', (previousTasks + 1));

Но я получаю следующее сообщение:

CypressError: Тайм-аут повторных попыток: ожидается, что 10 будет равно '[object Object] 1'

Итак, как я могу войти и подтвердить это?Заранее спасибо,

PD: Я также попробовал:

var previousTasks = (Cypress.$("ul").children)? Cypress.$("ul").children.length : 0;

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

Я также пытался сделать то же самое с childNodes, но он всегда возвращает 0.

1 Ответ

0 голосов
/ 15 ноября 2018

Ваша проблема связана с тем, что тестовый код Cypress запускается сразу перед началом теста.Команды ставятся в очередь для запуска позже, поэтому хранение переменных, как в вашем примере, не будет работать.Вот почему вы продолжаете получать объекты вместо чисел;объект, который вы получаете, называется chainer, и используется, чтобы позволить вам связывать команды с другими командами, например так: cy.get('#someSelector').should('...');

Cypress может обойти этохоть;если вам нужно работать с некоторыми данными напрямую, вы можете предоставить лямбда-функцию, используя .then(), которая будет запускаться в порядке с остальными вашими командами.Вот базовый пример, который должен работать в вашем сценарии:

cy.get('.list-group-item').its('length').then(previousCount => {
    // Add two elements and remove one...
    cy.get('.list-group-item').its('.length').should('eq', previousCount + 1);
});

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

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