在Laravel Dusk

时间:2018-07-28 18:08:04

标签: laravel laravel-5.6 laravel-dusk

我正在使用Laravel 5.6和Laravel Dusk 3.0.9。

黄昏非常方便,但是当在具有某些Javascript功能的页面上测试失败时,很难找出问题所在。 Dusk会生成一个屏幕截图,这很有帮助,但是我真正需要的是查看Javascript控制台的输出。

显然这是可能的-在安装过程中,Dusk创建了一个tests/Browser/console目录,并创建了this PR suggests the JS console output is logged或至少是可登录目录。

尽管没有文档(我可以找到)有关如何实际执行操作。 Browsing the diffs in that PR,我看到了一个新方法logConsole()(后来@Jonas在评论中将其重命名为storeConsoleLog()),但是我似乎无法使其执行任何操作,例如:

$browser->visit('/somewhere')
        ->select('#foo', '2')
        ->value('#date', '2018-07-29')
        ->storeConsoleLog('bar')
        ->assertEnabled('button[type=submit]');

该测试失败,并生成了漂亮的屏幕截图,但是没有任何日志文件的迹象。我尝试过移动->storeConsoleLog('bar')在链中的位置,例如第一个或最后一个,并在链的之前或之后作为单独的一行:

$browser->visit('/somewhere')
->...full chain here;
$browser->storeConsoleLog('bar');

但是它们都不起作用。我的JS有一系列console.log(),我在浏览器中测试自己时会使用它们,它们会告诉我到底出了什么问题。我期望此功能记录这些消息。

我是否误解了PR,这有可能吗?如果可以,怎么办?

更新

通过调试storeConsoleLog()中的vendor/laravel/dusk/src/Browser.php方法,我可以看到该方法已正确调用,但是没有控制台内容可记录。如果我手动重复测试在Chrome中执行的步骤,则会有行写入Chrome devtools控制台,实际上3是在页面加载时写入的。为什么黄昏看不到那些?

更新2

我发现,如果您从'--headless'的{​​{1}}方法中删除driver(),则在测试过程中将显示浏览器。然后,您可以显示该浏览器的开发工具,并在测试运行时实时观看控制台输出。太快了,无法真正发挥作用,并且如果出现错误,浏览器将关闭,并且无论如何您将丢失控制台上的所有内容(除非有办法让浏览器在发生故障时保持打开状态?),但请在此处添加此内容,以防万一。对某人有用!

1 个答案:

答案 0 :(得分:1)

显然没有办法从浏览器中获取非错误的控制台输出。

other log types,但Chrome仅支持browser(由Dusk使用)和driver

您可能必须使用警报。但是屏幕截图不包含警报,因此您必须获取文本:

$browser->driver->switchTo()->alert()->getText()

您还可以使用类似document.write()之类的内容并检查屏幕截图上的输出。