Переходите на следующую страницу, пока не будет найден элемент - PullRequest
1 голос
/ 05 ноября 2019

Я использую Cypress для своих автоматических тестов. Я пытаюсь найти товар на странице и нажать на него. Если товар не отображается на странице, переходите к следующему, пока он не будет найден. Я уже пробовал много вещей: цикл while, каждый цикл, простой cy.get, но ни один из них не работает. Может кто-нибудь помочь мне решить это?

1 Ответ

0 голосов
/ 05 ноября 2019

Вам понадобится рекурсивная команда, реализация которой будет зависеть от вашего конкретного сценария. Единого решения, подходящего для всех, не существует, но в целом оно будет выглядеть примерно так:

function findElem ( targetSelector ) {
    // first, we need to query a container (could be table, or a generic item
    //  container). The important thing is, this container must exist on every
    //  page you'll traverse.
    cy.get('.someContainer').then( $container => {
        // synchronously find the target element, however you want. In this
        //  example I use an attribute selector, but you can do whatever you
        //  want.
        if ( $container.find(targetSelector).length ) {
            return true;
        } else {
            return false;
        }
    }).then( found => {
        if ( found ) {

            return cy.log(`found elem "${targetSelector}"`);
        } else {

            // synchronously check if there's a next page/table
            if ( Cypress.$('.nextPageButton').length ) {

                // when know that there is a next page, click it using cypress
                cy.get('.nextPageButton').click();

                // here, assert that next page/table is loaded, possibly by 
                //  asserting that current page/table is removed from DOM

                // then, recurse
                return findElem(targetSelector);
            } else {

                throw new Error(`Couldn't find elem "${targetSelector}" on any page`);
            }
        }
    });
}

it('test', () => {

    findElem(`[data-id="42"]`);
});

Суть решения заключается в использовании комбинации команд для запроса контейнера и синхронной проверки (с использованиемJQuery или что-то), чтобы найти фактический элемент. Подробнее на Условное тестирование .

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

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