SlideShare a Scribd company logo
1 of 71
Download to read offline
Тестирование безDOMных
объектов современных
веб-интерфейсов

 Алексей Емелин
 Инженер по автоматизации тестирования
Современные веб-интерфейсы
                                      <html>!
                                          <head>!
                                               …!
                                          </head>!
                                          <body>!
                                               …!
                                               <canvas>!
                                               </canvas>!
                                               …!
                                          </body>!
                                      </html>!




    http://www.lw-zone.org/word/	

3
Результат работы API Яндекс.Карт




                                 DOM-элементы	




      безDOMные элементы (canvas)	

4
Этапы тестирования




                 Интерфейс	
  




5
Этапы тестирования




                        Интерфейс	
  

             unit	
  
            тесты	
  




6
Этапы тестирования

                                        ручные	
  
                                         тесты	
  




                        Интерфейс	
  

             unit	
  
            тесты	
  




7
Этапы тестирования

                                            ручные	
  
                                             тесты	
  




                         Интерфейс	
  
              unit	
  
             тесты	
  
                                          авто	
  
                                         тесты	
  




8
Требования к автоматизации

    •  Запуск тестов во всех популярных
       браузерах




9
Требования к автоматизации

     •  Запуск тестов во всех популярных
        браузерах
     •  Взаимодействие с JavaScript API




10
Требования к автоматизации

     •  Запуск тестов во всех популярных
        браузерах
     •  Взаимодействие с JavaScript API

     •  Взаимодействие с пользовательским
       интерфейсом (DOM, CANVAS)




11
Требования к автоматизации

     •  Запуск тестов во всех популярных
        браузерах
     •  Взаимодействие с JavaScript API

     •  Взаимодействие с пользовательским
       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения



12
Требования к автоматизации

     •  Запуск тестов во всех популярных
        браузерах
     •  Взаимодействие с JavaScript API

     •  Взаимодействие с пользовательским
       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения

     •  Отслеживание JavaScript ошибок

13
Запуск тестов во всех популярных браузерах
Запуск тестов во всех популярных браузерах. WebDriver


     •  Нативный интерфейс для взаимодействия с
        браузером




15
Запуск тестов во всех популярных браузерах. WebDriver


     •  Нативный интерфейс для взаимодействия с
        браузером
     •  Есть для всех популярных браузеров




16
Запуск тестов во всех популярных браузерах. WebDriver


     •  Нативный интерфейс для взаимодействия с
        браузером
     •  Есть для всех популярных браузеров

     •  Поиск элемента в DOM-дереве по имени, по
       названию класса, по id, по css или xpath
       селектору и взаимодействие с ним



17
Запуск тестов во всех популярных браузерах. WebDriver


     •  Нативный интерфейс для взаимодействия с
        браузером
     •  Есть для всех популярных браузеров

     •  Поиск элемента в DOM-дереве по имени, по
       названию класса, по id, по css или xpath
       селектору и взаимодействие с ним
     •  Чтение и запись параметров DOM-элемента

18
Запуск тестов во всех популярных браузерах. WebDriver


     •  Нативный интерфейс для взаимодействия с
        браузером
     •  Есть для всех популярных браузеров

     •  Поиск элемента в DOM-дереве по имени, по
       названию класса, по id, по css или xpath
       селектору и взаимодействие с ним
     •  Чтение и запись параметров DOM-элемента

     •  Выполнение JavaScript кода
19
Требования к автоматизации

     •  Запуск тестов во всех популярных    	

        браузерах
     •  Взаимодействие с JavaScript API

     •  Взаимодействие с пользовательским
       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения

     •  Отслеживание JavaScript ошибок

20
Взаимодействие с JavaScript API
Выполнение JS кода.




     JavascriptExecutor js =(JavascriptExecutor) driver;!
     !
     String script = "return map.getCenter();";!
     !
     Float[] center = js.executeScript(script);!



22
Требования к автоматизации

     •  Запуск тестов во всех популярных         	

        браузерах
     •  Взаимодействие с JavaScript API    	

     •  Взаимодействие с пользовательским
       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения

     •  Отслеживание JavaScript ошибок

23
Взаимодействие с пользовательским интерфейсом
Элементы веб-интерфейса




                                  DOM-элементы	




       безDOMные элементы (canvas)	

25
Структура карты




                       подложка	

26
Структура карты




                       слой графики	


                       подложка	

27
Структура карты




                       слой событий	


                       слой графики	


                       подложка	

28
Структура карты


                       слой контролов	




                         слой событий	


                         слой графики	


                         подложка	

29
Хотспоты
                             !
                RenderedGeometry: {!
                     type: "Circle",!
                     coordinates: [141, 208],!
                    !radius: 40!
                 } !


                            слой событий	





                          слой графики	

30
Взаимодействие с безDOMными объектами




31
Взаимодействие с безDOMными объектами




32
Взаимодействие с безDOMными объектами




33
Работа с сеткой             11	


     click(11, 11);	

     Ширина клетки: 32	





                           11	

     x = 11 * 32 + 32 / 2	

     y = 11 * 32 + 32 / 2	


34
     click(368, 368);
Способы взаимодействия с интерфейсом


     •  DOM-элемент – классический подход

     •  БезDOMный элемент – координатный подход




         Два различных подхода – это
                  слишком!	

35
Выбираем элемент для клика

     document.elementFromPoint(x, y)!




36
Требования к автоматизации

     •  Запуск тестов во всех популярных         	

        браузерах
     •  Взаимодействие с JavaScript API    	

     •  Взаимодействие с пользовательским              	

       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения

     •  Отслеживание JavaScript ошибок

37
Проверка визуального представления
Проверка визуального представления




                               DOM-элементы	



             безDOMные элементы(canvas)	


39
      Как проверить содержимое canvas?
Проверка canvas через JS объект

     var placemark = new ymaps.Placemark([54, -8]);!
     var options = placemark.options;!
     var style = options.get(‘preset’);

     !
                                    placemark

                                    !




            А если разработчик ошибся?	

40
Проверка canvas через пиксели

     var pixel = canvas.getImageData(x, y, 1, 1).data;

                            !




                 Не лучший вариант	

41
Проверка canvas сравнением скриншотов

     1.  Подготовить эталонное изображение

     2.  Сравнить проверяемое с эталоном

     3.  ???

     4.  PROFIT                             тест.png	

                            эталон.png	





42
Проблемы работы с эталоном

     •  Редактируем сценарий теста – создаем
      новый эталон




43
Проблемы работы с эталоном

     •  Редактируем сценарий теста – создаем
      новый эталон

     •  Информация, меняющаяся со временем




44
Проблемы работы с эталоном

     •  Редактируем сценарий теста – создаем
      новый эталон

     •  Информация, меняющаяся со временем

     •  Разные браузеры – разные скриншоты




45
Проблемы работы с эталоном

     •  Редактируем сценарий теста – создаем
      новый эталон

     •  Информация, меняющаяся со временем

     •  Разные браузеры – разные скриншоты




46
Генерируем эталоны на лету


     Запускаем

     •  в то же время




47
Генерируем эталоны на лету


     Запускаем

     •  в то же время

     •  в той же версии браузера




48
Генерируем эталоны на лету


     Запускаем

     •  в то же время

     •  в той же версии браузера

     •  тот же тест



49
Генерируем эталоны на лету


     Запускаем

     •  в то же время

     •  в той же версии браузера

     •  тот же тест

     •  с проверенной версией АПИ
50
Проверка визуального отображения

         testing	

                   production	





                      сравниваем	



51
Требования к автоматизации

     •  Запуск тестов во всех популярных         	

        браузерах
     •  Взаимодействие с JavaScript API    	

     •  Взаимодействие с пользовательским                	

       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения           	

     •  Отслеживание JavaScript ошибок

52
Отслеживание JavaScript ошибок
Отслеживание JavaScript ошибок




      window.onerror = function(message, url, line){}	


54
Разные хосты – разный текст ошибок



                                                Тот же хост	





                               Другой хост	



     http://clck.ru/28EY9	


55
Решение проблемы описания JS ошибок




          Access-Control-Allow-Origin: *!
          Access-Control-Allow-Origin: http://testhost.ru

          

          !




     •  http://enable-cors.org/	

56
Если нет доступа к серверу



      FirefoxProfile ffProfile = new FirefoxProfile();
      JavaScriptError.addExtension(ffProfile); !
      final WebDriver driver = new FirefoxDriver(ffProfile); !
      !
      driver.get("http://somesite"); !
      !
      final List<JavaScriptError> jsErrors =
        !JavaScriptError.readErrors(driver); !
      assertTrue(jsErrors.toString(), jsErrors.isEmpty());!




     •  https://github.com/mguillem/JSErrorCollector	

57
Требования к автоматизации

     •  Запуск тестов во всех популярных           	

        браузерах
     •  Взаимодействие с JavaScript API    	

     •  Взаимодействие с пользовательским                  	

       интерфейсом (DOM, CANVAS)
     •  Проверка визуального отображения             	

     •  Отслеживание JavaScript ошибок       	

58
Архитектура
Архитектура тестирования

              *.html	

   •  карта	

                          •  описание теста	

                          •  сценарий теста	




        Java движок	

    •  выполнение теста	

                          •  проверка результатов	

                          •  построение отчета	


60
html. Что внутри?
     <!doctype html>!
     <!--(description)!
     проверяем опцию ZIndex!
     -->!
     <!--(version)!
     2.0.13!
     -->!
     <!--(commands)!
     click(12, 11); // кликаем по объекту!
     test();!
     drag([10, 0], [14, 0]); // перетаскиваем метку!
     test();!
     -->!
     <html>!
          <head>!
      ! ! !<script src=“/dynamic_api_loader.js"></script>!
              <script type="text/javascript">!
                  function init(ymaps){!
                      myMap = new ymaps.Map(‘map’);!
                      ...!
61
…	





                           …	

     тест	

   движок	

                           …	



62
Доступные команды
     •  mousedown(x, y)   •  test()
     •  mouseup(x, y)     •  center(lat, long)
     •  click(x, y)       •  zoom(z)
     •  dblclick(x, y)    •  sleep(s)
     •  mouseover(x, y)   •  drag([x1, y1], [x2, y2])
     •  mouseout(x, y)
     •  mousemove(x, y)



63
click(10, 0);
     sleep(1000);




64
click(10, 0);
     sleep(1000);
     click(8, 7);
     sleep(1000);




65
click(10, 0);
     sleep(1000);
     click(8, 7);
     sleep(1000);
     test();




66
Версия для проверки	

   Эталон	

   Разница	





67
click(0, 15);
     test();




68
Версия для проверки	

   Эталон	

   Разница	


69
Итого

     •  Рабочий прототип системы автоматического
      тестирования

     •  Удовлетворяющий требованиям:
      –  Запуск тестов во всех популярных браузерах
      –  Взаимодействие с JavaScript API
      –  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS)
      –  Проверка визуального отображения
      –  Отслеживание JavaScript ошибок



70
Емелин Алексей

Инженер по автоматизации
тестирования



dolf@yandex-team.ru
twitter:aemelin

More Related Content

Similar to Тестирование безDOMных объектов

Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответDenis Izmaylov
 
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"Yandex
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanovyaevents
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Yandex
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsSQALab
 
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
«Winium — это как Selenium, только под Windows»  – Глеб Головин, 2ГИС«Winium — это как Selenium, только под Windows»  – Глеб Головин, 2ГИС
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС2ГИС Технологии
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Ivan Ruchkin
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщикаmcslayer
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Yandex
 
Project Robotester
Project RobotesterProject Robotester
Project Robotesterbromozel
 
Проект Роботестер
Проект РоботестерПроект Роботестер
Проект РоботестерSQALab
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancevAlexei Lupan
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийMoscowJS
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Technopark
 
Автоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовАвтоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовSergey Borisov
 
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...yaevents
 

Similar to Тестирование безDOMных объектов (20)

Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
 
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
«Winium — это как Selenium, только под Windows»  – Глеб Головин, 2ГИС«Winium — это как Selenium, только под Windows»  – Глеб Головин, 2ГИС
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
Project Robotester
Project RobotesterProject Robotester
Project Robotester
 
Проект Роботестер
Проект РоботестерПроект Роботестер
Проект Роботестер
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancev
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1
 
Автоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовАвтоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотов
 
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
 

More from SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

Тестирование безDOMных объектов

  • 1.
  • 2. Тестирование безDOMных объектов современных веб-интерфейсов Алексей Емелин Инженер по автоматизации тестирования
  • 3. Современные веб-интерфейсы <html>! <head>! …! </head>! <body>! …! <canvas>! </canvas>! …! </body>! </html>! http://www.lw-zone.org/word/ 3
  • 4. Результат работы API Яндекс.Карт DOM-элементы безDOMные элементы (canvas) 4
  • 5. Этапы тестирования Интерфейс   5
  • 6. Этапы тестирования Интерфейс   unit   тесты   6
  • 7. Этапы тестирования ручные   тесты   Интерфейс   unit   тесты   7
  • 8. Этапы тестирования ручные   тесты   Интерфейс   unit   тесты   авто   тесты   8
  • 9. Требования к автоматизации •  Запуск тестов во всех популярных браузерах 9
  • 10. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API 10
  • 11. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) 11
  • 12. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения 12
  • 13. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения •  Отслеживание JavaScript ошибок 13
  • 14. Запуск тестов во всех популярных браузерах
  • 15. Запуск тестов во всех популярных браузерах. WebDriver •  Нативный интерфейс для взаимодействия с браузером 15
  • 16. Запуск тестов во всех популярных браузерах. WebDriver •  Нативный интерфейс для взаимодействия с браузером •  Есть для всех популярных браузеров 16
  • 17. Запуск тестов во всех популярных браузерах. WebDriver •  Нативный интерфейс для взаимодействия с браузером •  Есть для всех популярных браузеров •  Поиск элемента в DOM-дереве по имени, по названию класса, по id, по css или xpath селектору и взаимодействие с ним 17
  • 18. Запуск тестов во всех популярных браузерах. WebDriver •  Нативный интерфейс для взаимодействия с браузером •  Есть для всех популярных браузеров •  Поиск элемента в DOM-дереве по имени, по названию класса, по id, по css или xpath селектору и взаимодействие с ним •  Чтение и запись параметров DOM-элемента 18
  • 19. Запуск тестов во всех популярных браузерах. WebDriver •  Нативный интерфейс для взаимодействия с браузером •  Есть для всех популярных браузеров •  Поиск элемента в DOM-дереве по имени, по названию класса, по id, по css или xpath селектору и взаимодействие с ним •  Чтение и запись параметров DOM-элемента •  Выполнение JavaScript кода 19
  • 20. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения •  Отслеживание JavaScript ошибок 20
  • 22. Выполнение JS кода. JavascriptExecutor js =(JavascriptExecutor) driver;! ! String script = "return map.getCenter();";! ! Float[] center = js.executeScript(script);! 22
  • 23. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения •  Отслеживание JavaScript ошибок 23
  • 25. Элементы веб-интерфейса DOM-элементы безDOMные элементы (canvas) 25
  • 26. Структура карты подложка 26
  • 27. Структура карты слой графики подложка 27
  • 28. Структура карты слой событий слой графики подложка 28
  • 29. Структура карты слой контролов слой событий слой графики подложка 29
  • 30. Хотспоты ! RenderedGeometry: {! type: "Circle",! coordinates: [141, 208],! !radius: 40! } ! слой событий слой графики 30
  • 34. Работа с сеткой 11 click(11, 11); Ширина клетки: 32 11 x = 11 * 32 + 32 / 2 y = 11 * 32 + 32 / 2 34 click(368, 368);
  • 35. Способы взаимодействия с интерфейсом •  DOM-элемент – классический подход •  БезDOMный элемент – координатный подход Два различных подхода – это слишком! 35
  • 36. Выбираем элемент для клика document.elementFromPoint(x, y)! 36
  • 37. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения •  Отслеживание JavaScript ошибок 37
  • 39. Проверка визуального представления DOM-элементы безDOMные элементы(canvas) 39 Как проверить содержимое canvas?
  • 40. Проверка canvas через JS объект var placemark = new ymaps.Placemark([54, -8]);! var options = placemark.options;! var style = options.get(‘preset’);
 ! placemark
 ! А если разработчик ошибся? 40
  • 41. Проверка canvas через пиксели var pixel = canvas.getImageData(x, y, 1, 1).data;
 ! Не лучший вариант 41
  • 42. Проверка canvas сравнением скриншотов 1.  Подготовить эталонное изображение 2.  Сравнить проверяемое с эталоном 3.  ??? 4.  PROFIT тест.png эталон.png 42
  • 43. Проблемы работы с эталоном •  Редактируем сценарий теста – создаем новый эталон 43
  • 44. Проблемы работы с эталоном •  Редактируем сценарий теста – создаем новый эталон •  Информация, меняющаяся со временем 44
  • 45. Проблемы работы с эталоном •  Редактируем сценарий теста – создаем новый эталон •  Информация, меняющаяся со временем •  Разные браузеры – разные скриншоты 45
  • 46. Проблемы работы с эталоном •  Редактируем сценарий теста – создаем новый эталон •  Информация, меняющаяся со временем •  Разные браузеры – разные скриншоты 46
  • 47. Генерируем эталоны на лету Запускаем •  в то же время 47
  • 48. Генерируем эталоны на лету Запускаем •  в то же время •  в той же версии браузера 48
  • 49. Генерируем эталоны на лету Запускаем •  в то же время •  в той же версии браузера •  тот же тест 49
  • 50. Генерируем эталоны на лету Запускаем •  в то же время •  в той же версии браузера •  тот же тест •  с проверенной версией АПИ 50
  • 51. Проверка визуального отображения testing production сравниваем 51
  • 52. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения •  Отслеживание JavaScript ошибок 52
  • 54. Отслеживание JavaScript ошибок window.onerror = function(message, url, line){} 54
  • 55. Разные хосты – разный текст ошибок Тот же хост Другой хост http://clck.ru/28EY9 55
  • 56. Решение проблемы описания JS ошибок Access-Control-Allow-Origin: *! Access-Control-Allow-Origin: http://testhost.ru
 
 ! •  http://enable-cors.org/ 56
  • 57. Если нет доступа к серверу FirefoxProfile ffProfile = new FirefoxProfile(); JavaScriptError.addExtension(ffProfile); ! final WebDriver driver = new FirefoxDriver(ffProfile); ! ! driver.get("http://somesite"); ! ! final List<JavaScriptError> jsErrors = !JavaScriptError.readErrors(driver); ! assertTrue(jsErrors.toString(), jsErrors.isEmpty());! •  https://github.com/mguillem/JSErrorCollector 57
  • 58. Требования к автоматизации •  Запуск тестов во всех популярных браузерах •  Взаимодействие с JavaScript API •  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) •  Проверка визуального отображения •  Отслеживание JavaScript ошибок 58
  • 60. Архитектура тестирования *.html •  карта •  описание теста •  сценарий теста Java движок •  выполнение теста •  проверка результатов •  построение отчета 60
  • 61. html. Что внутри? <!doctype html>! <!--(description)! проверяем опцию ZIndex! -->! <!--(version)! 2.0.13! -->! <!--(commands)! click(12, 11); // кликаем по объекту! test();! drag([10, 0], [14, 0]); // перетаскиваем метку! test();! -->! <html>! <head>! ! ! !<script src=“/dynamic_api_loader.js"></script>! <script type="text/javascript">! function init(ymaps){! myMap = new ymaps.Map(‘map’);! ...! 61
  • 62. … тест движок … 62
  • 63. Доступные команды •  mousedown(x, y) •  test() •  mouseup(x, y) •  center(lat, long) •  click(x, y) •  zoom(z) •  dblclick(x, y) •  sleep(s) •  mouseover(x, y) •  drag([x1, y1], [x2, y2]) •  mouseout(x, y) •  mousemove(x, y) 63
  • 64. click(10, 0); sleep(1000); 64
  • 65. click(10, 0); sleep(1000); click(8, 7); sleep(1000); 65
  • 66. click(10, 0); sleep(1000); click(8, 7); sleep(1000); test(); 66
  • 67. Версия для проверки Эталон Разница 67
  • 68. click(0, 15); test(); 68
  • 69. Версия для проверки Эталон Разница 69
  • 70. Итого •  Рабочий прототип системы автоматического тестирования •  Удовлетворяющий требованиям: –  Запуск тестов во всех популярных браузерах –  Взаимодействие с JavaScript API –  Взаимодействие с пользовательским интерфейсом (DOM, CANVAS) –  Проверка визуального отображения –  Отслеживание JavaScript ошибок 70
  • 71. Емелин Алексей Инженер по автоматизации тестирования dolf@yandex-team.ru twitter:aemelin