代码之家  ›  专栏  ›  技术社区  ›  Seth Eden

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

  •  0
  • Seth Eden  · 技术社区  · 5 年前

    我有一个小沙箱项目,我一直在玩了几个星期,以学习如何实现一个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#run
    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比较陌生的人来说却不是那么明显。

    0 回复  |  直到 5 年前
        1
  •  1
  •   mlosev    5 年前

    出现此问题的原因是您为 runner.src() 方法。

    enter image description here

        2
  •  1
  •   Alex Kamaev    5 年前

    这个问题的原因是在你的海关记者。我撤掉了你的记者,现在一切正常了。请尝试这种方法并重新检查您的记者。