Huc*_*nan 4 javascript assert cucumberjs puppeteer
我正在尝试验证 cucumberjs / puppeteer 中不存在选择器。如何使用 cucumber-assert 来使用 throws 断言?
我正在研究自动化测试来支持测试 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`);
}
Run Code Online (Sandbox Code Playgroud)
当我验证元素存在并且文本正确时,它起作用。对于我当前的断言,我使用了 cucumber-assert npm 包中的以下 throws 断言:
assert.throws(someFunctionThatThrows).then(callback);
Run Code Online (Sandbox Code Playgroud)
我不确定如何处理回调函数 - 到目前为止我有以下内容。
const assert = require('cucumber-assert');
return assert.throws(await page.waitForSelector('[data-test-text-title- import-payment-file-widget-console="true"]'))
.then(function(err) {
});
Run Code Online (Sandbox Code Playgroud)
我应该在回调中返回失败吗?
* 更新 * 我相信我找到了一种不同的方法来解决我的问题。这是将来其他人遇到同样问题的情况。
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');
Run Code Online (Sandbox Code Playgroud)
对于这样的事情,我所做的是创建一个方法,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
关于此方法如何工作的一些提示:
timeout为2000,因为如果选择器不可见,您不希望代码等待默认值30000 (在大多数情况下)。timeout也许您想根据您认为适合测试脚本的情况增加/减少此设置。catch块只是因为您实际上希望该元素不可见。当超时发生时,您的测试脚本将触发异常,因为puppeteer 认为存在错误。您不希望这杀死您的测试脚本。相反,该catch块将捕获该异常并设置visible为false,然后干净地返回。希望这对您有帮助!
| 归档时间: |
|
| 查看次数: |
3104 次 |
| 最近记录: |