brianclogan/dusk-recordings

即使在无头模式下也能录制 dusk 测试。

dev-main 2023-01-04 21:24 UTC

This package is auto-updated.

Last update: 2024-09-05 01:08:46 UTC


README

此包是从 Sander van KasteelLaravel Dusk Screenrecordings 分支。

这次更新使其适应了当前版本的 Laravel,并正在努力添加 Firefox 和 Edge 支持。

使用方法

警告:目前仅支持 Chrome

需要 PHP 8.0+

需要 Laravel 8(或更高版本)

  1. 首先安装此包
composer require --dev brianclogan/dusk-recordings
  1. 发布配置
php artisan recordings: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 Brianclogan\DuskRecordings\WithDuskRecordings;

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

它是如何工作的

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

测试完成后,根据配置,它将从浏览器插件创建的标签页中“下载”录制。

待办事项

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