Автоматизация ui тестирования под windows и windows phone

55
Абалов Николай Головин Глеб Автоматизация UI тестирования под Windows и Windows Phone

Upload: codefest

Post on 17-Jul-2015

2.556 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Автоматизация UI тестирования под Windows и Windows Phone

Абалов Николай Головин Глеб

Автоматизация UI тестирования под Windows и Windows Phone

Page 2: Автоматизация UI тестирования под Windows и Windows Phone

2

Ручные

GUI

API Интеграционные Компонентные

Модульные

Page 3: Автоматизация UI тестирования под Windows и Windows Phone

3

Web

Icons by Edward Boatman,Kelig Le Luron,Roy Martens,Daniel,Martin Jordan,Yorlmar Campos,Kelig Le Luron from http://thenounproject.com/

Page 4: Автоматизация UI тестирования под Windows и Windows Phone

3Icons by Edward Boatman,Kelig Le Luron,Roy Martens,Daniel,Martin Jordan,Yorlmar Campos,Kelig Le Luron from http://thenounproject.com/

Page 5: Автоматизация UI тестирования под Windows и Windows Phone

State of the Union

4

Page 7: Автоматизация UI тестирования под Windows и Windows Phone

5

Page 8: Автоматизация UI тестирования под Windows и Windows Phone

5

Page 9: Автоматизация UI тестирования под Windows и Windows Phone

6

TestStack/White

Page 10: Автоматизация UI тестирования под Windows и Windows Phone

7

Selenium“free and open protocol for testing that has become a defacto standard”

Appium

Page 11: Автоматизация UI тестирования под Windows и Windows Phone

Selenium 2.0 → 3.0

W3C working draft 2013

JsonWireProtocol

JsonWireProtocol over HTTP

WebDriver Implementation System under Test

Magic

8

Page 12: Автоматизация UI тестирования под Windows и Windows Phone

HTTP/1.1  200  OK  Content-­‐Type:  application/json;charset=UTF-­‐8  Connection:  close  !

{"sessionId":"AwesomeSession",  "status":0,  "value":"CodeFest"}

GET  http://127.0.0.1:9999/session/12345/element/2026335-­‐1/text  HTTP/1.1  ...  Content-­‐Type:  application/json;charset=UTF-­‐8  Connection:  close  Accept:  application/json

Get element text (JSON Wire Example)

9

Page 13: Автоматизация UI тестирования под Windows и Windows Phone

10

Open Source • Selenium • Awesome

Page 14: Автоматизация UI тестирования под Windows и Windows Phone

Winium for Store Apps

11

Page 15: Автоматизация UI тестирования под Windows и Windows Phone

12

JsonWireProtocol over HTTP

Xde API

Internal API over HTTP

XDE

Automation Server

Winium.StoreApps.Driver

Ваши тесты на Python, C#, JS,...

Тестируемое приложение

Page 16: Автоматизация UI тестирования под Windows и Windows Phone

13

Быстрый старт

a. Готовим приложение

b. Пишем тесты

c. Поехали!

Page 17: Автоматизация UI тестирования под Windows и Windows Phone

1. Добавляем NuGet пакет Winium.StoreApps.InnerServer

2. В MainPageOnLoaded  создаем и запускаем сервер автоматизации

14

a. Подготовка приложения

#if  DEBUG  

       AutomationServer.Instance.InitializeAndStart(Frame);  

#endif  //  DEBUG

Page 18: Автоматизация UI тестирования под Windows и Windows Phone

3. Обеспечиваем testability (прописываем идентификаторы и имена)

4. Собираем приложение и упаковываем его в appx

15

a. Подготовка приложения

Page 19: Автоматизация UI тестирования под Windows и Windows Phone

Деплой и загрузка данных (python)dc  =  {'deviceName':  'Emulator  8.1  WVGA  4  inch  512MB',            'app':  'C:\\YorAppUnderTest.appx',            'files':  {                {'C:\\AppFiles\\file1.png':  'download\\file1.png',                  'C:\\AppFiles\\file2.png':  'download\\file2.png'}        },        'debugConnectToRunningApp':  False}  

!

driver  =  Remote(command_executor=“http://localhost:9999”,                                  desired_capabilities=dc)

16

Page 20: Автоматизация UI тестирования под Windows и Windows Phone

Поиск элементов

17

id AutomationProperties.AutomationId

name AutomationProperties.Name

class name полное имя класса

tag name тоже, что и class name

xname x:Name

Page 21: Автоматизация UI тестирования под Windows и Windows Phone

Winium Inspector

18

Page 22: Автоматизация UI тестирования под Windows и Windows Phone

element  =  driver.find_element_by_id('MyTextBox')  !

#  получение  значения  текстового  поляelement.text#  'Send  me  some  keys'  !

#  кликнуть  в  элемент  element.click()  !

#  ввести  строкуelement.send_keys('Hello!'+Keys.ENTER)

Операции над элементами

19

Page 23: Автоматизация UI тестирования под Windows и Windows Phone

Получение значений свойств#  скаляры  и  строкиelement.get_attribute('Width')#  300  !

#  вложенные  свойства  element.get_attribute('DesiredSize.Width')#  300  !

#  прочие  свойства,  серилизуемые  в  JSONelement.get_attribute('DesiredSize')#  '{"Width":300.0,"Height":114.0,"IsEmpty":false}'

20

Page 24: Автоматизация UI тестирования под Windows и Windows Phone

#  flick  –  “провести”,  быстрое  движение  по  экрануTouchActions(driver).flick_element(element,  0,  500,  100).perform()!

#  scroll/swipe  –  “сдвинуть”,  движение  по  экран  без  отрываTouchActions(driver).scroll(200,200).perform()  !

#  можно  сделать  свой  жест  ActionChains(driver)  \.click_and_hold()  \.move_by_offset(100,  100)  \.release().perform()

Жесты

21

Page 25: Автоматизация UI тестирования под Windows и Windows Phone

Дополнительные команд#  использование  invoke  шаблонов  app_bar_button  =  driver.find_element_by_id('GoAppBarButton')driver.execute_script('automation:  invoke',  app_bar_button)list_box  =  driver.find_element_by_id('MyListBox')si  =  {'v':  'smallIncrement',  'count':  10}driver.execute_script('automation:  scroll',  list_box,  si)  !

#  задание  значения  свойства  (скаляры  и  строки)  text_box  =  driver.find_element_by_id('MyTextBox')driver.execute_script('attribute:  set',  text_box,  'Width',  10)driver.execute_script('attribute:  set',  text_box,  'Background.Opacity',  0.3)

22

Page 26: Автоматизация UI тестирования под Windows и Windows Phone

https://github.com/2gis/Winium.StoreApps/wiki/Supported-Commands

NewSession !Close!Quit!GetPageSource!FindElement!FindElements!FindChildElement!FindChildElements!Screenshot!

ExecuteScript!ClickElement!GetElementText!GetElementAttribute!IsElementDisplayed!GetElementLocation!SendKeysToElement!GetWindowSize!GoBack

MouseMoveTo!MouseClick!MouseDown!MouseUp!TouchSingleTap!TouchScroll!TouchFlick!...!

23

Все команды

Page 27: Автоматизация UI тестирования под Windows и Windows Phone

b. Пишем тестыimport  unittestfrom  selenium.webdriver  import  Remote!

class  TestMainPage(unittest.TestCase):    desired_capabilities  =  {"app":  "C:\\YorAppUnderTest.appx"}    def  setUp(self):        self.driver  =  Remote(command_executor="http://localhost:9999",                                                  desired_capabilities=self.desired_capabilities)    def  test_button_tap_should_set_textbox_content(self):        self.driver.find_element_by_id('SetButton').click()        assert  'CARAMBA'  ==  self.driver.find_element_by_id('MyTextBox').text    def  tearDown(self):    self.driver.quit() 24

Page 28: Автоматизация UI тестирования под Windows и Windows Phone

c. Поехали!

1. Запускаем Winium.StoreApps.Driver.exe  (релиз доступен на github)

2. Запускаем тесты и наслаждаемся магией

25

Page 29: Автоматизация UI тестирования под Windows и Windows Phone

DemoWinium.StoreApps VS 2GIS app

26

Page 30: Автоматизация UI тестирования под Windows и Windows Phone

27

Page 31: Автоматизация UI тестирования под Windows и Windows Phone

27

Page 32: Автоматизация UI тестирования под Windows и Windows Phone

https://github.com/2gis/Winium.StoreApps

28

Page 33: Автоматизация UI тестирования под Windows и Windows Phone

Winium for Desktop& Cruciatus

29

Page 34: Автоматизация UI тестирования под Windows и Windows Phone

30

Тестируемое приложение

Рабочий столWinium.CruciatusUI Automation

Framework

Page 35: Автоматизация UI тестирования под Windows и Windows Phone

31

Почему Winium.Cruciatus?

1. Достаточно Professional версии Visual Studio

2. Любой тестовый фреймворк (например NUnit)

3. Легко использовать

Page 36: Автоматизация UI тестирования под Windows и Windows Phone

Пример использования Winium.Cruciatus[Test]  public  void  SetTextButtonTest()  {      var  window  =  CruciatusFactory.Root.FindElementByUid("MainWindow");      var  textBox  =  window.FindElementByUid("TextBox");      var  setButton  =  window.FindElementByUid("SetTextButton");  !

   textBox.SetText("NOT  CARAMBA");      setButton.Click();  !

   Assert.AreEqual(textBox.Text(),  "CARAMBA");  }

32

Page 37: Автоматизация UI тестирования под Windows и Windows Phone

DemoWinium.Cruciatus

33

Page 38: Автоматизация UI тестирования под Windows и Windows Phone

34

Page 39: Автоматизация UI тестирования под Windows и Windows Phone

34

Page 40: Автоматизация UI тестирования под Windows и Windows Phone

https://github.com/2gis/Winium.Cruciatus

35

Page 41: Автоматизация UI тестирования под Windows и Windows Phone

What about driver?

36

Page 42: Автоматизация UI тестирования под Windows и Windows Phone

Ваши тесты на Python, C#, JS,...

JsonWireProtocol over HTTP

37

Winium.Desktop. Driver Тестируемое

приложение

Рабочий столWinium.CruciatusUI Automation

Framework

Page 43: Автоматизация UI тестирования под Windows и Windows Phone

https://github.com/2gis/Winium.Desktop/wiki/Supported-Commands 38

NewSession !Close!Quit!FindElement!FindElements!ClickElement!

Page 44: Автоматизация UI тестирования под Windows и Windows Phone

Считаем на калькуляторе

39

План действий:

1. Запускаем калькулятор

2. Выбираем инженерный режим

3. Считаем "2^8"

4. Закрываем калькулятор

Page 45: Автоматизация UI тестирования под Windows и Windows Phone

#  запускаем  калькулятор  driver  =  Remote(command_executor='http://localhost:9999',                                desired_capabilities={'app':  'C:/windows/system32/calc.exe'})  window  =  driver.find_element_by_class_name('CalcFrame')      #  находим  его  окноview_menu_item  =  window.find_element_by_name('View')            #  и  меню  “Вид”  

Считаем на калькуляторе (python)

40

Page 46: Автоматизация UI тестирования под Windows и Windows Phone

#  запускаем  калькулятор  driver  =  Remote(command_executor='http://localhost:9999',                                desired_capabilities={'app':  'C:/windows/system32/calc.exe'})  window  =  driver.find_element_by_class_name('CalcFrame')      #  находим  его  окноview_menu_item  =  window.find_element_by_name('View')            #  и  меню  “Вид”  view_menu_item.click()    #  раскрываем  менюview_menu_item.find_element_by_name('Scientific').click()  #  выбираем  режим  

Считаем на калькуляторе (python)

41

Page 47: Автоматизация UI тестирования под Windows и Windows Phone

#  запускаем  калькулятор  driver  =  Remote(command_executor='http://localhost:9999',                                desired_capabilities={'app':  'C:/windows/system32/calc.exe'})  window  =  driver.find_element_by_class_name('CalcFrame')      #  находим  его  окноview_menu_item  =  window.find_element_by_name('View')            #  и  меню  “Вид”  view_menu_item.click()    #  раскрываем  менюview_menu_item.find_element_by_name('Scientific').click()  #  выбираем  режим  window.find_element_by_id('132').click()    #  2window.find_element_by_id('97').click()      #   ̂window.find_element_by_id('138').click()    #  8window.find_element_by_id('121').click()    #  =  

Считаем на калькуляторе (python)

42

Page 48: Автоматизация UI тестирования под Windows и Windows Phone

#  запускаем  калькулятор  driver  =  Remote(command_executor='http://localhost:9999',                                desired_capabilities={'app':  'C:/windows/system32/calc.exe'})  window  =  driver.find_element_by_class_name('CalcFrame')      #  находим  его  окноview_menu_item  =  window.find_element_by_name('View')            #  и  меню  “Вид”  view_menu_item.click()    #  раскрываем  менюview_menu_item.find_element_by_name('Scientific').click()  #  выбираем  режим  window.find_element_by_id('132').click()    #  2window.find_element_by_id('97').click()      #   ̂window.find_element_by_id('138').click()    #  8window.find_element_by_id('121').click()    #  =  driver.close()    #  закрываем  калькулятор

Считаем на калькуляторе (python)

43

Page 49: Автоматизация UI тестирования под Windows и Windows Phone

Считаем на калькуляторе (c#)var  dc  =  new  DesiredCapabilities();dc.SetCapability("app",  @"C:/windows/system32/calc.exe");var  driver  =  new  RemoteWebDriver(new  Uri("http://localhost:9999"),  dc);var  window  =  driver.FindElementByClassName("CalcFrame");    //  находим  его  окноvar  viewMenuItem  =  window.FindElement(By.Name("View"));      //  и  меню  “Вид”!viewMenuItem.Click();  //  раскрываем  менюviewMenuItem.FindElement(By.Name("Scientific")).Click();  //  “Инженерный”  режимwindow.FindElement(By.Id("132")).Click();  //  2window.FindElement(By.Id("97")).Click();    //   ̂window.FindElement(By.Id("138")).Click();  //  8window.FindElement(By.Id("121")).Click();  //  =driver.Close();  //  закрываем  калькулятор

44

Page 50: Автоматизация UI тестирования под Windows и Windows Phone

DemoWinium.Desktop VS Calculator

45

Page 51: Автоматизация UI тестирования под Windows и Windows Phone

46

Page 52: Автоматизация UI тестирования под Windows и Windows Phone

46

Page 53: Автоматизация UI тестирования под Windows и Windows Phone

https://github.com/2gis/Winium.Desktop

47

Page 54: Автоматизация UI тестирования под Windows и Windows Phone

Future

48

Page 55: Автоматизация UI тестирования под Windows и Windows Phone

Спасибо

https://github.com/2gis/Winium

Головин Глеб [email protected]

Абалов Николай [email protected]

49