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 S...
Что необходимо для реализации     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 объектной модели;...
Json Wire Protocol  разбор команды   ELEMENT POST /session/:sessionId/element URL Parameters: :sessionId  - ID сесии JSON ...
Returns: {ELEMENT:string}  JSON сущность, локализующий элемент. Potential Errors: NoSuchElement  - Если элемент не был най...
Json Wire Protocol –  прикладной пример  исходные данные
Json Wire Protocol –  прикладной пример  формирование запроса  S E L E N I U M http_type:  POST url:  http://localhost:444...
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 Conten...
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 i38...
Element  Object ( [ driver:Element:private ] => Driver  Object ( [ session_id:protected ] =>  1328478524467 [ server_url:p...
Json Wire Protocol  весь цикл.
Реализация  PHP  объектной модели
Реализация  PHP  объектной модели . Оформирование  Json  из  ObjectPHP public function  execute( $http_type ,  $relative_u...
Реализация  PHP  объектной модели . Работа c  Element public function  __construct( $driver ,  $element_id ,  $locator ) {...
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit  интеграция class  myTest  extends  PHPUnit_Framework_TestCase { ...
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit  интеграция class  myTest  extends  PHPUnit_Framework_TestCase   ...
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit  интеграция,  ASSERT class  Element   { ... public function  asse...
Реализация  PHP  объектной модели .
Реализация  PHP  объектной модели . TestSuit  –  PHPUnit , запуск  СБОРКИ <phpunit   stopOnFailure =&quot; false &quot;  c...
Реализация   JavaScript  инъекции   find, click, move, … зачем ?
Реализация   JavaScript  инъекции   find, click, move, … зачем ? $this ->execute(&quot; POST &quot;, &quot; /session/:sess...
На один шаг ближе к автоматизации. developers testers Version control systems  Git, SVN, ... build servers Jenkins 1 3 2 4...
40 big websites in 2011 www.adyax.com
Upcoming SlideShare
Loading in …5
×

Alexander manuhin selenium_php_v2.0

4,173 views

Published on

webdriver php

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,173
On SlideShare
0
From Embeds
0
Number of Embeds
3,296
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 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.
  • Alexander manuhin selenium_php_v2.0

    1. 1. Selenium and PHP By Alexander Manuhin , QA Manager Adyax Новая жизнь WebDriver и PHP . Путь от разработки фреймворка до организации производственного процесса.
    2. 2. 40 big websites in 2011 www.adyax.com
    3. 3. PHP+WebDriver второе дыхание
    4. 4. PHP в качестве binding для WebDriver ?
    5. 5. Что необходимо для реализации PHP binding ? Object model TestSuit Protocol
    6. 6. Json Wire Protocol как это работает ? Json Wire Protocol - JSON через HTTP Запрос Ответ PHP JsonWire Protocol Selenium Server Browser Browser PHP JsonWire Protocol Selenium Server
    7. 7. Что необходимо для реализации PHP binding ? Object model TestSuit JsonWireProtocol
    8. 8. Test Suit зачем оно нужно, что выбрать ? PHPUnit (PEAR) PHP Simpletests PHPUnit Project PHPUnit 1.0.0
    9. 9. Что необходимо для реализации PHP binding ? Object model PHPUnit (PEAR) JsonWireProtocol
    10. 10. PHP Object model простановка задачи. Постановка задачи: a. Разбор JsonWireProtocol; b. Реализация PHP объектной модели; c. Интеграция полученной модели с PHPUnit;
    11. 11. Json Wire Protocol разбор команды ELEMENT POST /session/:sessionId/element URL Parameters: :sessionId - ID сесии JSON Parameters: using - {string} в данном конкретном случае это локатор, СТРАТЕГИЯ локатора. value - {string} значение локатора.
    12. 12. Returns: {ELEMENT:string} JSON сущность, локализующий элемент. Potential Errors: NoSuchElement - Если элемент не был найден. XPathLookupError - Если в качестве СТРАТЕГИИ локатора был задан не верный XPath . Json Wire Protocol разбор команды ELEMENT
    13. 13. Json Wire Protocol – прикладной пример исходные данные
    14. 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. 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. 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. 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. 18. Json Wire Protocol весь цикл.
    19. 19. Реализация PHP объектной модели
    20. 20. Реализация PHP объектной модели . Оформирование Json из ObjectPHP public function execute( $http_type , $relative_url , $payload = null ) { ... $response = WebDriver:: Curl ( $http_type , $full_url , $payload ); ... return $response ; }
    21. 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. 22. Реализация PHP объектной модели . TestSuit – PHPUnit интеграция class myTest extends PHPUnit_Framework_TestCase { public function setUp() { } public function test() { } public function tearDown() { } }
    23. 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. 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. 25. Реализация PHP объектной модели .
    26. 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. 27. Реализация JavaScript инъекции find, click, move, … зачем ?
    28. 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. 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. 30. 40 big websites in 2011 www.adyax.com

    ×