Weave 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

Behat Panther Extension Laravel Package

robertfausk/behat-panther-extension

Behat Panther Extension integrates Symfony Panther with Behat, enabling real-browser acceptance tests in Chrome or Firefox. Configure Panther sessions to run JavaScript-heavy scenarios and get reliable end-to-end coverage for PHP applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Unchanged in substance: this is a Behat extension wiring Gherkin scenarios to Symfony Panther's browser abstractions (headless Chrome/Firefox over WebDriver, plus Panther's HTTP client for "fast" journeys). v2.0.0's headline feature — Symfony 8 support — reinforces that this tracks the Symfony/PHP ecosystem, not Laravel: still no service provider, no RefreshDatabase/DatabaseTransactions hook, no Laravel testing integration.
  • Fit for Laravel remains indirect by design: Panther drives a real browser against a running Laravel app (Sail/Docker, artisan serve, Octane, or a CI service), and everything Laravel-specific (auth, seeding, queue/worker setup, DB reset per scenario) lives in custom Behat contexts we author and own.
  • The Symfony 8 bump is largely a dev-toolchain constraint (it governs which Behat/Panther versions install), not something the Laravel app itself inherits. Architecturally it does not change the "black-box browser against a deployed app" model.
  • Overlap with Laravel Dusk and Pest/PHPUnit browser plugins is unchanged. Adopting this is still a commitment to Behat/Gherkin as the acceptance-test authoring layer — a stack decision, not a library decision.

Integration feasibility

  • Still Composer-installable and low-ceremony, but v2.0.0 raises the floor materially: PHP 7.2–8.1 and Symfony 3/4 are dropped. That means PHP 8.2+ is now required. Practically this aligns well with Laravel 11/12 (both PHP 8.2+), but excludes Laravel 10 apps still pinned to PHP 8.1 — a fleet-wide tooling fragmentation risk if we run mixed Laravel versions.
  • New in this release: Behat 4.x support via PHP config file. Behat 3.x usage is unchanged (YAML config). Note the release explicitly credits an unmerged upstream PR, so Behat 4 support has landed ahead of its upstream review — treat it as "works, thinly validated" rather than settled.
  • Real effort still sits outside the package: driver provisioning, deterministic DB reset, authenticated session fixtures, Artisan-driven factories, CI containerization. Nothing in v2.0.0 reduces that.
  • A 1–2 day smoke spike is still realistic, now gated on confirming the v2 tag is actually installable (see risk below).

Technical risk

  • Licensing remains the top risk and is unaddressed. Release notes contain no license statement or relicensing; NOASSERTION still reads as "all rights reserved" until legal signs off. This still blocks internal distribution and any shared-platform redistribution, and can force a rip-out during audit or diligence.
  • Continuity signal improved, but only modestly. v2.0.0 shows real activity: multiple external contributors (@loics59, @AGSadee, @shakaran), CI extended to PHP 8.5, Symfony 8 tracked early, Docker and README cleanups. That is genuine evidence against abandonment. It does not change bus factor ~1: there is still one apparent active maintainer and a small star count (34), just a slightly wider contributor ring.
  • New governance/quality signal: shipping support for Behat 4 by merging an unmerged upstream PR. Pragmatic, but it means (a) review capacity is thin, (b) our fork/patch would likely diverge from upstream, and (c) future rebases may conflict. Budget for divergence if we depend on Behat 4.
  • Version-matrix fragility now has an extra axis. The matrix is PHP 8.2–8.5 × Behat 3.x (YAML) vs 4.x (PHP config) × Panther × Symfony 8 × Selenium 4/W3C. Two config paradigms and a fresh major version mean documentation and community answers will lag the code. Chrome's ~4-week release cadence still breaks driver pinning independently.
  • Metadata anomaly persists. The prior assessment flagged a future-dated release stamp; v2.0.0's notes do not resolve repository/Packagist metadata concerns. Confirm the tag is published and installable before planning around it.
  • Ecosystem drift unchanged: Laravel teams default to Dusk/Pest; Behat+Panther skills and hiring signal remain thin.

Key questions

  1. Can legal confirm a license, or must we vendor/fork under an explicit internal license? (Still the blocking question; v2.0.0 did not answer it.)
  2. Is v2.0.0 properly tagged on Packagist, and is the release stamp/metadata anomaly resolved?
  3. What is the tested matrix for Behat 3 vs 4, Panther, PHP 8.2–8.5, Symfony 8, and Selenium 4? Specifically, is Behat 4 (PHP config) covered by CI, or is it YAML-only?
  4. Will the unmerged Behat 4 upstream PR be reconciled, and does the maintainer intend to track it? What is our divergence exposure if we adopt Behat 4 now?
  5. Which of our Laravel apps are still on PHP 8.1 / Laravel 10 and would be excluded by the new floor?
  6. Who maintains this, and is there a responsive public issue tracker? Is @shakaran the acknowledged owner?
  7. Does it expose screenshot/video/trace capture, retry, and CI-consumable artifacts on failure?
  8. Is parallel execution supported (process isolation, per-worker DB/driver), or must we build it?
  9. Does the team already own BDD/Gherkin capability, or is this a net-new skill investment?

Integration Approach

Stack fit

  • Revised baseline: PHP 8.2+ (8.2/8.3 preferred — Laravel's mainstream supported versions; 8.4/8.5 available but less proven across the toolchain), Composer 2, Behat 3.x (YAML) or 4.x (PHP config), Symfony Panther, headless Chrome/Firefox driver in CI, Laravel app reachable over HTTP.
  • Default to Behat 3 + YAML for the pilot. Behat 4 support is brand new and shipped ahead of upstream review; adopt it only if PHP-based config is a hard requirement or after it stabilizes and appears in CI.
  • Symfony 8 is a toolchain-level constraint, not an app-level one: a Laravel app does not adopt Symfony 8 by using this. Verify only that Panther + extension resolve cleanly alongside our CI PHP image.
  • Still pick one browser harness. Do not run Dusk and Behat+Panther side by side; that is duplicated cost for one signal.

Migration path

  • v2.0.0 is a breaking major (PHP and Symfony floors dropped from support). There is no graceful v1→v2 in-place upgrade path worth taking; if any v1 pilot code exists, treat the upgrade as greenfield — it is a small, isolated test-only surface.
  • Do not migrate existing Dusk/PHPUnit coverage. Pilot on 3–5 new, business-critical end-to-end journeys (login → core workflow → payment/checkout-style path) where cross-browser behavior genuinely matters.
  • Build one shared Laravel base context (bootstrapping, base URL config, auth shortcuts, DB reset strategy, artifact capture) and reuse it across suites. This is the asset we actually own regardless of the package's future.

Compatibility

  • Pin ^2.0 for the extension plus exact versions of Panther, Behat, and the browser/driver pair in composer.lock and the CI image. Floating versions will produce intermittent, hard-to-diagnose failures.
  • Declare an explicit PHP floor (8.2) and ceiling (tested 8.3, verify 8.4/8.5) in the shared CI image, and confirm which Laravel versions in the fleet meet it. Exclude or run a separate toolchain for any remaining PHP 8.1 / Laravel 10 apps.
  • Keep driver and browser versions coupled in the Docker image; never rely on the runner's preinstalled Chrome.
  • Resolve NOASSERTION licensing before the code enters any repo with distribution obligations.

Sequencing

  1. Legal/license clearance and maintainer due diligence (blocking gate) — plus confirm v2.0.0 is published and installable.
  2. Decide Behat 3 vs 4 config paradigm and PHP floor up front; do not discover it mid-pilot.
  3. 1-week spike: extension v2 + Panther + one trivial scenario against a containerized Laravel app in CI.
  4. Build the shared Laravel context and CI image (driver + app + DB, deterministic reset, artifact upload).
  5. Pilot 3–5 critical journeys; measure flake rate over ~2 weeks of PR runs.
  6. Go/no-go: if flake rate >5%, artifacts are insufficient, or Behat 4 support proves unstable and we need it, standardize on Dusk/Pest instead.
  7. Only after a clean pilot: document the pattern, add to the template repo, open to feature teams.

Operational Impact

Maintenance

  • Assume we own it: pin, vendor, and be prepared to fork. Budget ~0.2–0.3 FTE ongoing for driver/browser upkeep, flake triage, and Panther/Behat upgrade churn.
  • New line item: Behat 4 migration debt. Starting on Behat 3 means a future YAML→PHP-config move; starting on Behat 4 means depending on a freshly merged, upstream-unreconciled feature. Either way, schedule it.
  • The v2.0.0 drop of PHP ≤8.1 is a forced-upgrade pattern: expect similar breaking majors ahead, and budget a small migration each time. Track Chrome/Firefox releases and Panther deprecations on a recurring cadence; treat driver upgrades as scheduled maintenance, not incidents.

Support

  • No vendor support; community is small but now demonstrably multi-contributor. Establish an internal owner (QA/platform engineer), an escalation path, and a named upstream contact (the active maintainer).
  • Document the runbook: how to reproduce locally, where artifacts land, how to re-run a single scenario, and how to apply a local patch if we diverge from the merged-unmerged Behat 4 PR.

Scaling

  • Behat parallelism remains process-based and requires per-worker isolation: separate app instances (or per-worker DB schemas), separate driver sessions, and a scheduler. This is the dominant cost at scale and is untouched by v2.0.0.
  • Browser tests are the slowest tier — cap the suite at critical journeys, keep bulk coverage in fast unit/feature tests, and gate browser runs to pre-merge on affected paths or nightly.
  • The PHP floor bump may force a second CI matrix if any apps remain on PHP 8.1 — factor that into runner cost.

Failure modes

  • Driver/browser version drift after an unattended runner update → mass failures.
  • Flaky waits and headless rendering/timing differences → nondeterministic red builds, eroding trust in CI.
  • DB state leakage between scenarios → order-dependent passes that fail in parallel.
  • Behat 4 / PHP-config path has undocumented edges because it landed ahead of upstream review → surprise breakage when upstream merges differently and we rebase.
  • PHP floor bump silently excludes older Laravel 10 apps, fragmenting tooling and producing "works on my app, fails in CI" confusion.
  • License ambiguity surfacing during an audit or acquisition diligence → forced rip-out.
  • Maintainer abandonment → unpatched incompatibility with future PHP/Panther/Behat releases (reduced but not eliminated by v2.0.0's contributor activity).

Ramp-up

  • One engineer: ~1–2 weeks to productive (Behat/Gherkin + Panther API + our shared contexts + CI image). Wider team: ~1 day to author scenarios against existing step definitions.
  • Behat 4's PHP config is friendlier to PHP developers than YAML but is sparsely documented here — assume extra discovery time if that path is chosen.
  • Require step-definition review to prevent an unmaintainable step catalog; treat contexts as production code with owners and tests.
  • Net TPM recommendation: still conditional pilot, upgraded from "watch" to "viable." v2.0.0 materially improves the continuity story — active CI, Symfony 8 and PHP 8.5 tracking, multiple contributors, real breaking-change hygiene. It does not touch the licensing question, which remains the hard gate, and it introduces a fresh Behat 4 dependency merged ahead of upstream. Proceed past the spike only with (a) confirmed licensing, (b) verified v2.0.0 publication, and (c) a clean 2-week flake measurement; otherwise default to Laravel Dusk/Pest, which carries materially lower integration and continuity risk for a Laravel codebase.
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.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox