Jak jednoduše zautomatizovat testování webové stránky – Selenium a Webdriver

Po každé větší změně v projektu, případně rovnou při každém releasu je vhodné otestovat základní funkčnost aplikace. End-to-End testování přímo v prohlížeči je jednou z možností a je s tím podle mě sranda.

End-to-end testing is a methodology used to test whether the flow of an application is performing as designed from start to finish.

https://www.techopedia.com/definition/7035/end-to-end-test

Co budeme potřebovat?

Facebook Webdriver si stáhneme přes composer, Selenium a ChromeDriver si stáhneme klasicky a naše složka bude vypadat takto:

Píšeme test

Založíme soubor test.php, ten může vypadat nějak takto:

<?php

use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\WebDriverDimension;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverExpectedCondition;

require_once 'vendor/autoload.php';

// config
$host = 'http://localhost:4444/wd/hub';
$options = new ChromeOptions();
$options->setExperimentalOption('prefs', ['download.default_directory' => 'c:/temp']);
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);

// create driver and resize window
$driver = RemoteWebDriver::create($host, $capabilities, 5000); 
$driver->manage()->window()->setSize(new WebDriverDimension(1360, 768));

// start testing this URL
$driver->navigate()->to("https://www.skoula.cz/");

// click on some element
$driver->findElement(WebDriverBy::cssSelector('.menu-item-1233 a'))->click();

// check URL if we are there already
$driver->wait(5, 500)->until(
    WebDriverExpectedCondition::urlContains('projekty')
);

// is there some element?
if ($driver->findElements(WebDriverBy::className('entry-title'))) {
    echo "ok";
} else {
    echo "ko";
}

A jak probíhá testování?

  1. Nejprve si spustíme Selenium Server – stačí spustit stažený .jar soubor.
  2. Pak spustíme náš test.php – ať už v prohlížeči nebo přes konzoli.

Jak to vypadá v praxi vidíte na tomto videu. Není zrychlené :)

Celý tento mini projekt si můžete stáhnout zde.

Upgrade CodeIgniteru z verze 2 na 3 – na co si dát pozor?

Dokumentace CodeIgniteru celkem detailně popisuje postup upgradu na této stránce. Kromě inkrementálních upgradů je tam delší článek o upgradu verze 2.2.x na 3.0.x. Vypíchnu sem jen několik věcí, se kterými jsem měl konkrétní problémy:

  • Metody třídy Input, Session a Config v případě neodeslání hodnoty/nenalezení nevrací FALSE jako ve verzi 2, ale nově NULL – dává to větší smysl, ale může být problém, pokud porovnáváte typově a v celém projektu se to dost špatně hledá, je to velká změna.
  • Třídy musí začínat velkým písmenem – může být problém, pokud pracujete na Windows. Git totiž rozlišuje velikosti písmen.
  • Sessions už se neukládají do cookies. Můžete si vybrat, jaký session driver použijete. Nejjednodušší je souborový systém a databáze, my z výkonnostních důvodů použili memcached.
  • V databázovém configu se změnilo dost věcí, ale jedna věc je zásadní – musíte vypnout ‘pconnect’ – persistent connection.
  • Z pravidel třídy Form_validation mizí ‘xss_clean’. XSS by se mělo aplikovat na output, takže ho z validace odstranili.
  • Položka ‘base_url’ v configu nemůže být prázdná. Pokud ji nemůžete nastavit v configu, můžete ji změnit i později v kódu.

Založil jsem nový eshop – Bastlíme

Založil jsem nový minieshop, nebo jak my v ExitShopu říkáme, jednostránkový eshop, tentokrát zaměřený na Arduino a příslušenství – nese jméno Bastlíme.eu.

Pravidelní čtenáři mého blogu si jistě pamatují článek Bluetooth autíčko s Arduinem a jelikož mi zbyla kopa součástek, tak jsem dokoupil další a založil si tento malý eshop. Prodejní kanály jsem omezil čistě na Heuréku a Zboží.

Beru to jako takový test našich jednostránkových eshopů ExitShop, když svůj hlavní eshop TrueHipster jsem založil jako klasický typ. Ten už nějaké objednávky velmi pomaličku sbírá, uvidíme co bude dělat Bastlíme :)