Javascript 如何使用木偶和无头铬与黄瓜js

Javascript 如何使用木偶和无头铬与黄瓜js,javascript,cucumber,cucumberjs,google-chrome-headless,puppeteer,Javascript,Cucumber,Cucumberjs,Google Chrome Headless,Puppeteer,我正在尝试用cucumber js进行BDD,并用Headless Chrome和Puppeter进行浏览器测试 使用和的文档,我得到以下错误,整个代码库在此处可用: 错误: TypeError:this.browser.newPage不是函数 TypeError:this.browser.close不是一个函数 //features/support/world.js //功能/步骤定义/hooks.js //功能/步骤定义/浏览器步骤.js Puppeter是完全异步的,所以在使用this.b

我正在尝试用cucumber js进行BDD,并用Headless Chrome和Puppeter进行浏览器测试

使用和的文档,我得到以下错误,整个代码库在此处可用:

错误:

TypeError:this.browser.newPage不是函数 TypeError:this.browser.close不是一个函数 //features/support/world.js

//功能/步骤定义/hooks.js

//功能/步骤定义/浏览器步骤.js


Puppeter是完全异步的,所以在使用this.browser之前,您必须等待它的初始化

但是setWorldConstructor是同步函数,所以您不能在那里等待。在我的示例中,我使用了Before hook

我的例子是:

黄瓜已经更新。这就是我用cucumber实现异步木偶演员设置的方法。要点

我们创建了简化木偶演员和Cucumber的工作:

运行npm安装Puppeter Cumber js 在项目的根目录中创建功能文件夹 添加一个feature-name.feature文件,其中包含给定的、When、Then语句 创建“要素/步骤定义”文件夹 为每个功能步骤添加要执行的JavaScript步骤 运行测试节点。/node_模块/puppeter cumber js/index.js-headless 带有一个工作示例的源代码检查此框架-
const puppeteer = require('puppeteer');
var {defineSupportCode} = require('cucumber');

function CustomWorld() {
  this.browser = puppeteer.launch();  
}

defineSupportCode(function({setWorldConstructor}) {
  setWorldConstructor(CustomWorld)
})
const puppeteer = require('puppeteer');
var {defineSupportCode} = require('cucumber');

defineSupportCode(function({After}) {
  After(function() {
    return this.browser.close();
  });
});
const puppeteer = require('puppeteer');
var { defineSupportCode } = require('cucumber');

defineSupportCode(function ({ Given, When, Then }) {
    Given('I am on the Cucumber.js GitHub repository', function (callback) {
        const page = this.browser.newPage();
        return page.goto('https://github.com/cucumber/cucumber-js/tree/master');
    });

    When('I click on {string}', function (string, callback) {
        // Write code here that turns the phrase above into concrete actions
        callback(null, 'pending');
    });

    Then('I should see {string}', function (string, callback) {
        // Write code here that turns the phrase above into concrete actions
        callback(null, 'pending');
    });
});
const { BeforeAll, Before, AfterAll, After } = require('cucumber');
const puppeteer = require('puppeteer');

Before(async function() {
  const browser = await puppeteer.launch({ headless: false, slowMo: 50 });
  const page = await browser.newPage();
  this.browser = browser;
  this.page = page;
})

After(async function() {
  // Teardown browser
  if (this.browser) {
    await this.browser.close();
  }
  // Cleanup DB
})