Как я могу запустить рекурсивную функцию в кипарис или найти длину с асинхронным ожиданием - PullRequest
0 голосов
/ 24 сентября 2019

Я запускаю тесты с использованием кипариса.У меня есть массив адресов Litecoin.Я пытаюсь установить первым на входе.Затем отправьте форму.
Если адрес повторяется, отображается уведомление, и кнопка отправки не будет видна.И я хочу установить второй элемент.И так до конца массива.Я пробовал рекурсивную функцию:

function runTillElementFound (totalCount, currentCount, litecoin_addresses)
    {
        var self = this;
        if (currentCount < totalCount) {
            return cy.get('body').then(($body) =>
            {
                if ($body.find(dash_page.save_wallet_circle_btn)) {
                    //if there is save button then set address and submit form
                    cy.log('taken address: ' + litecoin_addresses[ currentCount ]);
                    dashact.fill_wallet(litecoin_addresses[ currentCount ]);
                    cy.log('address is filled');
                    dashact.submit_wallet(true, 0);
                    self.runTillElementFound(totalCount, currentCount++);
                }
            });
        } else {
            return false; //if element not present after Max count reached.
        }

Я пытаюсь вызвать ее:

it('Set wallet', () =>
    {
        cy.log('this is array length: ' + litecoin_addresses);
        runTillElementFound(20, 0, litecoin_addresses);
        /* comact.submit_form(true, 1);
        let ltc_address = promisify(dashact.get_wallet_value());
        cy.log('this is address: ' + ltc_address);
        //close popup and check that it is closed:
        popact.submit_payment(); */
    });

Однако я получаю неопределенное: undefined error

Iтакже пробовал нерекурсивную функцию:

for (var i = 0; i < litecoin_addresses.length; i++) {
            cy.log('taken address: ' + litecoin_addresses[ i ])
            if (litecoin_addresses[ i ] == wallet_before_edit || litecoin_addresses[ i ].length == 0 || litecoin_addresses[ i ].startsWith('ltc')) {
                continue;
            }
            else {
                cy.log('this is curent i: ' + i);
                dashact.fill_wallet(litecoin_addresses[ i ]);
                dashact.submit_wallet(true, null);
                cy.get('body').then(($body) =>
                {
                    // synchronously query from body
                    // to find which element was created
                    if ($body.find(com_page.not_message).length) {
                        // error was found, do something else here
                        cy.log('error was found');
                    }
                    else {
                        cy.log('error not found');
                        // input was not found, do something else here
                        i = litecoin_addresses.length;
                        cy.log('current i value: ' + i);
                    }
                })
            }

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

...