Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何验证cucumberjs/Puppeter中不存在选择器?_Javascript_Assert_Puppeteer_Cucumberjs - Fatal编程技术网

Javascript 如何验证cucumberjs/Puppeter中不存在选择器?

Javascript 如何验证cucumberjs/Puppeter中不存在选择器?,javascript,assert,puppeteer,cucumberjs,Javascript,Assert,Puppeteer,Cucumberjs,我试图验证cucumberjs/Puppeter中不存在选择器。如何使用cumber断言使用throws断言 我正在致力于测试自动化,以支持测试ember前端应用程序。我用的是cucumberjs、木偶演员JS和CucumberAssert 我以前使用过以下方法: if (await page.waitForSelector('[data-test-text-title-refunded-widget-console="true"]')) { let textConten

我试图验证cucumberjs/Puppeter中不存在选择器。如何使用cumber断言使用throws断言

我正在致力于测试自动化,以支持测试ember前端应用程序。我用的是cucumberjs、木偶演员JS和CucumberAssert

我以前使用过以下方法:

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`);
        }
当我验证A元素是否存在以及文本是否正确时,该选项起作用。 对于我当前的断言,我使用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');

我所做的是创建一个方法,如下所示:

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
只是一些关于此方法工作原理的提示:

  • 我特意将
    超时设置为
    2000
    ,因为如果选择器不可见,您不希望代码等待默认值
    30000
    (在大多数情况下)。您可能希望根据测试脚本的需要增加/减少此
    超时设置
  • 您需要
    catch
    块,因为您实际上希望元素不可见。当超时发生时,测试脚本将触发异常,因为
    puppeter
    认为有错误。您不希望这会扼杀您的测试脚本。相反,
    catch
    块将捕获该异常,并将
    visible
    设置为
    false
    ,然后干净地返回该异常

希望这能帮到你

您应该使用ExpectedConditions库。StalenessOf是您希望使用的方法。请看这里如何使用它

Hmmm…..我刚刚找到了expect Puppeter npm模块。也许这对我来说更好。我不认为expect Puppeter npm模块能满足我的验证需求。谢谢你的解决方案。这很有帮助。