Setting up your PHP environment for Selenium webdriver testing

Selenium WebDriver is a tool for automating web testing. It automates testing by making direct calls to the browser allowing you to compare expected against actual results. It makes direct calls to the browser using javascript.

Advantages of web test automation are:

  • run test on multiple browsers
  • receive rapid feedback
  • documentation of test cases
  • repeatable
  • find defects missed by manual teseting

But manual testing may be a better option if you know the user interface will change considerably.

Download composer

Composer helps you manage dependencies in PHP simular to node’s npm and ruby’s bundler. Run the following in your terminal to get composer.

php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'a52be7b8724e47499b039d53415953cc3d5b459b9d9c0308301f867921c19efc623b81dfef8fc2be194a5cf56945d223') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

After running the above script, it will place a composer.phar file in your current working directory. The .phar extension stands for PHP archive used for bundling entire PHP applications. Lets move the composer.phar so we can use it globally.

mv composer.phar /usr/local/bin/composer

To manage dependencies edit the composer.json file. If you don’t have the file create one in your project directory.

require keyword tells composer which packages our project depends on. Then underneath you specify package and version. The syntax is “package name:version constraints”.

{
    "require-dev": {
        "phpunit/phpunit": "*",
        "facebook/webdriver": "dev-master"
    }
}

We are using a thirdparty binding for Selenium WebDriver provided by Facebook. On your first run, type this to get dependencies

composer install 

This will place a vendor folder in your present working directory with all your dependencies. If you modify composer.json you can use update to grab the latest changes

composer update 

Download selenium server

Go to selenium and download the server

Start running server by typing below and replace # with the version you downloaded.

java -jar selenium-server-standalone-#.jar

The selenium server needs to be started when you run your test code.

Running the webdriver test code

Put the following code in a file called GoogleTest.php in your working directory. This is a simple test scenario for testing the Google search box. The code will launch your browser, navigate to google.com and search for ‘what is composer’ in the Google search box.

<?php
class TestGoogle extends PHPUnit_Framework_TestCase {

    protected $url = 'http://google.com';
    /**
     * @var RemoteWebDriver
     */
    protected $webDriver;

    public function setUp()
    {
        $capabilities = array(WebDriverCapabilityType::BROWSER_NAME => 'firefox');
        $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
    }

    public function tearDown()
    {
        if($this->webDriver){
            $this->webDriver->close();
        }
    }

    public function testSearch()
    {
        $this->webDriver->get($this->url);

        // find search field by its name
        $search = $this->webDriver->findElement(WebDriverBy::name('q'));
        $search->click();

        // typing our search query
        $this->webDriver->getKeyboard()->sendKeys('what is composer');

        // submit our query
        $search->submit();
    }

}
?>

Then in your terminal, type:

vendor/bin/phpunit GoogleTest.php

This will launch the browser specified in the code and run the tests. Make sure you start the selenium server first, otherwise you will get an error.

Further Reading:

Working with PHPUnit and Selenium Webdriver
Facebook php-webdriver binding