Как проверить, что селектор НЕ присутствует в cucumberjs / puppeteer? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь проверить, что селектор НЕ присутствует в cucumberjs / puppeteer. Как вы используете утверждение бросков с помощью cucumber-assert?

Я работаю над автоматизацией тестирования, чтобы поддержать тестирование внешнего интерфейса ember. Я использую cucumberjs, puppeteerjs и cucumber-assert.

Ранее я использовал следующее:

if (await page.waitForSelector('[data-test-text-title-refunded-widget-console="true"]')) {
            let textContentOfElement = await page.evaluate(() => document.body.querySelector('[data-test-text-title-refunded-widget-console="true"]').textContent);
            return assert.equal(textContentOfElement, widgetTitle, `title with text ${  widgetTitle  } is not present`);
        }

, который работает, когда я проверяю, что элемент существует и текст правильный. Для моего текущего утверждения я использовал следующие команды throws assert из пакета cucumber-assert npm:

assert.throws(someFunctionThatThrows).then(callback);

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

const assert = require('cucumber-assert');

return assert.throws(await page.waitForSelector('[data-test-text-title- import-payment-file-widget-console="true"]'))
                .then(function(err) {

            });

я должен вернуть ошибку в обратном вызове?

* ОБНОВЛЕНИЕ * Я считаю, что нашел другой подход к решению моей проблемы. Здесь, должно быть, у кого-то еще будет такая же проблема в будущем.

    if (await page.$('[data-test-text-title-import-payment-file-widget-console="true"]', { timeout: settings._30000 }) === null) {
        return Promise.resolve();
    }
    return Promise.reject('Error: The widget is present');

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы должны использовать библиотеку ExpectedConditions. StalenessOf - метод, который вы захотите использовать. Смотрите здесь, как его использовать https://www.protractortest.org/#/api?view=ProtractorExpectedConditions.prototype.stalenessOf

0 голосов
/ 09 января 2019

Что я делаю для чего-то подобного, это создаю метод следующим образом:

const isElementVisible = async (page, cssSelector) => {
  let visible = true;
  await page.waitForSelector(cssSelector, { visible: true, timeout: 2000 })
  .catch(() => {
    visible = false;
  });
  return visible;
};

// Invoke it as follows
const isVisible = await isElementVisible(page, elementCssSelector);
console.log(isVisible); // Outputs true or false

Просто несколько советов о том, как работает этот метод:

  • Я намеренно установил timeout на 2000, поскольку, если селектор не виден, вы не хотите, чтобы ваш код ждал по умолчанию 30000 (в большинстве случаев). Возможно, вы захотите увеличить / уменьшить этот параметр timeout так, как считаете нужным для вашего тестового сценария.
  • Вам нужен этот блок catch просто потому, что вы ожидаете, что элемент не будет виден. По истечении времени ожидания ваш тестовый скрипт вызовет исключение, так как puppeteer считает, что произошла ошибка. Вы не хотите, чтобы это убило ваш тестовый скрипт. Вместо этого блок catch перехватит это исключение и вместо этого установит visible в false, который затем будет возвращен без ошибок.

Надеюсь, это поможет вам!

...