friends-of-behat/mink-browserkit-driver
Installation Add the package via Composer:
composer require friends-of-behat/mink-browserkit-driver
Ensure symfony/browser-kit is also installed (dependency).
Basic Configuration
In your Laravel project, register the driver in config/mink.php (or create it):
'drivers' => [
'browserkit' => [
'class' => \FriendsOfBehat\MinkBrowserKitDriver\Driver::class,
'guzzle_options' => [], // Optional Guzzle config
'options' => [], // Mink-specific options
],
],
First Use Case Use the driver in a Behat scenario or custom test suite:
use FriendsOfBehat\MinkBrowserKitDriver\Driver;
use Mink\Mink;
$mink = new Mink();
$mink->setDefaultDriver(new Driver());
$session = $mink->getSession();
$session->start();
$session->visit('/');
Integration with Laravel Testing Use the driver in Laravel’s PHPUnit tests or custom test suites:
use FriendsOfBehat\MinkBrowserKitDriver\Driver;
use Laravel\BrowserKitTesting\TestCase;
class FeatureTest extends TestCase {
protected function createMinkDriver() {
return new Driver($this->app['browserkit']);
}
}
Dynamic Session Management Reuse sessions across tests to avoid redundant setup:
$session = $mink->getSession();
$session->visit('/dashboard');
$this->assertSession()->addressEquals('/dashboard');
Handling Forms and Submissions Simulate user interactions:
$session->fillField('email', 'user@example.com');
$session->pressButton('Login');
$this->assertSession()->responseContains('Welcome');
Custom Middleware Extend the driver with middleware (e.g., auth headers):
$driver = new Driver($browserKit, [
'middleware' => [
function ($request) {
$request->headers->set('X-Custom-Header', 'value');
},
],
]);
Symfony BrowserKit Limitations
mink-selenium2-driver for JS-heavy apps).symfony/browser-kit + a browser (e.g., Chrome via laravel-dusk).Session State Persistence
$session->reset();
Guzzle Version Conflicts
Ensure guzzlehttp/guzzle is compatible (v6+ recommended). Resolve conflicts via:
composer require guzzlehttp/guzzle:^6.0
Enable Verbose Logging Configure Guzzle for debug output:
'guzzle_options' => [
'debug' => fopen('debug.log', 'w'),
],
Check Response Headers Inspect raw responses:
$response = $session->getResponse();
var_dump($response->getHeaders());
Leverage Laravel’s BrowserKit
Inject Laravel’s BrowserKit instance directly:
$driver = new Driver($this->app['browserkit']);
Combine with Mink Extensions
Use mink-extension for Laravel-specific helpers:
composer require dusk-framework/dusk:mink-extension
Performance Optimization
Reuse the BrowserKit instance across tests to avoid overhead:
$browserKit = $this->app['browserkit'];
$driver = new Driver($browserKit);
Custom Assertions Extend Mink’s assertions for Laravel-specific checks:
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->elementTextContains('css', '.alert', 'Success');
How can I help you explore Laravel packages today?