1. Selenium and PHP By Alexander Manuhin , QA Manager Adyax Новая жизнь WebDriver и PHP . Путь от разработки фреймворка до организации производственного процесса.
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
14. 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
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 {"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
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 ] => {" status ": 0 ," sessionId ":" 1328478524467 ", " value ":{" ELEMENT ":" 2 "},"class":"org.openqa.selenium.remote.Response", "hCode":5604828} ) json_decode Json Wire Protocol – прикладной пример разбор ответа
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(" POST ", " /click "); }
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 , " Failed asserting ... "); } }
29. На один шаг ближе к автоматизации. developers testers Version control systems Git, SVN, ... build servers Jenkins 1 3 2 4 5 6 7 8 9 Bug parser (redmine API)