关于 laravel-dusk-skill
laravel-dusk-skill 是编写和运行 Laravel Dusk 浏览器测试的参考技能,涵盖常见测试结构、页面对象和高级交互,也介绍可选的 TestMu AI 云端执行。
主要功能
- 01Laravel Dusk 安装与测试命令
- 02浏览器导航和表单交互
- 03页面对象模式
- 04数据库、截图与调试指南
- 05LambdaTest 云端与 CI/CD 示例
适用场景
- 01编写登录和多步骤表单的浏览器测试
- 02使用可复用页面对象组织测试
- 03配置远程浏览器执行
- 04排查常见测试故障
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lambdatest/ agent-skills --skill laravel-dusk-skill安装后在 Claude Code 中输入/laravel-dusk-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/advanced-patterns.mdcloud-integration.mdplaybook.md详细介绍
Laravel Dusk 技能
如需了解 TestMu AI 云端执行,请参阅 reference/cloud-integration.md 和 shared/testmu-cloud-reference.md。
核心模式
基本测试
<?php
namespace Tests\Browser;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
class LoginTest extends DuskTestCase
{
public function testLoginWithValidCredentials(): void
{
$this->browse(function (Browser $browser) {
$browser->visit('/login')
->type('email', '[email protected]')
->type('password', 'password123')
->press('Login')
->assertPathIs('/dashboard')
->assertSee('Welcome');
});
}
public function testLoginWithInvalidCredentials(): void
{
$this->browse(function (Browser $browser) {
$browser->visit('/login')
->type('email', '[email protected]')
->type('password', 'wrong')
->press('Login')
->assertPathIs('/login')
->assertSee('Invalid credentials');
});
}
}
浏览器方法
// Navigation
$browser->visit('/path');
$browser->back();
$browser->forward();
$browser->refresh();
// Forms
$browser->type('name', 'value');
$browser->clear('name');
$browser->select('select', 'option');
$browser->check('checkbox');
$browser->uncheck('checkbox');
$browser->radio('radio', 'value');
$browser->attach('file', '/path/to/file');
$browser->press('Button Text');
$browser->click('.selector');
// Assertions
$browser->assertSee('text');
$browser->assertDontSee('text');
$browser->assertPathIs('/expected');
$browser->assertUrlIs('http://full-url');
$browser->assertInputValue('name', 'value');
$browser->assertChecked('checkbox');
$browser->assertVisible('.element');
$browser->assertMissing('.element');
$browser->assertTitle('Page Title');
$browser->assertPresent('.selector');
// Waiting
$browser->waitFor('.element');
$browser->waitFor('.element', 10); // 10 seconds
$browser->waitUntilMissing('.loading');
$browser->waitForText('Loaded');
$browser->waitForLink('Click Me');
$browser->pause(1000); // milliseconds
页面对象
<?php
namespace Tests\Browser\Pages;
use Laravel\Dusk\Page;
class LoginPage extends Page
{
public function url(): string { return '/login'; }
public function assert(Browser $browser): void
{
$browser->assertPathIs($this->url());
}
public function login(Browser $browser, string $email, string $password): void
{
$browser->type('email', $email)
->type('password', $password)
->press('Login');
}
}
// Usage
$browser->visit(new LoginPage)
->login($browser, '[email protected]', 'password123');
云端:重写 DuskTestCase::driver(),使其返回带有 LT caps 的 RemoteWebDriver
设置:composer require --dev laravel/dusk && php artisan dusk:install
在 TestMu AI 上执行云端测试
设置 .env 变量:LT_USERNAME、LT_ACCESS_KEY
// tests/DuskTestCase.php
protected function driver()
{
$options = (new ChromeOptions)->addArguments(['--disable-gpu', '--no-sandbox']);
$ltOptions = [
'user' => env('LT_USERNAME'),
'accessKey' => env('LT_ACCESS_KEY'),
'build' => 'Laravel Dusk Build',
'name' => $this->getName(),
'platformName' => 'Windows 11',
'video' => true,
'console' => true,
];
$options->setExperimentalOption('LT:Options', $ltOptions);
return RemoteWebDriver::create(
'https://hub.lambdatest.com/wd/hub', $options
);
}
运行:php artisan dusk 或 php artisan dusk tests/Browser/LoginTest.php
深入模式
生产级模式请参阅 reference/playbook.md:
| 章节 | 内容 |
|---|---|
| §1 项目设置 | 安装、DuskTestCase、.env.dusk 配置 |
| §2 浏览器测试 | 登录流程、表单、多步骤向导、多个浏览器 |
| §3 页面对象 | 包含元素、自定义方法和断言的页面类 |
| §4 组件 | DatePicker、Modal、可复用组件模式 |
| §5 高级交互 | JavaScript、滚动、拖放、等待策略 |
| §6 数据库与数据 | DatabaseMigrations、工厂、屏幕截图、控制台日志 |
| §7 LambdaTest 集成 | 使用 LT:Options capabilities 的远程 WebDriver |
| §8 CI/CD 集成 | 使用 MySQL、ChromeDriver 和制品上传的 GitHub Actions |
| §9 调试表 | 12 个常见问题及其原因和修复方法 |
| §10 最佳实践 | Laravel Dusk 测试检查清单,共 14 项 |
评论
支持 Markdown