apsonex / laravel-dusk-screenrecordings
一个用于捕获 Dusk 测试屏幕录像的包
dev-master
2023-09-09 20:27 UTC
Requires
- php: ^8.0
- illuminate/support: ^8.0|^9.0|^10.0
- illuminate/view: ^8.0|^9.0|^10.0
This package is not auto-updated.
Last update: 2024-09-22 23:44:52 UTC
README
Laravel Dusk Screenrecording 是一个由 Sander van Kasteel 创建并维护的包,它使您能够对 Dusk 测试进行屏幕录制。
<INSERT_EXAMPLE>
使用方法
警告:目前仅支持 Chrome
需要 PHP 7.4+
需要 Laravel 7(或更高版本)
- 首先安装包
composer require --dev sandervankasteel/laravel-dusk-screenrecordings
- 发布配置
php artisan vendor:publish
- 修改你的
tests/DuskTestcase.php
以使屏幕录制功能工作。
示例实现
protected function driver() { $options = (new ChromeOptions) ->setExperimentalOption("prefs", [ "download.default_directory" => $this->downloadDir ]) ->addArguments(collect([ '--window-size=1920,1080', ])->unless($this->hasHeadlessDisabled(), function ($items) { return $items->merge([ '--disable-gpu', '--headless', ]); })->merge( $this->getChromeArgs() )->all()); return RemoteWebDriver::create( $_ENV['DUSK_DRIVER_URL'] ?? 'https://:9515', DesiredCapabilities::chrome()->setCapability( ChromeOptions::CAPABILITY, $options ) ); }
最重要的部分是
$this->getChromeArgs()
和
->setExperimentalOption("prefs", [ "download.default_directory" => $this->downloadDir ])
首先,我们需要获取一组特定的参数,这样 Chrome 才允许我们从非 HTTPS 源进行录制,并自动选择要录制的源。
最后,我们需要将 download.default_directory
设置为一个已知目录,这样我们知道从哪个目录移动我们的录制。
- 将
WithScreenRecordings
添加到你的tests/DuskTestCase.php
,这样我们实际上会录制并存储这些录制。
use Sandervankasteel\LaravelDuskScreenrecordings\WithScreenRecordings; abstract class DuskTestCase extends BaseTestCase { use CreatesApplication, WithScreenRecordings; // Rest of your DuskTestCase }
- 运行
php artisan dusk
来查看效果 🥳 🚀
工作原理
此包通过加载浏览器插件来实现,该插件会创建一个新的(固定的)浏览器标签页,然后初始化屏幕录制并执行测试。
一旦测试完成,根据配置,它将从浏览器扩展创建的标签页中“下载”屏幕录制。
TODO
- 添加 Firefox 支持
- 修复 Linux 下的
--auto-select-desktop-capture-source
参数 - 理想情况:启用窗口录制(而不是整个桌面)。