* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Behat\Mink\Driver; use Behat\Mink\Element\NodeElement; use Behat\Mink\Exception\DriverException; use Behat\Mink\Exception\UnsupportedDriverActionException; use Behat\Mink\Session; /** * Driver interface. * * @author Konstantin Kudryashov */ interface DriverInterface { /** * Sets driver's current session. * * @param Session $session */ public function setSession(Session $session); /** * Starts driver. * * Once started, the driver should be ready to visit a page. * * Calling any action before visiting a page is an undefined behavior. * The only supported method calls on a fresh driver are * - visit() * - setRequestHeader() * - setBasicAuth() * - reset() * - stop() * * Calling start on a started driver is an undefined behavior. Driver * implementations are free to handle it silently or to fail with an * exception. * * @throws DriverException When the driver cannot be started */ public function start(); /** * Checks whether driver is started. * * @return Boolean */ public function isStarted(); /** * Stops driver. * * Once stopped, the driver should be started again before using it again. * * Calling any action on a stopped driver is an undefined behavior. * The only supported method call after stopping a driver is starting it again. * * Calling stop on a stopped driver is an undefined behavior. Driver * implementations are free to handle it silently or to fail with an * exception. * * @throws DriverException When the driver cannot be closed */ public function stop(); /** * Resets driver state. * * This should reset cookies, request headers and basic authentication. * When possible, the history should be reset as well, but this is not enforced * as some implementations may not be able to reset it without restarting the * driver entirely. Consumers requiring a clean history should restart the driver * to enforce it. * * Once reset, the driver should be ready to visit a page. * Calling any action before visiting a page is an undefined behavior. * The only supported method calls on a fresh driver are * - visit() * - setRequestHeader() * - setBasicAuth() * - reset() * - stop() * * Calling reset on a stopped driver is an undefined behavior. */ public function reset(); /** * Visit specified URL. * * @param string $url url of the page * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function visit($url); /** * Returns current URL address. * * @return string * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getCurrentUrl(); /** * Reloads current page. * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function reload(); /** * Moves browser forward 1 page. * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function forward(); /** * Moves browser backward 1 page. * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function back(); /** * Sets HTTP Basic authentication parameters. * * @param string|Boolean $user user name or false to disable authentication * @param string $password password * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function setBasicAuth($user, $password); /** * Switches to specific browser window. * * @param string $name window name (null for switching back to main window) * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function switchToWindow($name = null); /** * Switches to specific iFrame. * * @param string $name iframe name (null for switching back) * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function switchToIFrame($name = null); /** * Sets specific request header on client. * * @param string $name * @param string $value * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function setRequestHeader($name, $value); /** * Returns last response headers. * * @return array * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getResponseHeaders(); /** * Sets cookie. * * @param string $name * @param string $value * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function setCookie($name, $value = null); /** * Returns cookie by name. * * @param string $name * * @return string|null * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getCookie($name); /** * Returns last response status code. * * @return int * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getStatusCode(); /** * Returns last response content. * * @return string * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getContent(); /** * Capture a screenshot of the current window. * * @return string screenshot of MIME type image/* depending * on driver (e.g., image/png, image/jpeg) * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getScreenshot(); /** * Return the names of all open windows. * * @return array array of all open windows * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getWindowNames(); /** * Return the name of the currently active window. * * @return string the name of the current window * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getWindowName(); /** * Finds elements with specified XPath query. * * @param string $xpath * * @return NodeElement[] * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function find($xpath); /** * Returns element's tag name by it's XPath query. * * @param string $xpath * * @return string * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getTagName($xpath); /** * Returns element's text by it's XPath query. * * @param string $xpath * * @return string * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getText($xpath); /** * Returns element's inner html by it's XPath query. * * @param string $xpath * * @return string * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getHtml($xpath); /** * Returns element's outer html by it's XPath query. * * @param string $xpath * * @return string * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getOuterHtml($xpath); /** * Returns element's attribute by it's XPath query. * * @param string $xpath * @param string $name * * @return string|null * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function getAttribute($xpath, $name); /** * Returns element's value by it's XPath query. * * @param string $xpath * * @return string|bool|array * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::getValue */ public function getValue($xpath); /** * Sets element's value by it's XPath query. * * @param string $xpath * @param string|bool|array $value * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::setValue */ public function setValue($xpath, $value); /** * Checks checkbox by it's XPath query. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::check */ public function check($xpath); /** * Unchecks checkbox by it's XPath query. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::uncheck */ public function uncheck($xpath); /** * Checks whether checkbox or radio button located by it's XPath query is checked. * * @param string $xpath * * @return Boolean * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::isChecked */ public function isChecked($xpath); /** * Selects option from select field or value in radio group located by it's XPath query. * * @param string $xpath * @param string $value * @param Boolean $multiple * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::selectOption */ public function selectOption($xpath, $value, $multiple = false); /** * Checks whether select option, located by it's XPath query, is selected. * * @param string $xpath * * @return Boolean * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::isSelected */ public function isSelected($xpath); /** * Clicks button or link located by it's XPath query. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function click($xpath); /** * Double-clicks button or link located by it's XPath query. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function doubleClick($xpath); /** * Right-clicks button or link located by it's XPath query. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function rightClick($xpath); /** * Attaches file path to file field located by it's XPath query. * * @param string $xpath * @param string $path * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::attachFile */ public function attachFile($xpath, $path); /** * Checks whether element visible located by it's XPath query. * * @param string $xpath * * @return Boolean * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function isVisible($xpath); /** * Simulates a mouse over on the element. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function mouseOver($xpath); /** * Brings focus to element. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function focus($xpath); /** * Removes focus from element. * * @param string $xpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function blur($xpath); /** * Presses specific keyboard key. * * @param string $xpath * @param string|int $char could be either char ('b') or char-code (98) * @param string $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta') * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function keyPress($xpath, $char, $modifier = null); /** * Pressed down specific keyboard key. * * @param string $xpath * @param string|int $char could be either char ('b') or char-code (98) * @param string $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta') * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function keyDown($xpath, $char, $modifier = null); /** * Pressed up specific keyboard key. * * @param string $xpath * @param string|int $char could be either char ('b') or char-code (98) * @param string $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta') * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function keyUp($xpath, $char, $modifier = null); /** * Drag one element onto another. * * @param string $sourceXpath * @param string $destinationXpath * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function dragTo($sourceXpath, $destinationXpath); /** * Executes JS script. * * @param string $script * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function executeScript($script); /** * Evaluates JS script. * * The "return" keyword is optional in the script passed as argument. Driver implementations * must accept the expression both with and without the keyword. * * @param string $script * * @return mixed * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function evaluateScript($script); /** * Waits some time or until JS condition turns true. * * @param int $timeout timeout in milliseconds * @param string $condition JS condition * * @return bool * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function wait($timeout, $condition); /** * Set the dimensions of the window. * * @param int $width set the window width, measured in pixels * @param int $height set the window height, measured in pixels * @param string $name window name (null for the main window) * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function resizeWindow($width, $height, $name = null); /** * Maximizes the window if it is not maximized already. * * @param string $name window name (null for the main window) * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done */ public function maximizeWindow($name = null); /** * Submits the form. * * @param string $xpath Xpath. * * @throws UnsupportedDriverActionException When operation not supported by the driver * @throws DriverException When the operation cannot be done * * @see \Behat\Mink\Element\NodeElement::submitForm */ public function submitForm($xpath); }