如何验证选择器不存在于cummaryjs / puppeteer中?

时间:2019-01-09 14:45:56

标签: javascript assert puppeteer cucumberjs

我正在尝试验证Cucumberjs / puppeteer中不存在选择器。您如何使用黄瓜断言使用throws断言?

我正在致力于自动化测试,以支持测试余烬前端应用程序。我使用的是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`);
        }

当我验证一个元素存在并且文本正确时可以使用。 对于当前的断言,我使用了来自cumber-assert npm程序包的以下throw断言:

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 :(得分:1)

我为此做的是创建如下方法:

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,然后将其干净地返回。

希望这对您有所帮助!

答案 1 :(得分:0)

您应该使用ExpectedConditions库。 StalenessOf是您要使用的方法。在这里查看如何使用它https://www.protractortest.org/#/api?view=ProtractorExpectedConditions.prototype.stalenessOf