Laravel框架Dusk怎么用_Laravel框架浏览器测试操作指南【解答】

大磊酱_4411

大磊酱_4411

2026-05-02

731人浏览

原创

Dusk 测试需强制启用 Chrome 无头模式并配置兼容的 ChromeDriver:在 tests/DuskTestCase.php 的 driver() 方法中使用 ChromeOptions 添加 --headless 等参数,并通过 --env=dusk.local 隔离数据库,避免干扰开发环境。

laravel框架dusk怎么用_laravel框架浏览器测试操作指南【解答】

Dusk 不能直接在 CI 环境或无图形界面的服务器上运行 Chrome,必须显式配置 headless 模式或使用 Docker 容器化浏览器;否则 php artisan dusk 会卡住或报 Facebook\WebDriver\Exception\UnknownErrorException。

怎么启动 Dusk 测试环境并避免 Chrome 启动失败

默认 dusk 命令会尝试打开 GUI 版 Chrome,这在大多数部署环境(如 GitHub Actions、GitLab CI、Ubuntu server)下必然失败。必须强制启用无头模式,并确认 ChromeDriver 版本与系统 Chrome 兼容。

  • 运行前确保已安装匹配的 chromedriver(推荐用 laravel/dusk 自带的二进制:执行 php artisan dusk:install)
  • 在 tests/DuskTestCase.php 的 driver() 方法中,把 ChromeOptions 显式设为 headless:
        $options = (new ChromeOptions)->addArguments([
            '--headless',
            '--no-sandbox',
            '--disable-dev-shm-usage',
            '--disable-gpu',
            '--window-size=1920,1080'
        ])
  • 若仍报 session not created,检查 Chrome 是否真的存在:在 CI 中运行 google-chrome --version 或 chromium-browser --version,并调整 ChromeOptions->setBinary() 指向正确路径(如 /usr/bin/chromium-browser)

如何写一个能真正点击并等待页面响应的测试用例

Dusk 的 click() 不会自动等待后续加载完成,容易因 DOM 未更新导致断言失败。必须配合显式等待(waitUntil() 或 assertSee() 等阻塞方法)。

  • 不要这样写:
    $browser->click('@login-button')->assertSee('Dashboard')
    (可能在跳转前就执行断言)
  • 应该这样写:
    $browser->click('@login-button')
        ->waitForLocation('/dashboard')
        ->assertSee('Welcome back');
  • 对异步内容(如 Vue 渲染的列表),优先用 waitForText() 或 waitFor('.item-list li', 5),而不是依赖 assertSee()
  • 若元素有动画或延迟渲染,加 pause(500) 是临时解法,但应优先用 waitFor 系列代替

为什么 see() / assertSee() 总是失败,即使页面明明有文字

根本原因:Dusk 默认在页面 DOMContentLoaded 触发后即开始查找,但现代前端框架(如 Inertia、Livewire、Vue)的内容往往由 JS 异步注入,DOM 就绪 ≠ 内容就绪。

CDP浏览器大师
CDP浏览器大师

CDP浏览器大师:通过Chrome DevTools Protocol驱动已登录浏览器实现自动化任务,解决反爬封号、选择器失效、SPA路由难导航、固定sleep不准四大痛点。核心能力包括UA伪装、WebGL/Canvas指纹混淆、智能等待、动态选择器以及可视化调试。

下载
  • assertSee('Hello') 查找的是 纯文本内容,不区分是否在 或 v-if 块里;如果该文本被 JS 动态插入,且没等 JS 执行完,就会找不到
  • 更可靠的方式是结合选择器和可见性:
    $browser->assertSeeIn('@welcome-message', 'Hello') // 要求元素存在且含该文本
  • 或者用 waitForText('Hello') —— 它内部轮询 document.body.innerText,比 assertSee() 更健壮
  • 注意:所有 assert* 方法都要求元素「已渲染且可见」,隐藏元素(display: none 或 visibility: hidden)不会被匹配

如何让 Dusk 测试不干扰本地开发数据库

Dusk 使用自己的 .env.dusk. 环境文件,但很多人忽略它仍会读取 DB_DATABASE,导致测试清空开发库。

  • 务必在 .env.dusk.local 中覆盖数据库配置:
    DB_CONNECTION=sqlite
    DB_DATABASE=:memory:
    (内存 SQLite 最安全)
  • 如果非要用 MySQL,至少隔离库名:
    DB_DATABASE=testing_app
    ,并确保该库存在且可写
  • 运行时必须指定环境:php artisan dusk --env=dusk.local,否则会 fallback 到默认 .env
  • 别在 DuskTestCase.php 中手动调用 Artisan::call('migrate:fresh') —— Dusk 已在每个测试前自动重置迁移(前提是 usesDatabase() trait 已启用)

最常被跳过的一步是验证 chromedriver 和 Chrome 主版本号是否一致(比如 Chrome 124 需要 chromedriver 124.x),差一个小版本都可能静默失败;另外,waitForLocation() 对 SPA 路由(如 Vue Router history 模式)无效,得改用 waitForUrl() 或监听 window.location.pathname 变化。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

laravel 浏览器

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

897

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

875

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2528

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

4921

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

7210

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

4736

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

8869

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1516

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

215

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 225人学习

Composer手册
Composer手册

共0课时 | 0人学习