我正在尝试验证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');
答案 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