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.
9d7dbe9 chore: support Symfony 8 (#184) by @nikophil, @kbond
1831b54 fix: Remove deprecated ReflectionProperty::setAccessible() (#187) by @deluxetom
5105bdb fix: resolve false positive on jsonMatches (#179) by @flohw
8a59547 doc: fix PHP syntax in README.md on use functions (#170) by @welcoMattic
53bbc83 minor: unpack Foundry 2 proxies (#160) by @kbond
d933d4e minor: set KernelBrowser:: protected (#146) by @nikophil c1add1b fix: deprecation warning from PHPUnit (#145) by @Chris53897, @Chris8934 66188ad chore: update ci (#144) by @kbond
f7ac67a feat: Allow selectFieldOptions to deselect all values (#143) by @kbond, @notFloran
4ad6074 doc: Fix typo in readme (#140) by @t-richard
fbdc2cd minor: add "dev" to composer.json tags by @kbond
7144c6a fix: Complex test name normalization (#139) by @flohw
41af33b feat: support Symfony 7.0 (#134) by @kbond
ec27abb fix: preserving dots in query string (#132) by @norkunas
7b8a982 minor: allow Symfony 7.0 (#130) by @kbond
9b4887d minor(ci): remove php version from fixcs job by @kbond
2e738a6 feat: Allow to use Psr\Container\ContainerInterface in ->use callback (#129) by @norkunas
48bb602 feat: Enable overriding of HTTP methods (#126) by @nathan-de-pachtere
45cc396 fix(tests): deprecations (#123) by @kbond
a99150a doc: document BROWSER_SOURCE_DEBUG by @kbond
d64b773 feat: add KernelBrowser::assertContentType() and prevent saving corrupt files (#121) by @welcoMattic
25c5ea5 fix(tests): deprecation (#119) by @kbond
ab4b548 fix(ci): don't run fixcs/sync-with-template on forks (#119) by @kbond
d03de6a fix: enable attaching \SplFileInfo objects (#119) by @kbond
90e99fc feat: require php 8+ (#117) by @kbond
f4596c8 fix: Json::assertMissing/assertHas better handle empty-ish values (#116) by @flohw
0173c11 fix(ci): add token by @kbond
ea600b7 chore(ci): fix by @kbond
3fe911f chore: update ci config (#114) by @kbond
9f6024a fix: tests (#113) by @kbond
301e072 [minor] adjust sca (#111) by @kbond
b5f7b4a [minor] adjust Browser::content() and add test (#111) by @kbond
29fbc93 [minor] cs fixes (#111) by @kbond
51bb8b1 [feature] Add Browser::content() to fetch the raw response body (#109) by @benr77
0b61a6a [doc] document assertMatchesSchema() (#106) by @nikophil
29171b7 [feature] add Json::assertMatchesSchema() (#102) by @nikophil
1466827 [feature] add doubleClick and rightClick to PantherBrowser (#104) by @Chris53897, @kbond
fc51e88 [minor] update phpstan baseline (#105) by @Chris53897
adf645f [minor] migrate phpunit config-file to version 9 (#103) by @Chris53897
ea84ec6 [feature] Assert that an header is not present (#98) by @nitneuk
157ce84 [minor] locally cache decoded json (#95) by @kbond
c860ff9 [doc] add note/link to full zenstruck/assert expectation API (#95) by @kbond
0f88a45 [minor] cs fixes (#95) by @kbond
cd3cce3 [doc] Fix typo in example AppBrowser use statement (#94) by @jwage
3858d04 [minor] small adjustments by @kbond
90393a9 [feature] add Json::assertHas()/assertMissing()/assertThat()/assertThatEach() (#92) by @nikophil
7efe89e [doc] document accessing Crawler instance by @kbond
53257c7 [minor] add Symfony 6.1 to build matrix (#90) by @kbond
954b858 [minor] document and help with some auth edge cases (#89) by @kbond
00aea30 [minor] disable profile collection by default in tests (#89) by @kbond
6f4a162 [minor] refactor tests (#89) by @kbond
582d70f [feature] add authentication assertions to KernelBrowser (#84) by @kbond
d30d5d6 [doc] Readme: remove $ to allow github copy/paste of the command (#87) by @staabm
acc0129 [minor] Browser::saveCurrentState() as "real" html (#86) by @kbond
6f420ae [bug] fix debugging source when exception is detected (#88) by @kbond
2afbcca [feature] fail if trying to manipulate an "exception" page (#81) by @kbond
8989fca [feature] add KernelBrowser::clickAndIntercept() (#82) by @kbond
da4a6e4 [feature] add BROWSER_FOLLOW_REDIRECTS/CATCH_EXCEPTIONS env vars (#79) by @kbond
acefe9d [doc] remove reference to PantherBrowser::inspect() by @kbond
93b677b [minor] remove deprecation layers by @kbond
f051372 [feature] add KernelBrowser::expectException() (#78) by @kbond
888c736 [bug] ensure all requests are piped through session (#78) by @kbond
80d55a8 [minor] refactor internals (#75) by @kbond
be748fe [minor] remove Dom/Interactive extensions (#75) by @kbond
e34c1bf [BC BREAK] rename PantherBrowser::inspect() to pause() (#75) by @kbond
7ee81a0 [feature] add content type/json helpers (#75) by @kbond
6d337f8 [minor] improve HasBrowser error handling (#75) by @kbond
714437f [minor] add symfony version to gh job name (#75) by @kbond
e2acba9 [feature] add ability to "use" the "inner" browser (#75) by @kbond
2451f54 [BC BREAK] remove Response system (#75) by @kbond
400277f [minor] remove BrowserKitBrowser, add Browser::client() (#75) by @kbond
cf75454 [minor] move Browser DOM/interactive methods to extensions (#75) by @kbond
8122f29 [minor] upgrade dbrekelmans/bdi (#75) by @kbond
bfb0bab [BC BREAK] remove Browser::follow() - use Browser::click() (#75) by @kbond
31fbd04 [feature] add zenstruck/foundry integration (#75) by @kbond
2c4d97a [minor] adjust phpstan-baseline (#75) by @kbond
e2d535d [BC BREAK] remove "demo" Authentication extension (#75) by @kbond
31ffc41 [minor] move mtdowling/jmespath.php to require-dev (#75) by @kbond
284f43b [BC BREAK] remove HttpBrowser (#75) by @kbond
baaa970 [minor] drop scrutinizer (#74) by @kbond
529fe04 [minor] require Symfony 5.4+ (#74) by @kbond
aeab194 [minor] fix phpstan (#74) by @kbond
4351585 [feature] add ability to "use" profile data collectors (#74) by @kbond
6f5c0a3 [feature] add ability to "use" CookieJar (#74) by @kbond
3c16d6e [feature] Add BrowserKitBrowser::patch() (#72) by @KDederichs
d1dbfdb [minor] add static code analysis with phpstan (#69) by @kbond
c976a53 [bug] Normalized test name matches int and string indexed data provider (#68) by @flohw
aec83f9 [minor] allow panther 2 by @kbond
How can I help you explore Laravel packages today?