SlideShare a Scribd company logo
Selenium and PHP By  Alexander Manuhin , QA Manager  Adyax  Новая жизнь  WebDriver  и  PHP . Путь от разработки фреймворка до организации производственного процесса.
40 big websites in 2011 www.adyax.com
PHP+WebDriver второе    дыхание
PHP  в качестве  binding  для  WebDriver  ?
Что необходимо для реализации     PHP binding  ? Object model TestSuit Protocol
Json Wire Protocol  как это работает ? Json Wire Protocol -  JSON через HTTP Запрос Ответ PHP JsonWire Protocol Selenium Server Browser Browser PHP JsonWire Protocol Selenium Server
Что необходимо для реализации     PHP binding  ? Object model TestSuit JsonWireProtocol
Test Suit  зачем оно нужно, что  выбрать ? PHPUnit (PEAR) PHP Simpletests PHPUnit Project PHPUnit 1.0.0
Что необходимо для реализации     PHP binding  ? Object model PHPUnit (PEAR) JsonWireProtocol
PHP Object model  простановка задачи. Постановка задачи: a.  Разбор JsonWireProtocol; b.  Реализация PHP объектной модели; c.  Интеграция полученной модели с  PHPUnit;
Json Wire Protocol  разбор команды   ELEMENT POST /session/:sessionId/element URL Parameters: :sessionId  - ID сесии JSON Parameters: using - {string}  в данном конкретном случае это локатор, СТРАТЕГИЯ локатора. value - {string}  значение локатора.
Returns: {ELEMENT:string}  JSON сущность, локализующий элемент. Potential Errors: NoSuchElement  - Если элемент не был найден. XPathLookupError  - Если в качестве СТРАТЕГИИ локатора был задан не верный XPath . Json Wire Protocol  разбор команды   ELEMENT
Json Wire Protocol –  прикладной пример  исходные данные
Json Wire Protocol –  прикладной пример  формирование запроса  S E L E N I U M http_type:  POST url:  http://localhost:4444/wd/hub/session/1232412/element {  " using ":" id ",  " value ":" edit-submit " } Array ( [ using ] =>  id [ value ] =>  edit-submit ) json
HTTP/1.1 200 OK Date: Sun, 05 Feb 2012 22:06:28 GMT Server: Jetty/5.1.x (Linux/2.6.32-38-generic i386 java/1.6.0_20 Content-Length: 138 Content-Type: application/json;charset=UTF-8 {"status":0,"sessionId":"1328478524467","value":{"ELEMENT":"2"}, "class":"org.openqa.selenium.remote.Response","hCode":5604828} Json Wire Protocol –  прикладной пример  получение  ответа  S E L E N I U M
Array ( [ header ] => HTTP/1.1 200 OK Date: Sun, 05 Feb 2012 22:06:28 GMT Server: Jetty/5.1.x (Linux/2.6.32-38-generic i386 java/1.6.0_20 Content-Length: 138 Content-Type: application/json;charset=UTF-8 [ body ] => {" status ": 0 ," sessionId ":" 1328478524467 ", " value ":{" ELEMENT ":" 2 "},"class":"org.openqa.selenium.remote.Response", "hCode":5604828} ) json_decode Json Wire Protocol –  прикладной пример  разбор  ответа
Element  Object ( [ driver:Element:private ] => Driver  Object ( [ session_id:protected ] =>  1328478524467 [ server_url:protected ] =>  http://localhost:4444/wd/hub [ browser:protected ] =>  firefox ) [ element_id:Element:private ] =>  2 [ locator:Element:private ] =>  id=edit-submit ) Json Wire Protocol –  прикладной пример  разбор  ответа  ??????
Json Wire Protocol  весь цикл.
Реализация  PHP  объектной модели
Реализация  PHP  объектной модели . Оформирование  Json  из  ObjectPHP public function  execute( $http_type ,  $relative_url ,  $payload  = null )  { ... $response  = WebDriver:: Curl ( $http_type ,  $full_url ,  $payload ); ... return  $response ; }
Реализация  PHP  объектной модели . Работа c  Element public function  __construct( $driver ,  $element_id ,  $locator ) { $this-> driver  =  $driver ; } private function  execute( $driver ,  $element_id ,  $locator ) { return  $this-> driver ->execute( $http_type ,  $relative_url ,  $payload = null ); } public function  click() { $this->execute(" POST ", " /click "); }
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit  интеграция class  myTest  extends  PHPUnit_Framework_TestCase {  public function  setUp() { } public function  test() { } public function  tearDown() { } }
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit  интеграция class  myTest  extends  PHPUnit_Framework_TestCase   {   protected  $ driver ; public  function setUp() { $this -> driver  = Driver:: InitAtHost (' 4444 ', ' firefox '); }   public function   __call( $name ,  $arguments )   { ... return  call_user_func_array( array ( $this -> driver ,   $name ),   $arguments ); ... } }
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit  интеграция,  ASSERT class  Element   { ... public function  assert_string_present( $expected_string ) { $page_text   =   $this ->get_text(); PHPUnit_Framework_Assert:: assertContains ( $expected_string , $page_text , " Failed asserting ... "); } }
Реализация  PHP  объектной модели .
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit , запуск  СБОРКИ <phpunit   stopOnFailure =&quot; false &quot;  colors =&quot; false &quot; > <testsuites> <testsuite name=&quot;change user status&quot;> <file> pixwoo/functionalTestNew.php </file> <file> pixwoo/functionalTestPublic.php </file> <file> pixwoo/functionalTestProfile.php </file>   </testsuite> </testsuites> </phpunit>
Реализация   JavaScript  инъекции   find, click, move, … зачем ?
Реализация   JavaScript  инъекции   find, click, move, … зачем ? $this ->execute(&quot; POST &quot;, &quot; /session/:sessionId/execute_async &quot;,  array ( &quot; script &quot; =>  $javascript , &quot; args &quot; =>  $arguments , )); $javascript  = &quot;var  callback  = arguments[arguments.length-1];  function  clickElement( handler ){  $( handler ).click(); }  $(document).ready(function(){    clickElement( ... jQuery Selector ... );   callback(\&quot;done\&quot;); });&quot;; Асинхронный вызов JS Примерная реализация
На один шаг ближе к автоматизации. developers testers Version control systems  Git, SVN, ... build servers Jenkins 1 3 2 4 5 6 7 8 9 Bug parser (redmine API)
40 big websites in 2011 www.adyax.com

More Related Content

PPTX
Selenium vs AJAX
PPTX
Типичные ошибки начинающих писать тесты на WebDriver
PPTX
Selenium, а давай подождем?
PPTX
Selenium: начало работы
PPTX
XPath локаторы в Selenium WebDriver
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PDF
Контроль качества верстки или как начать делать Makeup
PDF
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Selenium vs AJAX
Типичные ошибки начинающих писать тесты на WebDriver
Selenium, а давай подождем?
Selenium: начало работы
XPath локаторы в Selenium WebDriver
Автоматизация UI тестирования под Windows и Windows Phone
Контроль качества верстки или как начать делать Makeup
Микросервисы для автоматизации тестирования - опыт "Одноклассников"

What's hot (19)

PPT
Опыт тестирования API САПР платформы
PDF
Component Inspector
PDF
Инструментируй это
PPTX
Автоматизация и Selenium IDE
PDF
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
PDF
Изоморфные приложения и Python - Виталий Глибин, Huntflow
PDF
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
PPTX
Оценка качества автотестов
PDF
Автоматизация функционального тестирования REST API
PDF
Полуавтоматизация third-party API
PPT
Easy authcache 2 кеширование для pro родионов игорь
PDF
JPoint 2016 - Etudes of DIY Java profiler
PDF
JavaScript Базовый. Занятие 02.
PPT
Модульное тестирование iOS-приложений.
PPTX
автоматизация тестирования с помощью Selenium
PPTX
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
PPTX
Silverlight 4, есть ли жизнь на десктопе?
PDF
Joker 2016 - Bytecode 101
PDF
Реактивный двигатель вашего Android приложения
Опыт тестирования API САПР платформы
Component Inspector
Инструментируй это
Автоматизация и Selenium IDE
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
Изоморфные приложения и Python - Виталий Глибин, Huntflow
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
Оценка качества автотестов
Автоматизация функционального тестирования REST API
Полуавтоматизация third-party API
Easy authcache 2 кеширование для pro родионов игорь
JPoint 2016 - Etudes of DIY Java profiler
JavaScript Базовый. Занятие 02.
Модульное тестирование iOS-приложений.
автоматизация тестирования с помощью Selenium
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
Silverlight 4, есть ли жизнь на десктопе?
Joker 2016 - Bytecode 101
Реактивный двигатель вашего Android приложения
Ad

Similar to Alexander manuhin selenium_php_v2.0 (20)

PPT
Js Http Request дмитрий котеров
PPT
Введение в Django
PPT
Selenium 2.0: обзор новых возможностей
PPT
The Best Portlet
ODP
ZFConf 2010: Zend Framework and Doctrine
PPTX
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
PPT
Rich UI on Dojo Toolkit and Zend Framework
PDF
The Old New ASP.NET
PDF
Jsfwdays 2013-2
PPT
Эффективное программирование на NodeJS
PDF
Чуть сложнее чем Singleton: аннотации, IOC, АОП
PPTX
Микрофреймворки PHP
PPT
Node.JS: возможности для РНР-разработчика
PDF
Mihail davidov js-ajax
PPTX
JavaScript как объектно-ориентированный язык программирования
PPTX
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
PDF
Devcamp nodejs-2010
ODP
Saint Perl 2009: CGI::Ajax demo
PPT
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
PDF
Михаил Давыдов — Транспорт, Ajax
Js Http Request дмитрий котеров
Введение в Django
Selenium 2.0: обзор новых возможностей
The Best Portlet
ZFConf 2010: Zend Framework and Doctrine
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Rich UI on Dojo Toolkit and Zend Framework
The Old New ASP.NET
Jsfwdays 2013-2
Эффективное программирование на NodeJS
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Микрофреймворки PHP
Node.JS: возможности для РНР-разработчика
Mihail davidov js-ajax
JavaScript как объектно-ориентированный язык программирования
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Devcamp nodejs-2010
Saint Perl 2009: CGI::Ajax demo
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Михаил Давыдов — Транспорт, Ajax
Ad

Alexander manuhin selenium_php_v2.0

  • 1. Selenium and PHP By Alexander Manuhin , QA Manager Adyax Новая жизнь WebDriver и PHP . Путь от разработки фреймворка до организации производственного процесса.
  • 2. 40 big websites in 2011 www.adyax.com
  • 3. PHP+WebDriver второе дыхание
  • 4. PHP в качестве binding для WebDriver ?
  • 5. Что необходимо для реализации PHP binding ? Object model TestSuit Protocol
  • 6. Json Wire Protocol как это работает ? Json Wire Protocol - JSON через HTTP Запрос Ответ PHP JsonWire Protocol Selenium Server Browser Browser PHP JsonWire Protocol Selenium Server
  • 7. Что необходимо для реализации PHP binding ? Object model TestSuit JsonWireProtocol
  • 8. Test Suit зачем оно нужно, что выбрать ? PHPUnit (PEAR) PHP Simpletests PHPUnit Project PHPUnit 1.0.0
  • 9. Что необходимо для реализации PHP binding ? Object model PHPUnit (PEAR) JsonWireProtocol
  • 10. PHP Object model простановка задачи. Постановка задачи: a. Разбор JsonWireProtocol; b. Реализация PHP объектной модели; c. Интеграция полученной модели с PHPUnit;
  • 11. Json Wire Protocol разбор команды ELEMENT POST /session/:sessionId/element URL Parameters: :sessionId - ID сесии JSON Parameters: using - {string} в данном конкретном случае это локатор, СТРАТЕГИЯ локатора. value - {string} значение локатора.
  • 12. Returns: {ELEMENT:string} JSON сущность, локализующий элемент. Potential Errors: NoSuchElement - Если элемент не был найден. XPathLookupError - Если в качестве СТРАТЕГИИ локатора был задан не верный XPath . Json Wire Protocol разбор команды ELEMENT
  • 13. Json Wire Protocol – прикладной пример исходные данные
  • 14. Json Wire Protocol – прикладной пример формирование запроса S E L E N I U M http_type: POST url: http://localhost:4444/wd/hub/session/1232412/element { &quot; using &quot;:&quot; id &quot;, &quot; value &quot;:&quot; edit-submit &quot; } Array ( [ using ] => id [ value ] => edit-submit ) json
  • 15. HTTP/1.1 200 OK Date: Sun, 05 Feb 2012 22:06:28 GMT Server: Jetty/5.1.x (Linux/2.6.32-38-generic i386 java/1.6.0_20 Content-Length: 138 Content-Type: application/json;charset=UTF-8 {&quot;status&quot;:0,&quot;sessionId&quot;:&quot;1328478524467&quot;,&quot;value&quot;:{&quot;ELEMENT&quot;:&quot;2&quot;}, &quot;class&quot;:&quot;org.openqa.selenium.remote.Response&quot;,&quot;hCode&quot;:5604828} Json Wire Protocol – прикладной пример получение ответа S E L E N I U M
  • 16. Array ( [ header ] => HTTP/1.1 200 OK Date: Sun, 05 Feb 2012 22:06:28 GMT Server: Jetty/5.1.x (Linux/2.6.32-38-generic i386 java/1.6.0_20 Content-Length: 138 Content-Type: application/json;charset=UTF-8 [ body ] => {&quot; status &quot;: 0 ,&quot; sessionId &quot;:&quot; 1328478524467 &quot;, &quot; value &quot;:{&quot; ELEMENT &quot;:&quot; 2 &quot;},&quot;class&quot;:&quot;org.openqa.selenium.remote.Response&quot;, &quot;hCode&quot;:5604828} ) json_decode Json Wire Protocol – прикладной пример разбор ответа
  • 17. Element Object ( [ driver:Element:private ] => Driver Object ( [ session_id:protected ] => 1328478524467 [ server_url:protected ] => http://localhost:4444/wd/hub [ browser:protected ] => firefox ) [ element_id:Element:private ] => 2 [ locator:Element:private ] => id=edit-submit ) Json Wire Protocol – прикладной пример разбор ответа ??????
  • 18. Json Wire Protocol весь цикл.
  • 19. Реализация PHP объектной модели
  • 20. Реализация PHP объектной модели . Оформирование Json из ObjectPHP public function execute( $http_type , $relative_url , $payload = null ) { ... $response = WebDriver:: Curl ( $http_type , $full_url , $payload ); ... return $response ; }
  • 21. Реализация PHP объектной модели . Работа c Element public function __construct( $driver , $element_id , $locator ) { $this-> driver = $driver ; } private function execute( $driver , $element_id , $locator ) { return $this-> driver ->execute( $http_type , $relative_url , $payload = null ); } public function click() { $this->execute(&quot; POST &quot;, &quot; /click &quot;); }
  • 22. Реализация PHP объектной модели . TestSuit – PHPUnit интеграция class myTest extends PHPUnit_Framework_TestCase { public function setUp() { } public function test() { } public function tearDown() { } }
  • 23. Реализация PHP объектной модели . TestSuit – PHPUnit интеграция class myTest extends PHPUnit_Framework_TestCase { protected $ driver ; public function setUp() { $this -> driver = Driver:: InitAtHost (' 4444 ', ' firefox '); } public function __call( $name , $arguments ) { ... return call_user_func_array( array ( $this -> driver , $name ), $arguments ); ... } }
  • 24. Реализация PHP объектной модели . TestSuit – PHPUnit интеграция, ASSERT class Element { ... public function assert_string_present( $expected_string ) { $page_text = $this ->get_text(); PHPUnit_Framework_Assert:: assertContains ( $expected_string , $page_text , &quot; Failed asserting ... &quot;); } }
  • 25. Реализация PHP объектной модели .
  • 26. Реализация PHP объектной модели . TestSuit – PHPUnit , запуск СБОРКИ <phpunit stopOnFailure =&quot; false &quot; colors =&quot; false &quot; > <testsuites> <testsuite name=&quot;change user status&quot;> <file> pixwoo/functionalTestNew.php </file> <file> pixwoo/functionalTestPublic.php </file> <file> pixwoo/functionalTestProfile.php </file> </testsuite> </testsuites> </phpunit>
  • 27. Реализация JavaScript инъекции find, click, move, … зачем ?
  • 28. Реализация JavaScript инъекции find, click, move, … зачем ? $this ->execute(&quot; POST &quot;, &quot; /session/:sessionId/execute_async &quot;, array ( &quot; script &quot; => $javascript , &quot; args &quot; => $arguments , )); $javascript = &quot;var callback = arguments[arguments.length-1]; function clickElement( handler ){ $( handler ).click(); } $(document).ready(function(){ clickElement( ... jQuery Selector ... ); callback(\&quot;done\&quot;); });&quot;; Асинхронный вызов JS Примерная реализация
  • 29. На один шаг ближе к автоматизации. developers testers Version control systems Git, SVN, ... build servers Jenkins 1 3 2 4 5 6 7 8 9 Bug parser (redmine API)
  • 30. 40 big websites in 2011 www.adyax.com

Editor's Notes

  • #3: Hi all, thank you for coming. My name is Maxime Topolov. I’m CTO and co-founder of Adyax, european leader on Drupal. I’ll try to introduce you Drupal.