symfony/panther
A browser testing and web scraping library for PHP and Symfony.
v2.4.0
17M downloads/mo
#967 most downloaded on Packagist
symfony/panther
What this package is like to depend on
Last release 7 months ago
08 Jan 2026
Release timing varies
gaps range from 4 weeks to 1.5 years
Nearly every release is documented
notes for 25 of 26 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
26 releases · first in 2018
2 releases in the last 12 months
see the full history below
Release timeline
26 releases · Jul 2018 to Jan 2026
2019
2020
2021
2022
2023
2024
2025
2026
Releases
latest 26-
v2.4.008 Jan 2026Release notes
Open source →What's Changed
- ci: Upgrade checkout action from v4 to v5 by @Chris53897 in #683
- Symfony 8 support follow-up, PHPUnit 11 by @Kocal in #678
New Contributors
Full Changelog: v2.3.0...v2.4.0
-
v2.3.021 Nov 2025Release notes
Open source →- Add support for PHP 8.5
- Add support for Symfony 8
- Disable dev-tools by default
Release notes
Open source →- Add support for PHP 8.5
- Add support for Symfony 8
- Disable dev-tools by default
-
v2.2.030 Jan 2025Release notes
Open source →- Add support for PHP 8.4
- Add support for using Selenium with the built-in web server
- Add a
PANTHER_NO_REDUCED_MOTIONenvironment variable to instruct the website to disable the reduction of non-essential movement - Add the ability to pass options to
HttpClientwhen usingHttpBrowser - Use a custom exception hierarchy instead of native exceptions directly
- The Firefox
window-sizeoption is not set by default anymore in headless mode - Add explicit error messages in
wait*methods - Fix support for checkbox and radio buttons having
0as value - Fix catching of WebDriver exceptions
- Ignore curl exceptions when closing WebDriver inside the destructor
- Documentation has been moved from the Git repository to https://symfony.com/doc/current/testing/end_to_end.html
Release notes
Open source →- Add support for PHP 8.4
- Add support for using Selenium with the built-in web server
- Add a
PANTHER_NO_REDUCED_MOTIONenvironment variable to instruct the website to disable the reduction of non-essential movement - Add the ability to pass options to
HttpClientwhen usingHttpBrowser - Use a custom exception hierarchy instead of native exceptions directly
- The Firefox
window-sizeoption is not set by default anymore in headless mode - Add explicit error messages in
wait*methods - Fix support for checkbox and radio buttons having
0as value - Fix catching of WebDriver exceptions
- Ignore curl exceptions when closing WebDriver inside the destructor
- Documentation has been moved from the Git repository to https://symfony.com/doc/current/testing/end_to_end.html
-
v2.1.103 Dec 2023Release notes
Open source →- Allow Symfony 7
- Improve DX when using the Symfony binary
- Fix screenshot on test failure
- Add missing arguments when calling the legacy PHPUnit extension
Release notes
Open source →- Allow Symfony 7
- Improve DX when using the Symfony binary
- Fix screenshot on test failure
- Add missing arguments when calling the legacy PHPUnit extension
-
v2.1.030 May 2023Release notes
Open source →- Add support for PHPUnit 10
- Add support for
matches()andclosest()inCrawler
Release notes
Open source →- Add support for PHPUnit 10
- Add support for
matches()andclosest()inCrawler
-
v2.0.102 Dec 2021 -
v2.0.030 Nov 2021Release notes
Open source →What's Changed
- Add support for Symfony 6 by @jordisala1991 in #509
- Allow deprecation-contracts 3 by @derrabus in #519
- Remove polyfill by @derrabus in #522
- Remove support for Symfony 4.4, add more type declarations for v2 by @chalasr in #517
New Contributors
- @jordisala1991 made their first contribution in #509
- @weaverryan made their first contribution in #513
Full Changelog: v1.1.2...v2.0.0
Release notes
Open source →- Allow Symfony 6
- Add type declarations everywhere possible
- Remove Support for Symfony 4.4
-
v1.1.230 Nov 2021Release notes
Open source →What's Changed
- Fix
Form::offsetGet()return type by @chalasr in #500 - Allow deprecation-contracts 3 by @derrabus in #519
Full Changelog: v1.1.1...v1.1.2
- Fix
-
v1.1.114 Jul 2021 -
v1.1.013 Jul 2021Release notes
Open source →- Add a
PANTHER_DEVTOOLSenvironment variable to disable the dev tools - Add a
PANTHER_ERROR_SCREENSHOT_ATTACHenvironment variable to attach screenshots to PHPUnit reports in the JUnit format - Add a
chromedriver_argumentsoption to pass custom arguments to Chromedriver - Add an
envoption to pass custom environment variables to the built-in web server fromPantherTestCase - Add the possibility to pass options to
ChromeManager - Automatically find the Chromedriver binary installed by
lanfest/binary-chromedriver - Symfony 5.3 compatibility
- Fix assertions that were not working with clients other than
PantherClient - Fix the ability to keep the window of the browser open when a test fail by using the
--debugoption - Fix the
ServerExtensionwhenregisterClient()is called multiple times - Fix
undefined constanterrors when usingPantherTestCaseTraitdirectly
Release notes
Open source →- Add a
PANTHER_DEVTOOLSenvironment variable to disable the dev tools - Add a
PANTHER_ERROR_SCREENSHOT_ATTACHenvironment variable to attach screenshots to PHPUnit reports in the JUnit format - Add a
chromedriver_argumentsoption to pass custom arguments to Chromedriver - Add an
envoption to pass custom environment variables to the built-in web server fromPantherTestCase - Add the possibility to pass options to
ChromeManager - Automatically find the Chromedriver binary installed by
lanfest/binary-chromedriver - Symfony 5.3 compatibility
- Fix assertions that were not working with clients other than
PantherClient - Fix the ability to keep the window of the browser open when a test fail by using the
--debugoption - Fix the
ServerExtensionwhenregisterClient()is called multiple times - Fix
undefined constanterrors when usingPantherTestCaseTraitdirectly
- Add a
-
v1.0.103 Feb 2021Release notes
Open source →- Fix storing screenshots in the wrong directory when
PANTHER_ERROR_SCREENSHOT_DIRis enabled
- Fix storing screenshots in the wrong directory when
-
v1.0.003 Feb 2021Release notes
Open source →- Add
Client::waitForEnabled(),Client::waitForDisabled(),Client::waitForAttributeToContain()andClient::waitForAttributeToNotContain()methods - Add
PantherTestCase::assertSelectorAttributeContains(),PantherTestCase::assertSelectorAttributeNotContains(),PantherTestCase::assertSelectorWillExist(),PantherTestCase::assertSelectorWillNotExist(),PantherTestCase::assertSelectorWillBeVisible(),PantherTestCase::assertSelectorWillNotBeVisible(),PantherTestCase::assertSelectorWillContain(),PantherTestCase::assertSelectorWillNotContain(),PantherTestCase::assertSelectorWillBeEnabled(),PantherTestCase::assertSelectorWillBeDisabled,PantherTestCase::assertSelectorAttributeWillContain(), andPantherTestCase::assertSelectorAttributeWillNotContain()assertions - Automatically take a screenshot when a test fail and if the
PANTHER_ERROR_SCREENSHOT_DIRenvironment variable is set - Add missing return types
- Breaking Change: Remove the deprecated PHPUnit listener, use the PHPUnit extension instead
- Breaking Change: Remove deprecated support for Goutte, use
HttpBrowserinstead - Breaking Change: Remove deprecated support for
PANTHER_CHROME_DRIVER_BINARYandPANTHER_GECKO_DRIVER_BINARYenvironment variables, add the binaries in yourPATHinstead - Don't allow unserializing classes with a destructor
- Add
-
v0.9.029 Dec 2020Release notes
Open source →- Breaking Change: ChromeDriver and geckodriver binaries are not included in the archive anymore and must be installed separately, refer to the documentation
- PHP 8 compatibility
- Add
Client::waitForStaleness()method to wait for an element to be removed from the DOM - Add
Client::waitForInvisibility()method to wait for an element to be invisible - Add
Client::waitForElementToContain()method to wait for an element containing the given parameter - Add
Client::waitForElementToNotContain()method to wait for an element to not contain the given parameter - Add
PantherTestCase::assertSelectorIsVisible(),PantherTestCase::assertSelectorIsNotVisible(),PantherTestCase::assertSelectorIsEnabled()andPantherTestCase::assertSelectorIsDisabled()assertions - Fix
baseUrinot taken into account when using Symfony HttpBrowser
-
v0.8.003 Oct 2020Release notes
Open source →- Upgrade ChromeDriver to version 85.0.4183.87
- Upgrade geckodriver to version 0.27.0
- Add a
Client::waitForVisibility()method to wait for an element to appear - Allow passing options to the browser manager from
PantherTestCase::createPantherClient() - Add a
Client::ping()method to check if the WebDriver connection is still active - Fix setting a new value to an input field when there is an existing value
- Improve the error message when the web server crashes
- Throw an explanative
LogicExceptionwhen driver is not started yet - Prevent timeouts caused by the integrated web server
- Fix the value of cookie secure flags
- Throw an exception when getting history (unsupported feature)
- Add docs to use Panther with GitHub Actions
- Various bug fixes and documentation improvements
-
v0.7.124 Feb 2020 -
v0.7.020 Feb 2020Release notes
Open source →- Add built-in support for Firefox (using GeckoDriver)
- Add support for Symfony HttpBrowser
- Deprecate Goutte support (use HttpBrowser instead)
- Allow configuring
RemoteWebDrivertimeouts when using Selenium - Allow passing custom environment variables to the built-in web server
- Fix some compatibility issues with PHP WebDriver 1.8
- Upgrade ChromeDriver to version 80.0.3987.106
- Prevent access to fixture files even if the web server is misconfigured
-
v0.6.120 Jan 2020Release notes
Open source →- Upgrade ChromeDriver to version 79.0.3945.36
- Allow passing custom timeouts as options of
ChromeManager(connection_timeout_in_msandrequest_timeout_in_ms)
-
v0.6.028 Oct 2019Release notes
Open source →- Add compatibility with Symfony 5
- Allow using
Client::waitFor()to wait for invisible elements - Add support to pass XPath expressions as parameters of
Client::waitFor() - Fix
Crawler::attr()signature (it can returnnull) - Deprecate
ServerListener(useServerExtensioninstead) - Upgrade ChromeDriver to version 78.0.3904.70
- New logo
- Various docs fixes and improvements
-
v0.5.227 Aug 2019 -
v0.5.123 Aug 2019Release notes
Open source →- Allow to override the
APP_ENVenvironment variable passed to the web server by settingPANTHER_APP_ENV - Fix using assertions with a client created through
PantherTestCase::createClient() - Don't call
PantherTestCase::getClient()if this method isn'tstatic - Fix remaining deprecations
- Allow to override the
-
v0.5.022 Aug 2019Release notes
Open source →- Add support for Crawler test assertions
- Add the
PantherTestCase::createAdditionalPantherClient()to retrieve additional isolated browsers, useful to test applications using Mercure or WebSocket - Improved support for non-standard web server directories
- Allow the integrated web server to start even if the homepage doesn't return a 200 HTTP status code
- Increase default timeouts from 5 seconds to 30 seconds
- Improve error messages
- Add compatibility with Symfony 4.3
- Upgrade ChromeDriver to version 76.0.3809.68
- Various quality improvements
-
v0.4.111 Jun 2019 -
v0.4.004 Jun 2019Release notes
Open source →- Speed up the boot sequence
- Add basic support for file uploads
- Add a
readinessPathoption to use a custom path for server readiness detection - Fix the behavior of
ChoiceFormField::getValue()to be consistent with other BrowserKit implementations - Ensure to clean the previous content of field when using
TextareaFormField::setValue()andInputFormField::setValue()
-
v0.3.027 Feb 2019Release notes
Open source →- Add a new API to manipulate the mouse
- Keep the browser window open on fail, when running in non-headless mode
- Automatically open Chrome DevTools when running in non-headless mode
- PHPUnit 8 compatibility
- Add a PHPUnit extension to keep alive the web server, and the client between tests
- Change the default port of the web server to
9080to prevent a conflict with Xdebug - Allow to use an external web server instead of the built-in one for testing
- Allow to use a custom router script
- Allow to use a custom Chrome binary
-
v0.2.026 Sep 2018Release notes
Open source →- Add JS execution capabilities to
Client - Allow keeping the web server and client active even after test teardown
- Add a method to refresh the crawler (
Client::refreshCrawler()) - Add options to configure the web server and ChromeDriver
- PHP 7.1 compatibility
- Add JS execution capabilities to
-
v0.1.017 Jul 2018Nothing published for this version