TestCafe Runner.run(runOptions)永不返回,浏览器挂起(Firefox和Chrome)

时间:2019-09-12 18:17:24

标签: javascript node.js ecmascript-6 testcafe runner

在过去的几周中,我有一个小小的沙盒项目正在研究中,以学习实施TestCafe运行程序的来龙去脉。

除了一个问题,我已经设法解决了所有问题。在这一点上,我已经尽力想了一切。 审查了以下类似问题:

How to close testcafe runner

How to get the testCafe exit code

但是我的问题仍然存在。

  • 我玩弄了argv.json文件。
  • 我玩弄了CICDtestBranches.json文件。
  • 我玩弄了我的package.json文件。
  • 我已经测试了在多个分支上有问题的同一个分支 机器。
  • 我已经在多种浏览器(Firefox和Chrome)上进行过测试- 两者都会产生相同的问题。
  • 我尝试重新排列代码,请参阅 在下面
  • 我尝试在一个灯具中添加多个测试并添加了一个页面 导航到每个。
  • 我尝试删除正在处理的代码 不相关的选项,例如视频日志和并发(并行执行)
  • 我还与办公室中的一些同事进行了交谈,他们做了类似的项目,并询问他们为解决该问题做了什么。我尝试了他们的建议,甚至根据他们的尝试重新安排了事情,但仍然没有喜悦。
  • 我已经多次阅读有关如何实现测试运行程序的TestCafe文档,但仍然无法找到有关如何解决浏览器无法在测试结束时解决问题的任何特定信息。 / fixture / script运行。
  • 我确实发现了一些描述类似行为的错误,但是所有这些错误均已修复,其余的错误特定于Firefox或Safari。就我而言,问题出在Chrome和Firefox上。我正在运行TestCafe 1.4.2。我不想向TestCafe提交错误,除非它确实是一个已确认的错误,并且没有其他解决方法。

所以我知道其他人也遇到了同样的问题,因为我的同事说他在实施过程中也遇到了同样的问题。

由于我现在知道我没有选择权,因此我在此发布问题,希望有人能找到解决方案。感谢您抽出宝贵的时间来解决我的问题。

执行以下代码时,在返回returnData之后;执行后,永远不会执行.then语句,因此永不终止TestCafe命令和浏览器窗口。

仅供参考,以下代码是使用纯NodeJS ES6实现的CommonJS,因为这是启动TestCafe(app.js)的代码,而不是脚本代码。

    ...**Boiler Plate testcafe.createRunner() Code**...
    console.log('Starting test');
    var returnData = tcRunner.run(runOptions);
    console.log('Done running tests');
    return returnData;
})
.then(failed => {
     console.log(`Test finished with ${failed} failures`);
     exitCode = failed;
     if (argv.upload) return upload(jsonReporterName);
     else return 0;
     testcafe.close();
     process.exit(exitCode);
})
.then(() => {
     console.log('Killing TestCafe');
     testcafe.close();
     process.exit(exitCode);
});
  • 我尝试在最后两个.then语句之间交换内容,以尝试查看是否有一个在另一个语句之前将其关闭。我复制了testcafe.close()和process.exit()并将它们放在then-failed块中的if-else语句之后,尽管我知道它们可能不应该被调用,因为if-else return语句就在之前那。
  • 我尝试在if-else返回之前移动那些close和exit语句,以查看是否可以解决它。

我知道在这种情况下还有很多其他因素,例如我说过我对runOptions的研究:

const runOptions = {
// Testcafe run options, see: https://devexpress.github.io/testcafe/documentation/using-testcafe/programming-interface/runner.html#run
skipJSErrors: true,
quarantineMode: true,
selectorTimeout: 50000,
assertionTimeout: 7000,
speed: 0.01
};

我可以说是访问此问题和项目的最佳方法,所有代码都是克隆git lab repo:

> git clone "https://github.com/SethEden/CAFfeinated.git"

然后检出我一直在使用此问题的分支:master 您将需要在系统上创建一个环境变量,以告诉框架测试站点配置系统应使用哪个子路径。

CAFFEINATED_TEST_SITE_NAME值:SethEden

您还需要执行其他一些命令:

> npm install
> npm link

然后执行命令以运行所有测试(目前仅为1)

> CAFfeinated

输出应如下所示:

$ CAFfeinated
Starting test
Done running tests
 Running tests in:
 - Chrome 76.0.3809 / Windows 10.0.0

 LodPage
Got into the setup Test
Got to the end of the test1, see if it gets here and then the test is still running?
 √ LodPage

这时,浏览器仍将旋转,并且命令行仍然繁忙。您可以从上面的控制台输出中看到,已经输出了“完成运行的测试”控制台日志,并且由于已经执行了“ Got to the test1,...”控制台日志,因此应该进行测试/固定,作为test.after(...)的一部分运行。因此,接下来要执行的事情应该是在带有.then(())调用的app.js中.....但是不是。是什么赋予了?有什么想法吗?

我正在寻找专门解决此问题的方法,不仅是为了解决问题,而且将来其他人也不会陷入同样的​​陷阱。我一定缺少一些魔术酱,这对其他人可能很明显,但对我或对JavaScript和NodeJS,ES6和TestCafe相对较新的其他人却不那么明显。

2 个答案:

答案 0 :(得分:1)

发生此问题是因为您为runner.src()方法指定了错误的值。

enter image description here

答案 1 :(得分:1)

问题的原因在您的自定义报告程序中。我删除了您的记者,现在它可以正常工作了。请尝试这种方法,然后重新检查您的记者。