SlideShare a Scribd company logo
1 of 88
Acceptance Testing
with Selenium & PHPUnit
BULGARIA PHP GROUP
Software testing
Подходи при тестване
• White box testing
Това са тестове базирани на вътрешната структура на софтуера. Рарзработчика на този
тип тестове трябва да има програмистки умения. Тези тестове най-често се асоциират с
Unit Test.

• Black box testing
Този тип тестове третират софтуера като черна кутия. Те проверяват функционалността
на софтуера без да познават неговата вътрешна структура.

• Gray box testing
Тестове които се изпълнява на ниво black box обаче използват знания за вътрешната
структура и алгоритми на софтуера. (Нещо като хибриден вариант от горните два
подхода).
Нива на тестване
• Unit testing
Тези тестове са предназначени да верифицират функционалността на определен модул
от кода – най-често функция, клас.

• Integration testing
Този тип тестове целя да верифицират интерфейса между отделните компоненти на
софтуерната система.

• System testing
Провеждат се върху готовата, интегрирана система за да проверят дали тя отговаря на
съответните изисквания. Попадат в групата на black-box тестовете.
Нива на тестване
• Acceptance testing
Тези тестове целят да установят дали системата може да отговори на ежедневните
бизнес изисквания и дали е завършена или готова за бизнес употреба.
Selenium 2.0
Какво е Selenium?
• Selenium 1, 2 – browser automation tool!
Софтуерен framework за предназначен за тестване на web приложения. Той поддържа
пакет от инструменти всеки от които предлага различен подход за автоматизиране на
тестовете.
Създаден е от програмиста Jason Huggins през 2004 г.
Архитектура
• Selenium 2 : WebDriver + Selenium Server
– Обектно ориентирано API посредствеом което можем да контролираме
поведението на браузъра

– Драйвери за голям брой браузъри.

• Selenium 1 – Selenium RC
– Версията преди WebDriver – все още се поддържа за обратна съвместимост.

• Selenium IDE
– Графичен инструметн за създаване на прототипи на тестови скриптове.
Selenium IDE
Selenium IDE
• Какво е Selenium IDE
Selenium IDE (Integrated Development Environment) е графичен инструмент който може
да използвате за създаванена вашите тестове. Той представлява лесен за използване
plugin за Mozila Firefox. Съдържа и контекстно меню което ви дава възможност първо
да селектирате даден елемент от отворената в браузъра страничка и след това да
изберете от него дадена команда, параметрите на която се попълват в зависимост от
контекста.

• Инсталиранe
Selenium IDE
• Интерфейс
– Test Case Pane
•
•
•
•

Table
Source
Log
Reference

Показва резултата
от изпълнението
на скрипта

Показва кратка документация
на текущата команда
Selenium IDE
• Създаване на Test Case
– Записване
Записва действията на потребителя.

– Добавяне на verification, assert с контекстно меню
Понякога нашите тестове трябва да проверят свойства на обекти от страницата. В
този случаи се нуждаем от команди verify, assert.

– Редактиране
Добавяне и редактиране на команди и коментари.
Selenium IDE
• Отваряне, стариране и записване на тестове.
• Базов URL
• Пример: Създаване на потребителски акаунт

- записване на тест;
- редактиране на тест;
- добавяне на команда verify.
Selenium IDE
• Команди
– Actions
Команди които манипулират състоянието на приложението. Повечето actions може
да се извикват и със суфикс: andWait.
Note: Ако даден actiоn пропадне, изпълението на теста се прекратява.

– Accessors
Проверява състоянието на приложението и записва резултата в променлива.
Автоматично генерира assertion. (http://selenium-sipendra.blogspot.com/2011/04/selenium-accessors.html)

– Assertions
Проверяват дали състоянието е такова каквото се очаква. Всички assertion имат три
режима: assert, verify, waitFor.
Selenium IDE
• Синтаксис на командите
Команда и един или два параметъра. Единият обикновено е локатор. А другия текстов
щаблон.

• Локатори
Множество команди изискват “target”. Target – идентифицира елемента. Той се състои
от две части: location strategy, и location. Записва се в долния формат:
locatorType = location

–

by Id

–

by Name

–

by CSS

–

by XPath
WebDriver
WebDriver
•

Selenium WebDriver прави заявки директно към браъзъра като използва browsers native
support for the automation. Това е доста различно от начина по който работи Selenium
RC. Selenium RC работи по един и същи начин с всеки браузър който поддържа. Той
„инджектава“ JavaScript функции, когато браузъра се зареди. И след това използва
тези функции за автоматизация. WebDriver използва съвсем различна техника . Той
управлява браъзъра директно като използва вградената поддръжака за автоматизация
на самия браъзър.
WebDriver
•

WebDriver дава възможност да
изпълнявате вашите тестове на различни
браузъри а не само на Firefox.

•

WebDriver ви дава възможност да
използвате език за програмиране при
създаване на вашите тестове.

•

WebDriver има native поддръжка за Java,
C#, Python, Rubby. За Perl, PHP разчитаме
на third party библиотеки.
Selenium Server
Selenium Server
•

Вие може да се нуждаете или не от selenium server, в зависимост от това как искате да
изпозлвате селениум WebDriver. Ако искате да изпозлвате само WebDriver-API вие не
се нуждаете от сървър. Ако вашите тестове се стартират на същата машина на която и
браузъра – и ползвате само API то, не се нуждаете от сървър, WebDriver ще стартира
браузъра директно.
Selenium Server
Вие се нуждаете от
Selenium Server ако:
•
•
•

използвате SeleniumGrid;
искате да стартирате браузъра
на отдалечена машина;
няма native поддръжка на
езика който ползат.
Selenium, PHP & PHPUnit
Selenium, PHP & PHPUnit
• Selenium & PHP
За съжаление Selenium не поддържа WebDriver API за PHP. За това за да ползваме
Selenium с PHP ние се нуждаем от:
–

Selenium Standalone Server (и тъй като той е написан на Java се нуждаем и от jre.)

–

и разбира се от клиентски PHP Selenium библиотеки, освен ако не искаме да пращаме JSON
съобщения дирекнто а сървъра.
Selenium, PHP & PHPUnit
• Клиентски библиотеки
– PHPUnit_Selenium
– Facebook’s php-webdriver
– php-webdriver-bindings
– WebDriver-PHP
PHPUnit Selenium
PHPUnit_Extensions_SeleniumTestCase
PHPUnit_Extensions_SeleniumTestCase
• Описание
Реализира Selenium RC API – Selenium 1. Поддържа client/server протокола
посредством който скрипта комуникира със Selenium Server. Освен това
поддържа специализирани assertion методи.
PHPUnit_Extensions_Selenium2TestCase
PHPUnit_Extensions_Selenium2TestCase
• Описание
Този клас ни дава възможност да използваме WebDriver API (което обаче за
съжаление е частично реализирано).

• Изисквания
– PHPUnit

– curl
– Selenium Extension
– Selenium Server (+jre)
PHPUnit_Extensions_Selenium2TestCase
• Инсталиране
– PHPUnit_Selenium
pear channel-discover pear.phpunit.de
pear install pear.phpunit.de/PHPUnit_Selenium

– Selenium Server
Изтегляме jar файла от долната страничка:
http://docs.seleniumhq.org/download/
и го стартираме преди да пуснем тестовете:

java –jar selenium-server-standalone-2.39.0.jar
PHPUnit_Extensions_Selenium2TestCase
• използване
class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
protected function setUp()
{
// конфигурация – този метод е задължителен.
}
public function testTitle()
{
// тестове
}
}
?>
PHPUnit_Extensions_Selenium2TestCase
• Метод setUp()
– setBrowser(string $browser)
Задава браузъра който да бъде използван от Selenium Server.

– setBrowserUrl(string $browserUrl)
Задава базовият URL.
– setHost(string $host)
Задава хоста на който се намира Selenium Server.
PHPUnit_Extensions_Selenium2TestCase
– setPort(int $port)
Задава порта на който отговаря сървъра.

– setTimeout(int $timeout)
Задава timeout при свързване със сървъра.
– setSleep(int $second)
Задава интервала на изчакване между изпращането на action команди.
PHPUnit_Extensions_Selenium2TestCase
• Locators
– byId($id)
Намира елемента на базата на неговот id.

– byName($name)
Намира елемента на базта на неговото име.

– byCssSelector($cssSelector)
Намира елемента на базта на невогия css selector.
PHPUnit_Extensions_Selenium2TestCase
– byClassName($className)
Намира елемента на базата на името на неговия клас.

– byXPath($id)
Намира елемента използвайки XPath.

– byLinkText($id)
Текста съдържащ се в линка.
PHPUnit_Extensions_Selenium2TestCase
• PHPUnit_Extensions_Selenium2TestCase_Element
Всеки един от гореизброените локатори връща обект от горния клас, който
има следните методи:
– atribute($name)
Връща атрибута на елемента.
– clear()
Изтрива съдържанието на form element.
– click()
Кликва върху елемента.
PHPUnit_Extensions_Selenium2TestCase
– css($propertyName)
Връща съответното CSS свойстов.

– equals()
Проверява дали два елемента са еднакви.

– location()
Връща масив с x, y позицията на елемента.

– selected()
Проверява състонието на опция или друг елемент на форма.
PHPUnit_Extensions_Selenium2TestCase
•

size()
Връща масив с x, y позицията на елемента.

•

submit()
Събмитва форма.

•

value($newValue = null)
Връща или задава стойност на даден елемент. Ако той вече има стойност новата се
добавя към старата.

•

text()
Връща съдържанието на елемента.
Примери: Верификация на линковете от горната лява част на сайта
на базата на тяхното id (метод: byId()).
Проверяваме:
- дали присъстват на всяка една от трите странички
- дали съдържат верните текстове
- дали съдържат верните линкове
Пример: тестваме размера на логото.
Изплзваме: локатор – byClassName().

Очакваме
Размера да е 80x80.
Пример: Тестваме позицията на трите изображения от индексната
страница.
Използваме: локатор byCssSelector().
Очакваме: ... картинката на следващата страница.
PHPUnit_Extensions_Selenium2TestCase
• Actions
– url($url = null)
Отваря страницата с указания url. Ако няма url – връща текущя.

– title()
Връща заглавието на текущата страница.

– clickOnElement($id)
Кликва върху елемента с указаното id.
– moveto($element)
Премества маркера на мишката върху указания елемент..
– click($button = 0)
Кликва върху позицията на която сме преместили маркера с moveto.
Пример: Искаме да проверим дали линковете от тулбара работят.
Използваме:
- метода click() на върнатия от локарора елемент;
- също така $this->moveto(), $this->click().
PHPUnit_Extensions_Selenium2TestCase
– keys($keys)
Изпраща поредица от клавиши.

– select($element)
Като параметър получава обект от тип:
PHPUnit_Extensions_Selenium2TestCase_Elemen
и връща обект от тип:
PHPUnit_Extensions_Selenium2TestCase_Select.
PHPUnit_Extensions_Selenium2TestCase_Select
• PHPUnit_Extensions_Selenium2TestCase_Select
– selectedLabel()
Връща текущо избрания лейбъл на обекта.

– selectedValue()
Връща текущо избраната стойност на обекта.
– selectOptionByLabel($string)
Селектира опцията с указания лейбъл.
– selectOptionByValue($string)
Селектира опцията с указаната стойност.
Пример: Попълване и събмитване на форма.
Очакваме :
1. Събмитването да мине успешно и да бъдем препратени на долния url:
http://selenium.bulgariaphp.com/signup.php
2. Страничката на която сме препратени да съдържа текста:
Sussessful Signup. Please, check your email.
3. Данните които сме въвели да се запишат в базата данни.
Пример: Въвеждаме потребител с име което съвпада с вече въведено такова.

Очакваме:

- да останем на същата страница;
- да видим съобщението за дублиращото се име;
- във формата да се запазят всички въведени от потребителя данни.
PHPUnit_Extensions_Selenium2TestCase
– acceptAlert()
Щраква OK върху alert или confirmation box.

– dismissAlert()
Щраква върху cancel при confirmation box, или не натиска OK при alert.

– alertTesxt()
Връща текста от текущия alert.
Пример: Alerts – Имаме контролен панел посредством който трием
потребители, щраквайки върху техните потребителски имена. При щракване
върху дадено име се отваря alert. Като потвърдим – потребителя се трие.

Ако щракнем на cancel – не се случва нищо.

Искаме да се уверми:

- че пренасочва към правилната стграница;
- на нея излиза съобщение че потребителя е изтрит;
- требителя го няма в базата данни.
PHPUnit_Extensions_Selenium2TestCase
– timeout()
Връща обект от тип PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts.

•

PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts
– implicitWait($time)
Задава времето на изчакване при търсене на даден обект.
Пример: Тестване за наличието на елемент който се зарежда от Ajax.
Очакваме:
- да намерим зареждания от Ajax обект, на страничката.
PHPUnit_Extensions_Selenium2TestCase
• Мобилни устройства
– orientation
– touch

• Ако елемента не бъде намерен?
– PHPUnit_Extensions_Selenium2TestCase_WebDriverException
PHPUnit_Extensions_Selenium2TestCase
• Assertion
– assertFalse()
– assertTrue();
– assertContains();
– assertEquals()
Facebook’s php-webdriver
Selenium GRID
Selenium GRID
• Какво е Selenium GRID?
Selenium GRID ни дава възможност да стартираме паралелно множество тестове на
различни машини с различни операционни системи и различни браузъри. Най-общо
казано има две причини поради които да ползваме Selenium GRID:
–
–

•

искаме да стартираме нашите тестове на ралзични браузъри или различни верси на един и
същи браузър;
да редуцираме времето за изпълнение на пакета от тестове.

GRID
Състои се от един hub и един или повече nodes. И двете се реализират посредством:
selenium-standalone-server.jar.
Selenium GRID
• Как работи?
Selenium HUB получава скрипта с информация за това на коя платформа трябва да го
стартира. HUB-ът „познава“ конфигурацията на всеки регистриран note. На базата на
тази информация той избира node с указаната комбинация платформа-браузър.

• Инсталиране
Инсталирането е просто. Изтеглете Selenium Server jar файла от долния линк и го
запишете на всички nodes и на сървъра.
http://docs.seleniumhq.org/download/
Selenium GRID
• Стартиране
– HUB
java -jar selenium-server-standalone-2.21.0.jar -role hub

– Node
java -jar selenium-server-standalone-2.21.0.jar -role node -hub http://<hub hostname>
:4444/grid/register
Selenium GRID
Пример: Конфигуриране на Selenium GRID: hub, nodes.
Стартиране на тестове – последователно.
HUB

NODE1

NODE

CentOS

OS X

Solaris
Пример: Selenium GRID: Стартиране на тестове – паралелно.
Благодаря за вниманието

More Related Content

Similar to Acceptance testing with Selenium 2 and PHPUnit

Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with JenkinsBorislav Traykov
 
JBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesJBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesSvetlin Nakov
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Codeception test & Yii 2
Codeception test & Yii 2Codeception test & Yii 2
Codeception test & Yii 2Tihomil Kulev
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...DAVID Academy
 
Svetlin Nakov - Configuration Management
Svetlin Nakov - Configuration ManagementSvetlin Nakov - Configuration Management
Svetlin Nakov - Configuration ManagementSvetlin Nakov
 
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Yosifov
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov
 
Adaptive design with Fe Framework (Bulgarian version)
Adaptive design with Fe Framework (Bulgarian version)Adaptive design with Fe Framework (Bulgarian version)
Adaptive design with Fe Framework (Bulgarian version)Peter Naydenov
 
Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi FrameworkAtelier for robotics
 
причини за автоматизация на тестването
причини за автоматизация на тестванетопричини за автоматизация на тестването
причини за автоматизация на тестванетоEvgeni Tsonev
 

Similar to Acceptance testing with Selenium 2 and PHPUnit (20)

Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins
 
JBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesJBuilder 4.0 - New Features
JBuilder 4.0 - New Features
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Codeception test & Yii 2
Codeception test & Yii 2Codeception test & Yii 2
Codeception test & Yii 2
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
 
e-School Beta
e-School Betae-School Beta
e-School Beta
 
SVN
SVNSVN
SVN
 
Module1
Module1Module1
Module1
 
Svetlin Nakov - Configuration Management
Svetlin Nakov - Configuration ManagementSvetlin Nakov - Configuration Management
Svetlin Nakov - Configuration Management
 
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 
DrupalCamp Sofia 2015
DrupalCamp Sofia 2015DrupalCamp Sofia 2015
DrupalCamp Sofia 2015
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework Overview
 
Adaptive design with Fe Framework (Bulgarian version)
Adaptive design with Fe Framework (Bulgarian version)Adaptive design with Fe Framework (Bulgarian version)
Adaptive design with Fe Framework (Bulgarian version)
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi Framework
 
Webloz2011
Webloz2011Webloz2011
Webloz2011
 
причини за автоматизация на тестването
причини за автоматизация на тестванетопричини за автоматизация на тестването
причини за автоматизация на тестването
 

Acceptance testing with Selenium 2 and PHPUnit

  • 1. Acceptance Testing with Selenium & PHPUnit BULGARIA PHP GROUP
  • 3. Подходи при тестване • White box testing Това са тестове базирани на вътрешната структура на софтуера. Рарзработчика на този тип тестове трябва да има програмистки умения. Тези тестове най-често се асоциират с Unit Test. • Black box testing Този тип тестове третират софтуера като черна кутия. Те проверяват функционалността на софтуера без да познават неговата вътрешна структура. • Gray box testing Тестове които се изпълнява на ниво black box обаче използват знания за вътрешната структура и алгоритми на софтуера. (Нещо като хибриден вариант от горните два подхода).
  • 4. Нива на тестване • Unit testing Тези тестове са предназначени да верифицират функционалността на определен модул от кода – най-често функция, клас. • Integration testing Този тип тестове целя да верифицират интерфейса между отделните компоненти на софтуерната система. • System testing Провеждат се върху готовата, интегрирана система за да проверят дали тя отговаря на съответните изисквания. Попадат в групата на black-box тестовете.
  • 5. Нива на тестване • Acceptance testing Тези тестове целят да установят дали системата може да отговори на ежедневните бизнес изисквания и дали е завършена или готова за бизнес употреба.
  • 7. Какво е Selenium? • Selenium 1, 2 – browser automation tool! Софтуерен framework за предназначен за тестване на web приложения. Той поддържа пакет от инструменти всеки от които предлага различен подход за автоматизиране на тестовете. Създаден е от програмиста Jason Huggins през 2004 г.
  • 8. Архитектура • Selenium 2 : WebDriver + Selenium Server – Обектно ориентирано API посредствеом което можем да контролираме поведението на браузъра – Драйвери за голям брой браузъри. • Selenium 1 – Selenium RC – Версията преди WebDriver – все още се поддържа за обратна съвместимост. • Selenium IDE – Графичен инструметн за създаване на прототипи на тестови скриптове.
  • 10. Selenium IDE • Какво е Selenium IDE Selenium IDE (Integrated Development Environment) е графичен инструмент който може да използвате за създаванена вашите тестове. Той представлява лесен за използване plugin за Mozila Firefox. Съдържа и контекстно меню което ви дава възможност първо да селектирате даден елемент от отворената в браузъра страничка и след това да изберете от него дадена команда, параметрите на която се попълват в зависимост от контекста. • Инсталиранe
  • 11. Selenium IDE • Интерфейс – Test Case Pane • • • • Table Source Log Reference Показва резултата от изпълнението на скрипта Показва кратка документация на текущата команда
  • 12. Selenium IDE • Създаване на Test Case – Записване Записва действията на потребителя. – Добавяне на verification, assert с контекстно меню Понякога нашите тестове трябва да проверят свойства на обекти от страницата. В този случаи се нуждаем от команди verify, assert. – Редактиране Добавяне и редактиране на команди и коментари.
  • 13. Selenium IDE • Отваряне, стариране и записване на тестове. • Базов URL
  • 14. • Пример: Създаване на потребителски акаунт - записване на тест; - редактиране на тест; - добавяне на команда verify.
  • 15. Selenium IDE • Команди – Actions Команди които манипулират състоянието на приложението. Повечето actions може да се извикват и със суфикс: andWait. Note: Ако даден actiоn пропадне, изпълението на теста се прекратява. – Accessors Проверява състоянието на приложението и записва резултата в променлива. Автоматично генерира assertion. (http://selenium-sipendra.blogspot.com/2011/04/selenium-accessors.html) – Assertions Проверяват дали състоянието е такова каквото се очаква. Всички assertion имат три режима: assert, verify, waitFor.
  • 16. Selenium IDE • Синтаксис на командите Команда и един или два параметъра. Единият обикновено е локатор. А другия текстов щаблон. • Локатори Множество команди изискват “target”. Target – идентифицира елемента. Той се състои от две части: location strategy, и location. Записва се в долния формат: locatorType = location – by Id – by Name – by CSS – by XPath
  • 18. WebDriver • Selenium WebDriver прави заявки директно към браъзъра като използва browsers native support for the automation. Това е доста различно от начина по който работи Selenium RC. Selenium RC работи по един и същи начин с всеки браузър който поддържа. Той „инджектава“ JavaScript функции, когато браузъра се зареди. И след това използва тези функции за автоматизация. WebDriver използва съвсем различна техника . Той управлява браъзъра директно като използва вградената поддръжака за автоматизация на самия браъзър.
  • 19. WebDriver • WebDriver дава възможност да изпълнявате вашите тестове на различни браузъри а не само на Firefox. • WebDriver ви дава възможност да използвате език за програмиране при създаване на вашите тестове. • WebDriver има native поддръжка за Java, C#, Python, Rubby. За Perl, PHP разчитаме на third party библиотеки.
  • 21. Selenium Server • Вие може да се нуждаете или не от selenium server, в зависимост от това как искате да изпозлвате селениум WebDriver. Ако искате да изпозлвате само WebDriver-API вие не се нуждаете от сървър. Ако вашите тестове се стартират на същата машина на която и браузъра – и ползвате само API то, не се нуждаете от сървър, WebDriver ще стартира браузъра директно.
  • 22. Selenium Server Вие се нуждаете от Selenium Server ако: • • • използвате SeleniumGrid; искате да стартирате браузъра на отдалечена машина; няма native поддръжка на езика който ползат.
  • 23. Selenium, PHP & PHPUnit
  • 24. Selenium, PHP & PHPUnit • Selenium & PHP За съжаление Selenium не поддържа WebDriver API за PHP. За това за да ползваме Selenium с PHP ние се нуждаем от: – Selenium Standalone Server (и тъй като той е написан на Java се нуждаем и от jre.) – и разбира се от клиентски PHP Selenium библиотеки, освен ако не искаме да пращаме JSON съобщения дирекнто а сървъра.
  • 25. Selenium, PHP & PHPUnit • Клиентски библиотеки – PHPUnit_Selenium – Facebook’s php-webdriver – php-webdriver-bindings – WebDriver-PHP
  • 28. PHPUnit_Extensions_SeleniumTestCase • Описание Реализира Selenium RC API – Selenium 1. Поддържа client/server протокола посредством който скрипта комуникира със Selenium Server. Освен това поддържа специализирани assertion методи.
  • 30. PHPUnit_Extensions_Selenium2TestCase • Описание Този клас ни дава възможност да използваме WebDriver API (което обаче за съжаление е частично реализирано). • Изисквания – PHPUnit – curl – Selenium Extension – Selenium Server (+jre)
  • 31. PHPUnit_Extensions_Selenium2TestCase • Инсталиране – PHPUnit_Selenium pear channel-discover pear.phpunit.de pear install pear.phpunit.de/PHPUnit_Selenium – Selenium Server Изтегляме jar файла от долната страничка: http://docs.seleniumhq.org/download/ и го стартираме преди да пуснем тестовете: java –jar selenium-server-standalone-2.39.0.jar
  • 32. PHPUnit_Extensions_Selenium2TestCase • използване class WebTest extends PHPUnit_Extensions_Selenium2TestCase { protected function setUp() { // конфигурация – този метод е задължителен. } public function testTitle() { // тестове } } ?>
  • 33. PHPUnit_Extensions_Selenium2TestCase • Метод setUp() – setBrowser(string $browser) Задава браузъра който да бъде използван от Selenium Server. – setBrowserUrl(string $browserUrl) Задава базовият URL. – setHost(string $host) Задава хоста на който се намира Selenium Server.
  • 34. PHPUnit_Extensions_Selenium2TestCase – setPort(int $port) Задава порта на който отговаря сървъра. – setTimeout(int $timeout) Задава timeout при свързване със сървъра. – setSleep(int $second) Задава интервала на изчакване между изпращането на action команди.
  • 35. PHPUnit_Extensions_Selenium2TestCase • Locators – byId($id) Намира елемента на базата на неговот id. – byName($name) Намира елемента на базта на неговото име. – byCssSelector($cssSelector) Намира елемента на базта на невогия css selector.
  • 36. PHPUnit_Extensions_Selenium2TestCase – byClassName($className) Намира елемента на базата на името на неговия клас. – byXPath($id) Намира елемента използвайки XPath. – byLinkText($id) Текста съдържащ се в линка.
  • 37. PHPUnit_Extensions_Selenium2TestCase • PHPUnit_Extensions_Selenium2TestCase_Element Всеки един от гореизброените локатори връща обект от горния клас, който има следните методи: – atribute($name) Връща атрибута на елемента. – clear() Изтрива съдържанието на form element. – click() Кликва върху елемента.
  • 38. PHPUnit_Extensions_Selenium2TestCase – css($propertyName) Връща съответното CSS свойстов. – equals() Проверява дали два елемента са еднакви. – location() Връща масив с x, y позицията на елемента. – selected() Проверява състонието на опция или друг елемент на форма.
  • 39. PHPUnit_Extensions_Selenium2TestCase • size() Връща масив с x, y позицията на елемента. • submit() Събмитва форма. • value($newValue = null) Връща или задава стойност на даден елемент. Ако той вече има стойност новата се добавя към старата. • text() Връща съдържанието на елемента.
  • 40. Примери: Верификация на линковете от горната лява част на сайта на базата на тяхното id (метод: byId()). Проверяваме: - дали присъстват на всяка една от трите странички - дали съдържат верните текстове - дали съдържат верните линкове
  • 41.
  • 42.
  • 43.
  • 44. Пример: тестваме размера на логото. Изплзваме: локатор – byClassName(). Очакваме Размера да е 80x80.
  • 45.
  • 46.
  • 47.
  • 48. Пример: Тестваме позицията на трите изображения от индексната страница. Използваме: локатор byCssSelector(). Очакваме: ... картинката на следващата страница.
  • 49.
  • 50.
  • 51.
  • 52. PHPUnit_Extensions_Selenium2TestCase • Actions – url($url = null) Отваря страницата с указания url. Ако няма url – връща текущя. – title() Връща заглавието на текущата страница. – clickOnElement($id) Кликва върху елемента с указаното id. – moveto($element) Премества маркера на мишката върху указания елемент.. – click($button = 0) Кликва върху позицията на която сме преместили маркера с moveto.
  • 53. Пример: Искаме да проверим дали линковете от тулбара работят. Използваме: - метода click() на върнатия от локарора елемент; - също така $this->moveto(), $this->click().
  • 54.
  • 55. PHPUnit_Extensions_Selenium2TestCase – keys($keys) Изпраща поредица от клавиши. – select($element) Като параметър получава обект от тип: PHPUnit_Extensions_Selenium2TestCase_Elemen и връща обект от тип: PHPUnit_Extensions_Selenium2TestCase_Select.
  • 56. PHPUnit_Extensions_Selenium2TestCase_Select • PHPUnit_Extensions_Selenium2TestCase_Select – selectedLabel() Връща текущо избрания лейбъл на обекта. – selectedValue() Връща текущо избраната стойност на обекта. – selectOptionByLabel($string) Селектира опцията с указания лейбъл. – selectOptionByValue($string) Селектира опцията с указаната стойност.
  • 57. Пример: Попълване и събмитване на форма. Очакваме : 1. Събмитването да мине успешно и да бъдем препратени на долния url: http://selenium.bulgariaphp.com/signup.php 2. Страничката на която сме препратени да съдържа текста: Sussessful Signup. Please, check your email. 3. Данните които сме въвели да се запишат в базата данни.
  • 58.
  • 59.
  • 60.
  • 61. Пример: Въвеждаме потребител с име което съвпада с вече въведено такова. Очакваме: - да останем на същата страница; - да видим съобщението за дублиращото се име; - във формата да се запазят всички въведени от потребителя данни.
  • 62.
  • 63.
  • 64. PHPUnit_Extensions_Selenium2TestCase – acceptAlert() Щраква OK върху alert или confirmation box. – dismissAlert() Щраква върху cancel при confirmation box, или не натиска OK при alert. – alertTesxt() Връща текста от текущия alert.
  • 65. Пример: Alerts – Имаме контролен панел посредством който трием потребители, щраквайки върху техните потребителски имена. При щракване върху дадено име се отваря alert. Като потвърдим – потребителя се трие. Ако щракнем на cancel – не се случва нищо. Искаме да се уверми: - че пренасочва към правилната стграница; - на нея излиза съобщение че потребителя е изтрит; - требителя го няма в базата данни.
  • 66.
  • 67.
  • 68. PHPUnit_Extensions_Selenium2TestCase – timeout() Връща обект от тип PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts. • PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts – implicitWait($time) Задава времето на изчакване при търсене на даден обект.
  • 69. Пример: Тестване за наличието на елемент който се зарежда от Ajax. Очакваме: - да намерим зареждания от Ajax обект, на страничката.
  • 70.
  • 71.
  • 72.
  • 73. PHPUnit_Extensions_Selenium2TestCase • Мобилни устройства – orientation – touch • Ако елемента не бъде намерен? – PHPUnit_Extensions_Selenium2TestCase_WebDriverException
  • 74. PHPUnit_Extensions_Selenium2TestCase • Assertion – assertFalse() – assertTrue(); – assertContains(); – assertEquals()
  • 76.
  • 77.
  • 79. Selenium GRID • Какво е Selenium GRID? Selenium GRID ни дава възможност да стартираме паралелно множество тестове на различни машини с различни операционни системи и различни браузъри. Най-общо казано има две причини поради които да ползваме Selenium GRID: – – • искаме да стартираме нашите тестове на ралзични браузъри или различни верси на един и същи браузър; да редуцираме времето за изпълнение на пакета от тестове. GRID Състои се от един hub и един или повече nodes. И двете се реализират посредством: selenium-standalone-server.jar.
  • 80. Selenium GRID • Как работи? Selenium HUB получава скрипта с информация за това на коя платформа трябва да го стартира. HUB-ът „познава“ конфигурацията на всеки регистриран note. На базата на тази информация той избира node с указаната комбинация платформа-браузър. • Инсталиране Инсталирането е просто. Изтеглете Selenium Server jar файла от долния линк и го запишете на всички nodes и на сървъра. http://docs.seleniumhq.org/download/
  • 81. Selenium GRID • Стартиране – HUB java -jar selenium-server-standalone-2.21.0.jar -role hub – Node java -jar selenium-server-standalone-2.21.0.jar -role node -hub http://<hub hostname> :4444/grid/register
  • 83. Пример: Конфигуриране на Selenium GRID: hub, nodes. Стартиране на тестове – последователно.
  • 85.
  • 86. Пример: Selenium GRID: Стартиране на тестове – паралелно.
  • 87.