Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Cheat sheet for using php webdriver (facebook/webdriver).

Webdriver PHP API workthough

  • Open a browser

    # start an instance of firefox with selenium-webdriver
    $browser_type = 'firefox'
    $host = 'http://localhost:4444/wd/hub'
    $capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => $browser_type);
    $driver = RemoteWebDriver::create($host, $capabilities);
    # :firefox => firefox
    # :chrome  => chrome
    # :ie      => iexplore
  • Go to a specified URL


    'NOTE' -- the WebDriver may not wait for the page to load, you'd better using explicit and implicit waits.

  • Locating Elements

    • 'findElement(WebDriverBy $by)' -- Find the first element matching the given arguments.

    • 'findElements(WebDriverBy $by)' -- Find all elements matching the given arguments

    • 'WebDriverBy' -- Class with static methods for selecting elements using different mechanisms.

      • 'WebDriverBy
        • 'class name'
        • 'css selector'
        • 'id'
        • 'name'
        • 'link text'
        • 'partial link text'
        • 'tag name'
        • 'xpath'
    • Finding Element By ID

      # example html
      # <input id="q">...</input>
      $element = $driver->findElement(WebDriverBy::id("q"));
    • By Class Name

      # example html
      # <div class="highlight-java" style="display: none; ">...</div>
      $element = $driver->findElement(WebDriverBy::className('highlight-java'));
    • By Tag Name

      # example html
      # <div class="highlight-java" style="display: none; ">...</div>
      $element = $driver->findElement(WebDriverBy::tagName("div"));
    • By Name

      # example html
      # <input id="q" name='search' type='text'>…</input>
      $element = $driver->findElement(WebDriverBy::name('search'));
    • By Link Text

      # example html
      # <a href="">cheese</a>
      $element = $driver->findElement(WebDriverBy::linkText("cheese"));
    • By Partial Link Text

      # example html
      # <a href="">search for cheese</a>
      $element = $driver->findElement(WebDriverBy::partialLinkText("chee"));
    • By XPath

      # example html
      # <ul class="dropdown-menu">
      #   <li><a href="/login/form">Login</a></li>
      #   <li><a href="/logout">Logout</a></li>
      # </ul>
      $element = $driver->findElement(WebDriverBy::xpath('//a[@href='/logout']'));
      • NOTE -- When using Element#findElement with WebDriverBy::xpath, be aware that,

        • webdriver follows standard conventions: a search prefixed with "//" will search the entire document, not just the children of this current node.
        • Use ".//" to limit your search to the children of the receiving Element.
    • By CSS Selector

        # example html
        # <div id="food">
        #   <span class="dairy">milk</span>
        #   <span class="dairy aged">cheese</span>
        # </div>
        $element = $driver->findElement(WebDriverBy::cssSelector('#food span.dairy'));
  • Element's operation

    • Button/Link/Image

      $element = $driver->findElement(WebDriverBy::id('BUTTON_ID'))->click();
    • Text Field

      # input some text
      # send keyboard actions, press `cmd+a` & `delete`
          WebDriverKeys::COMMAND, // Use control on non-mac computers.

      *'Note' -- /RemoteWebElement->clear() will clear text from a textarea or a text input.

    • Checkbox/Radio

      # check if it is selected
      # select the element
      # deselect the element
    • Select

      # get the select element	
      $select = $driver->findElement(WebDriverBy::tagName('select'));
      # get all the options for this element
      $allOptions = $select->findElement(WebDriverBy::tagName('option'));
      # select the options
      foreach ($allOptions as $option) {
        echo "Value is:" . $option->getAttribute('value);
    • visibility

    • get text

    • get attribute

  • Driver's operation

    • execute javascript

        $driver->executeScript("return window.location.pathname");
    • wait for a specific element to show up

        # set the timeout to 20 seconds, and the time in interval to 1000 ms
        $driver->wait(20, 1000)->until(
            WebDriverExpectedCondition::titleIs('WebDriver Page')
    • implicit waits

    An implicit wait is to tell WebDriver to poll the DOM for a certain amount of time when trying to find an element or elements if they are not immediately available

    	# set the timeout for implicit waits as 10 seconds
    	$driver->manage()->timeouts()->implicitlyWait = 10
    	$element = $driver->findElement(WebDriverBy::id('some-dynamic-element'));
    • switch between frames

        # switch to an iframe
        $driver->switchTo()->frame(/WebDriverElement('the id or the name of the frame"some-frame" # name or id'));
        # switch back to the main document
    • swich between windows

        #TODO: Add examples.
    • handle javascript dialog

        # get the alert
        $a = $driver->switchTo->alert();
        # operation on the alert
        if ($a->getText == 'A value you are looking for') {
        else {
  • Cookies

    • Delete cookies

        # You can delete cookies in 2 ways
        # By name
        # Or all of them



Awesome stuff, ta

fluid217 commented Mar 7, 2016

Really helpful, Thanks!

There is one error though:
$allOptions = $select->findElement(WebDriverBy::tagName('option'));

should read:
$allOptions = $select->findElements(WebDriverBy::tagName('option'));
(notice the plural of Elements)

This helps me a lot, thanks mate!

Thanks! It was useful

There's an error.
$driver->manage()->timeouts()->implicitlyWait = 10
should be
implicitlyWait is a method.

Thanks for great work btw)

Thanks for the great work yeah !

kbcmdba commented Sep 18, 2016

The following line is missing a tick mark...

echo "Value is:" . $option->getAttribute('value);

Note 'value should be 'value'

jihadismail8 commented Dec 2, 2016

how to use the same browser session each time i run my script ??? because each time i test my script it opens a new windows which takes alot of resources ... any help guys ?

Why not close the old unused windows after your tests?

Sarana-Anna commented Jan 11, 2017

Why not close the old unused windows after your tests?

public function tearDown()

How to set a cookie?

how to move to new tab?

Vilisag commented May 19, 2017


It's worth mentioning $driver->navigate()->back(); to go back as well as $driver->navigate()->refresh(); to refresh the current page.

Thanks a lot

tdhouibi commented Sep 18, 2017

Hi aczieltlow , and every Body
do you have an Idea how can i add Torifier this Browser Tor to the phpCode:
// start Firefox with 5 second timeout
$host = 'http://localhost:4444/wd/hub'; // this is the default
$capabilities = DesiredCapabilities::firefox();
$driver = RemoteWebDriver::create($host, $capabilities, 5000);


Very Helpful

Missing '

echo "Value is:" . $option->getAttribute('value);
echo "Value is:" . $option->getAttribute('value');

Select option by value

$driver->findElement(WebDriverBy::cssSelector('select[name="_________"] option[value="____________"]'))->click();

Fullscreen mode:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment