Как применить условие к тесту E2E в CodeceptJS и NightmareJS - PullRequest
0 голосов
/ 12 марта 2019

Что мне нужно:

Проведите тест E2E в CodeceptJS с Nightmare в качестве главного помощника, чтобы проверить существование элемента, и, в зависимости от результата, продолжить выполнение ряда действий или других.

Пример кода:

class EventsHelper extends Helper {

  isExistsElement(selector) {
    let browser = this.helpers['Nightmare'].browser;
    return browser.evaluate((selector) => {
      return new Promise(resolve => {
        let element = document.querySelector(selector);
        resolve(element || false);
      });
    }, selector);
  }
}
module.exports = EventsHelper;

Scenario('Test 1', async (I) => {
  const isButtonRendered = await I.isExistsElement('#button');

  if (isButtonRendered) {
    I.see('Message that is displayed only if the button exists.');
    I.click('#button');
  } else {
    I.see('Alternative message that appears if this button does not exist.');
  }
});

Текущий результат этого примера кода: - Если кнопка существует.

Evaluation timed out after 30000msec.  Are you calling done() or resolving your promises?
  • В противном случае кнопка не существует: PASS.

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

1 Ответ

0 голосов
/ 22 марта 2019

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

Вот пример настраиваемого помощника:

'use strict';
import assert from 'assert';

let Helper = codecept_helper;

class MyHelper extends Helper {
  async clickIfVisible(selector, ...options) {
    const helper = this.helpers['Puppeteer'];
    try {
      const numVisible = await helper.grabNumberOfVisibleElements(selector);

      if (numVisible) {
        return helper.click(selector, ...options);
      }
    } catch (err) {
      console.log('Skipping operation as element is not visible');
    }
  }
}

module.exports = MyHelper;

Дополнительная информация: https://github.com/Codeception/CodeceptJS/issues/648

...