我有一个小沙箱项目,我一直在玩了几个星期,以学习如何实现一个TestCafe运行程序的输入和输出。
我已经设法解决了我所有的问题,除了一个,在这一点上,我已经尝试了一切我能想到的。
回顾了以下类似问题:
How to close testcafe runner
How to get the testCafe exit code
但我的问题仍然存在。
-
我玩弄过argv.json文件。
-
我一直在玩弄我的cicdtestbranchs.json文件。
-
我一直在玩弄package.json文件。
-
我已经测试过同一个分支在多个分支上有问题
机器。
-
我用多种浏览器(Firefox&Chrome)进行了测试-
两者都会产生同样的问题。
-
我试着重新排列代码,看
在下面
-
我尝试在一个fixture中添加多个测试并添加了一个页面
导航到每一个。
-
我试图删除正在处理的代码
不相关的选项,如视频日志和并发(并行执行)
-
我还和办公室里一些做过类似项目的同事交谈,问他们是怎么解决问题的。我尝试了他们的建议,甚至根据他们的尝试重新安排了事情,但仍然没有什么乐趣。
-
我已经多次阅读了关于如何实现测试运行程序的TestCafe文档,但仍然无法找到关于如何解决浏览器在测试/fixture/脚本运行结束时未关闭的问题的任何特定信息。
-
我确实发现了一些描述类似行为的bug,但所有这些bug都已修复,其余的bug都是针对Firefox或Safari的。在我的例子中,问题在于Chrome和Firefox。我正在运行TestCafe 1.4.2。我不想向TestCafe提交一个bug,除非它确实是一个确认的bug,并且没有其他方法可以解决它。
所以我知道其他人也有同样的问题,因为我的同事说他在实现上也面临同样的问题。
既然我知道我现在没有选择,我就把问题贴在这里,希望有人能找到解决办法。谢谢你抽空检查我的问题。
在执行下面的代码时,在执行returnData;之后,.then语句永远不会执行,因此TestCafe命令和浏览器窗口永远不会终止。
供参考
以下代码是用纯NodeJS实现的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);
});
-
我试着在两个决赛之间交换。然后再尝试语句,看看是否有一个在另一个之前会导致它关闭。我复制了这两个进程,并将它们放在当时失败的块中的if语句之后,尽管我知道它们可能不应该因为之前的if返回语句而被调用。
-
在IF返回之前,我试着移动那些关闭和退出语句,看看是否可以解决。
我知道在这种情况下还有很多其他的因素,就像我说的,我只是在玩跑步游戏:
const runOptions = {
// Testcafe run options, see: https://devexpress.github.io/testcafe/documentation/using-testcafe/programming-interface/runner.html
skipJSErrors: true,
quarantineMode: true,
selectorTimeout: 50000,
assertionTimeout: 7000,
speed: 0.01
};
访问此问题和项目以及所有代码的最佳方法是克隆git lab repo:
> git clone "https://github.com/SethEden/CAFfeinated.git"
然后检查我一直在处理这个问题的分支:master
您需要在系统上创建一个环境变量,以告诉框架它应该为测试站点配置系统使用哪个子路径。
咖啡因测试站点名称值: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
此时浏览器仍在旋转,命令行仍处于忙碌状态。从上面的控制台输出中可以看到,已经输出了“Done running tests”控制台日志,并且应该在执行了“Got to the end of the test1,…”控制台日志之后执行测试/设备,该日志作为test.after(…)的一部分运行。所以下一个要执行的应该是app.js中的.then())调用…..但不是。给什么?有什么想法吗?
我在寻找解决这个问题的具体方法,不仅是为了我能解决它,而且是为了让其他人在未来不会遇到同样的陷阱。一定有一些神奇的调味品我错过了,这对其他人来说可能是非常明显的,但对我或其他对JavaScript&NodeJS&ES6&TestCafe比较陌生的人来说却不是那么明显。