Selenium, geautomatiseerd websites testen

Door 29 augustus 2014Tips & Trucs

Ben je bezig met bijvoorbeeld het bestelproces van een website en dien je de hele tijd dezelfde stappen uit te voeren? Product in winkelwagen plaatsen, klantgegevens invullen, enz? Dit automatiseren zou natuurlijk geweldig zijn! Daar is Selenium voor!

Selenium IDE

De makkelijkste manier is om Selenium IDE te gebruiken, dit is een browser plugin voor Firefox waarmee het kinderlijk eenvoudig is om een test te maken. Open Firefox, ga naar de website die je wilt testen, open Selenium IDE en druk op de record knop. Alles wat je vervolgens in de browser doet wordt opgeslagen en door op de play knop te drukken worden deze taken opnieuw uitgevoerd.

Selenium IDE

 

Het nadeel van Selenium IDE is dat het alleen met Firefox werkt en niet overweg kan met Ajax requests. Wil je meer flexibiliteit? Gebruik dan Selenium Server.

Selenium Server

Selenium Server gebruiken en up-and-running krijgen is in vergelijking met Selenium IDE een stuk lastiger. Ik gebruik Google Chrome en programmeer veelal in PHP en dus heb ik voor die combinatie gekozen.

1. Java installeren en configureren

Selenium Server is een Java applicatie en dus is er Java nodig. Download Java mocht je dat nog niet hebben en stel Java in als path environment variable zodat er vanuit de terminal of command prompt toegang is.

2. PHP installeren en configureren

Selenium Server kan middels verschillende talen aangestuurd worden, ik heb gekozen voor PHP. Mocht je nog geen PHP hebben draaien installeer dit dan en stel ook PHP in als path environment variable.

3. Selenium Server en de Google Chrome webdriver downloaden en starten

Download Selenium Server hier. Op die pagina is ook de Google Chrome webdriver te vinden, je komt dan hier uit met de uiteindelijke download hier (versie 2.10, wel even uitpakken). Plaats de 2 gedownloade bestanden (in mijn geval selenium-server-standalone-2.42.2.jar en chromedriver.exe) bij elkaar in een map. Vervolgens kan de server opgestart worden via de terminal of command prompt met:

java -jar selenium-server-standalone-2.42.2.jar -Dwebdriver.chrome.driver=chromedriver.exe

Tip voor terminal of Cygwin gebruikers: zet ” &” (zonder de quotes uiteraard) erachter zodat het proces als achtergrond proces draait.

4. PHP Webdriver downloaden en een eerste test maken

Om te kunnen communiceren met de Selenium Server is de PHP Websdriver nodig. Hier zijn er meerdere van, ik heb gekozen voor die van Adam Goucher omdat deze een implementatie heeft voor WebDriverWait, ofwel een functionaliteit om met Ajax requests overweg te kunnen. Deze versie is gebaseerd op die van Facebook. Open vervolgens je editor en maak een test aan, bijvoorbeeld: “test.php” met als inhoud:

<?php
require_once('php-webdriver-master\PHPWebDriver\__init__.php');
$wd_host = 'http://localhost:4444/wd/hub';
$web_driver = new PHPWebDriver_WebDriver($wd_host);
$session = $web_driver->session('chrome');
$session->window()->maximize();

$session->open('https://royduineveld.nl');

sleep(10);

$session->deleteWindow();
$session->close();

En voer dit script uit via de terminal of command prompt:

php test.php

Vervolgens wordt er een verbinding opgezet met de Selenium Server, Google Chrome geopend, het venster gemaximaliseerd en mijn blog geopend. Na 10 seconden sluit de browser en wordt de sessie beëindigd.

5. Een echte test maken

Alleen de browser en een website openen is niet zoveel natuurlijk. Veel informatie over welke functies er zijn kan je vinden op de readme van de PHP Webdriver. Bijvoorbeeld:

Op een element met een ID klikken:

$session->element('id','elementid')->click();

Op een element met een css selector klikken:

$session->element('css selector','#elementid')->click();

Een specifiek veld met tekst vullen:

$session->element('id','website')->sendKeys("https://royduineveld.nl");

Wachten tot een specifiek veld wijzigt (voor Ajax requests):

$wait = new PHPWebDriver_WebDriverWait($session);
$wait->until( function($session){ return !$session->element('css selector', "#elementid")->attribute('style'); } );

Zet deze functies achter elkaar en je kan gigantisch grote tests maken waarbij vrijwel alles op een website automatisch getest kan worden!

Selenium is dé tool om automatisch te testen!