for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Zenstruck\Browser\Test;
use Symfony\Component\Panther\Client as PantherClient;
use Symfony\Component\Panther\PantherTestCase;
use Zenstruck\Browser\PantherBrowser;
trait HasPantherBrowser
{
private static ?PantherClient $primaryPantherClient = null;
/**
* @internal
* @after
*/
final public static function _resetPantherBrowserClient(): void
self::$primaryPantherClient = null;
}
protected function pantherBrowser(array $options = [], array $kernelOptions = [], array $managerOptions = []): PantherBrowser
$class = $_SERVER['PANTHER_BROWSER_CLASS'] ?? PantherBrowser::class;
if (!\is_a($class, PantherBrowser::class, true)) {
throw new \RuntimeException(\sprintf('"PANTHER_BROWSER_CLASS" env variable must reference a class that extends %s.', PantherBrowser::class));
if (self::$primaryPantherClient) {
$browser = new $class(static::createAdditionalPantherClient());
} else {
self::$primaryPantherClient = static::createPantherClient(
\array_merge(['browser' => $_SERVER['PANTHER_BROWSER'] ?? static::CHROME], $options),
Zenstruck\Browser\Test\HasPantherBrowser::CHROME
$kernelOptions,
$managerOptions
);
$browser = new $class(self::$primaryPantherClient);
BrowserExtension::registerBrowser($browser);
return $browser
->setSourceDir($_SERVER['BROWSER_SOURCE_DIR'] ?? './var/browser/source')
->setScreenshotDir($_SERVER['BROWSER_SCREENSHOT_DIR'] ?? './var/browser/screenshots')
->setConsoleLogDir($_SERVER['BROWSER_CONSOLE_LOG_DIR'] ?? './var/browser/console-logs')
;