SlideShare una empresa de Scribd logo
1 de 30
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(amp;quot;doneamp;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

Más contenido relacionado

La actualidad más candente

Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDEISsoft
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQAFest
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестовSQALab
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Полуавтоматизация third-party API
Полуавтоматизация third-party APIПолуавтоматизация third-party API
Полуавтоматизация third-party APISQALab
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerAnton Arhipov
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.MageCloud
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Anton Arhipov
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияMatvey Malkov
 

La actualidad más candente (19)

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

Similar a Alexander manuhin selenium_php_v2.0

Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеровMedia Gorod
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy Turevich
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJSYura Bogdanov
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Микрофреймворки PHP
Микрофреймворки PHPМикрофреймворки PHP
Микрофреймворки PHPEkaterina Giganova
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Fedor Malyshkin
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 

Similar a Alexander manuhin selenium_php_v2.0 (20)

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

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(amp;quot;doneamp;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

Notas del editor

  1. 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.