oleg-andreyev/mink-phpwebdriver-extension
composer require --dev oleg-andreyev/mink-phpwebdriver-extension
behat.yml:
Add the extension under Behat\MinkExtension with wd_host pointing to your Selenium Grid or standalone WebDriver:
default:
extensions:
OAndreyev\MinkPhpWebdriverExtension: ~
Behat\MinkExtension:
default_session: webdriver
webdriver:
wd_host: "http://localhost:4444/wd/hub" # Default Selenium 4+ endpoint
Given I am on "/login"). The extension bridges Mink’s PhpBrowser with PhpWebDriver, enabling real browser automation.Replace PhpBrowser with PhpWebDriver:
The extension overrides Mink’s default session to use PhpWebDriver instead of PhpBrowser. No additional code changes are needed for basic Mink steps (e.g., click, fillField).
Leverage WebDriver-Specific Features:
Use WebDriver’s capabilities (e.g., JavaScript execution, mobile emulation) via Mink’s getSession():
$session = $this->getSession();
$session->executeScript('return window.innerWidth;');
Session Management:
BeforeScenario:
- Mink\Driver\WebDriver\WebDriverDriver::startSession
AfterScenario:
- Mink\Driver\WebDriver\WebDriverDriver::stopSession
Parallel Testing:
Configure multiple wd_host environments in behat.yml and use Behat’s parallel tags:
environments:
chrome:
webdriver:
wd_host: "http://chrome-grid:4444"
firefox:
webdriver:
wd_host: "http://firefox-grid:4444"
behat.yml:
webdriver:
capabilities:
browserName: chrome
chromeOptions:
args: ["--headless"]
PhpWebDriver for project-specific needs (e.g., custom wait conditions):
use Facebook\WebDriver\Remote\RemoteWebDriver;
class CustomWebDriver extends RemoteWebDriver { ... }
Host Configuration:
wd_host misconfigured (e.g., missing /wd/hub for Selenium 4).http://localhost:4444/wd/hub for Selenium 4+ or http://localhost:4444 for older versions.Session Leaks:
AfterScenario hooks to stop sessions or enable Behat’s stop_on_failure.Dependency Conflicts:
Behat\MinkExtension).oleg-andreyev/mink-phpwebdriver-extension is listed after Behat\MinkExtension in behat.yml.JavaScript Errors:
webdriver:
capabilities:
goog:chromeOptions:
args: ["--disable-js-harmony"]
Logs: Enable WebDriver logs via capabilities:
webdriver:
capabilities:
loggingPrefs:
browser: ALL
Access logs in Behat:
$logs = $session->getLog('browser');
Headless Mode: Use Chrome/Firefox headless options for CI:
webdriver:
capabilities:
browserName: chrome
chromeOptions:
args: ["--headless=new", "--disable-gpu"]
Custom Drivers:
Override the default PhpWebDriver by binding a service in Behat’s DI container:
services:
mink.driver.webdriver:
class: Your\Custom\WebDriver
Hooks: Extend session lifecycle with custom hooks:
BeforeScenario:
- @customHook
public function customHook(BeforeScenarioScope $scope) {
$session = $scope->getEnvironment()->getContext()->getSession();
$session->executeScript('window.customSetup = true;');
}
Environment-Specific Configs:
Use Behat’s environments to switch WebDriver setups:
environments:
staging:
webdriver:
wd_host: "https://staging-selenium:4444"
capabilities:
browserName: firefox
How can I help you explore Laravel packages today?