2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Mink package .
* ( c ) Konstantin Kudryashov < ever . zet @ gmail . com >
*
* 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 < ever . zet @ gmail . com >
*/
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 ();
/**
2015-10-08 11:40:12 -07:00
* Sets HTTP Basic authentication parameters .
2015-08-17 17:00:26 -07:00
*
* @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ return int
2015-08-17 17:00:26 -07:00
*
* @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ 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' )
2015-08-17 17:00:26 -07:00
*
* @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ 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' )
2015-08-17 17:00:26 -07:00
*
* @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ 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' )
2015-08-17 17:00:26 -07:00
*
* @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ param int $timeout timeout in milliseconds
* @ param string $condition JS condition
2015-08-17 17:00:26 -07:00
*
2015-10-08 11:40:12 -07:00
* @ return bool
2015-08-17 17:00:26 -07:00
*
* @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ 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 )
2015-08-17 17:00:26 -07:00
*
* @ throws UnsupportedDriverActionException When operation not supported by the driver
* @ throws DriverException When the operation cannot be done
*/
public function resizeWindow ( $width , $height , $name = null );
/**
2015-10-08 11:40:12 -07:00
* Maximizes the window if it is not maximized already .
2015-08-17 17:00:26 -07:00
*
* @ 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 );
}