Как поймать тайм-ауты cucumberJS и не сбои шагов - PullRequest
0 голосов
/ 20 февраля 2019

Итак, у меня есть решение cucumberJS / PuppeteerJS для автоматизации тестирования.У меня проблема с проверкой кнопки.Существует кнопка «Загрузить еще», которая появляется, когда в списке есть еще элементы для загрузки, и не появляется, когда все элементы отображаются.

Пример: в списке из 10 элементов сначала будет отображаться только 4, аКнопка Загрузить еще.Вы нажимаете кнопку «Загрузить еще», и теперь отображается 8.Вы выбрали его снова, и все 10 элементов уже есть, а кнопка «Загрузить еще» больше не присутствует.

У меня есть несколько файлов функций, которые вызывают step_definition, которая, в свою очередь, вызывает некоторые функции в world.js

У меня есть какой-то код, чтобы проверить, есть ли кнопка:

const isElementVisible = async (cssSelector) => {
    return Promise.resolve(
        page.waitForSelector(cssSelector, { visible: true, timeout: settings._5000 })
    ).then(() => {
        return true;
    }).catch(() => {
        return false;
    });
};

Это вызывается:

// Select Load More Agencies button if button is there
async clickButtonLoadMore() {
    // check to see if element is visible
    let selectorForLoadMoreButton = '[data-test-button="Load More"]';
    let loadMoreVisible = await isElementVisible(selectorForLoadMoreButton);
    // If button visible, select it
    while (loadMoreVisible) {
        await page
            .click('[data-test-button="Load More"]');
        loadMoreVisible = await isElementVisible(selectorForLoadMoreButton);
    }
}

Моя проблема в том, что когда я выбираю кнопку Загрузить ещев третий раз, как в примере выше, время ожидания (в page.waitForSelector) не достигает уровня файла объектов и не обрабатывается обещанием.

   ✔ When the View List button is selected on the navigation pane # features/step_definitions/console_steps.js:7
   ✖ And click the Load More # features/step_definitions/console_steps.js:31
   Error: No node found for selector: [data-test-button="Load More"]
           at assert (/Users/huckcarignan/Desktop/sprint04/epay-test-automation/node_modules/puppeteer/lib/helper.js:229:11)
           at DOMWorld.click 
(/Users/huckcarignan/Desktop/sprint04/epay-test-automation/node_modules/puppeteer/lib/DOMWorld.js:359:5)
           at <anonymous>
         -- ASYNC --
           at Frame.<anonymous> (/Users/huckcarignan/Desktop/sprint04/epay-test-automation/node_modules/puppeteer/lib/helper.js:108:27)
           at Page.click (/Users/huckcarignan/Desktop/sprint04/epay-test-automation/node_modules/puppeteer/lib/Page.js:1021:29)
           at ePayApp.clickButtonLoadMore (/Users/huckcarignan/Desktop/sprint04/epay-test-automation/features/support/world.js:777:6)
           at <anonymous>
   - And click the Manage Agency Data row that has the Mega Agency label # features/step_definitions/console_steps.js:11
   - And click Agency Accounts # features/step_definitions/console_steps.js:15

Селекторнашел первые два раза, но третий, кнопка не существует, и селектор тайм-аут.Вместо того, чтобы быть пойманным, он идет к огурцу.

Как я могу исправить это так, чтобы тайм-аут был пойман и обработан обещанием?

...