apsonex/laravel-dusk-screenrecordings

一个用于捕获 Dusk 测试屏幕录像的包

dev-master 2023-09-09 20:27 UTC

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(或更高版本)

  1. 首先安装包
composer require --dev sandervankasteel/laravel-dusk-screenrecordings
  1. 发布配置
php artisan vendor:publish
  1. 修改你的 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 设置为一个已知目录,这样我们知道从哪个目录移动我们的录制。

  1. WithScreenRecordings 添加到你的 tests/DuskTestCase.php,这样我们实际上会录制并存储这些录制。
use Sandervankasteel\LaravelDuskScreenrecordings\WithScreenRecordings;

abstract class DuskTestCase extends BaseTestCase
{
    use CreatesApplication,
        WithScreenRecordings;
        
    // Rest of your DuskTestCase
}
  1. 运行 php artisan dusk 来查看效果 🥳 🚀

工作原理

此包通过加载浏览器插件来实现,该插件会创建一个新的(固定的)浏览器标签页,然后初始化屏幕录制并执行测试。

一旦测试完成,根据配置,它将从浏览器扩展创建的标签页中“下载”屏幕录制。

TODO

  • 添加 Firefox 支持
  • 修复 Linux 下的 --auto-select-desktop-capture-source 参数
  • 理想情况:启用窗口录制(而不是整个桌面)。