Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Browser Laravel Package

zenstruck/browser

A Laravel-friendly browser testing toolkit built on Symfony BrowserKit and Panther. Easily crawl pages, click links, submit forms, assert on HTML, and drive real headless browsers—great for end-to-end tests and fluent, expressive UI assertions.

View on GitHub
Deep Wiki
Context7

Getting Started

Install via Composer: composer require --dev zenstruck/browser. Begin by creating a functional test that uses the browser: extend WebTestCase and inject Browser via static::createBrowser(). The first use case is typically clicking links, filling forms, and asserting page content with an intuitive, chainable API — e.g., $browser->visit('/login')->fillField('username', 'admin')->submit()->assertPathIs('/dashboard').

Implementation Patterns

  • Page Object Pattern: Wrap browser interactions in dedicated page classes (e.g., LoginPage) to promote reuse and readability.
  • Stateful Testing: Use Browser::fromUri() or static::createClient() to simulate authenticated sessions with preloaded fixtures.
  • Async Assertions: Leverage waitFor() with assertXpath() or assertDomContains() for SPA or AJAX-heavy UIs.
  • Integration with Pest: Works out-of-the-box with Pest via browser() helper; chain expectations like ->assertTitleContains('Welcome').

Gotchas and Tips

  • Timeouts: Default timeouts may be too short for CI; configure via Browser::configure() with custom timeout() or slowMotion() for debugging.
  • DOM Replacement: When pages dynamically replace entire <body> (e.g., Turbolinks), use assertDomContains() after waitFor() instead of assertDomNotFound().
  • Field Identification: Prefer fillField() with form field names over IDs or CSS selectors; use fillFieldWith() for inputs without labels.
  • Custom Drivers: Override default Mink driver configuration via Browser::mink() callback to inject custom behaviors (e.g., viewport resizing or request headers).
  • Debugging: Use dumpPage() or savePageSnapshot() to inspect rendered HTML in failure cases; run tests with --keep-browser to inspect sessions interactively.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport
twbs/bootstrap4