【问题标题】:How do I stop cucumberjs after scenarios complete?场景完成后如何停止 cucumberjs?
【发布时间】:2019-10-08 02:49:49
【问题描述】:

成功完成场景后,cucumberjs 无限期挂起。我怎样才能让它停止?

我在 npm/nodejs 上运行了一个 cucumberjs。

package.json:

{
  "name": "foo-test-automation",
  "version": "1.1.0",
  "description": "Integration Regression UI Test Automation for Foo application",
  "main": "fooAutoTest.js",
  "scripts": {
    "start": ". .env; node ./node_modules/.bin/cucumber-js --tags @RegressionTestSuite --format json:./results/log_`date +\\\"%Y\\\\%m\\\\%d_%H%M\\\"`.json",
},

完成后,cumber 似乎在后台运行

$ npm run new
............................

5 scenarios (5 passed)
28 steps (28 passed)
0m37.701s

我在寻找挂起的进程:

Hucks-MacBook-Pro:~ huckcarignan$ ps aux | grep node
huckcarignan     25252   0.0  0.0  4287512    856 s004  S+   12:30PM   0:00.00 grep node
huckcarignan     18365   0.0  0.2  4652124  40804 s000  S+   11:33AM   0:02.64 node ./node_modules/.bin/cucumber-js --tags @New --format json:./results/log_"20190521_1133".json
huckcarignan     18362   0.0  0.0  4280924    868 s000  S+   11:33AM   0:00.01 sh -c . .env; node ./node_modules/.bin/cucumber-js --tags @New --format json:./results/log_`date +\"%Y\\%m\\%d_%H%M\"`.json

所以我什么都没有。

我是否在我的 hooks.js 中遗漏了什么:

 const { BeforeAll, AfterAll } = require('cucumber');
 const puppeteer = require('puppeteer');
 const timestamp = require('time-stamp');
 require('dotenv').config();

 BeforeAll(async function() {
     this.browser = await puppeteer.launch({
         headless: (process.env.HEADLESS === 'true'),
         slowMo: parseInt(process.env.SLOWMO),
         defaultViewport: {
             width: parseInt(process.env.SCREEN_SIZE_WIDTH),
             height: parseInt(process.env.SCREEN_SIZE_HEIGHT)
         }
     });
     this.page = await this.browser.newPage();
 });

 AfterAll(async function() {
     // Teardown browser
     if (this.browser) {
         await this.browser.close();
     }
 });

任何帮助将不胜感激。

更新 1 我尝试将 AfterAll 替换为: // 异步承诺 毕竟(函数(){ 返回 Promise.resolve(); });

但它仍然挂起(但浏​​览器打开)

【问题讨论】:

  • no thisAfterAll 挂钩中。你如何设置浏览器?
  • 嗯....我不能不同意你的观点,它就在文档中,但现在我想知道为什么 this 的其他引用有效?
  • 如果没有this(没有调用函数的对象),this 将指向 Node.js 中的global 对象。因此,您两次都将属性 browser 放在 global 对象上。你的测试真的有效吗?您在那里通过this.browser 访问浏览器吗?因为我真的看不到那个工作......
  • 是的,我的测试确实有效。我可以使用 puppeteer 拨打电话。我必须用标签将“this”移到前面。
  • this.browser 是否实际上设置在 AfterAll 调用中?也许你从来没有在那儿打电话给this.browser.close()

标签: node.js npm puppeteer cucumberjs


【解决方案1】:

根据 (CLI reference),您应该可以在 npm 命令的末尾添加“--exit”。所以它看起来像这样:

./node_modules/.bin/cucumber-js --tags @RegressionTestSuite --format json:./results/log_`date +\\\"%Y\\\\%m\\\\%d_%H%M\\\"`.json --exit

那里有一些有用的提示,可以帮助您找出问题发生的原因以及如何解决问题。

【讨论】:

    【解决方案2】:

    通过查看此页面 - https://www.npmjs.com/package/selenium-webdriver 参考,您可以创建一个名为 driver-factory.js 的单独类,并使用您需要的功能构建 webdriver。

    从钩子中调用这个类并在 AfterAll 注释中使用它。如果驱动程序已经存在,请尝试退出它..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多