SlideShare a Scribd company logo
1 of 95
Download to read offline
ОТ SELENIUM К WATIR
  ПУТЬ К ПРОСВЕТЛЕНИЮ
АЛЕКСЕЙ РОДИОНОВ

• 7+   лет в тестировании

• Контрибутор   в Mozilla (WebQA)

• Разработчик Watir   с июля 2012
WATIR

• Web    application testing in Ruby

• 10   лет

• 750,000    загрузок
СИСТЕМЫ АВТОМАТИЗАЦИИ БРАУЗЕРОВ
СИСТЕМЫ АВТОМАТИЗАЦИИ БРАУЗЕРОВ




   2002   2004   2006   2008   2010   2012
СИСТЕМЫ АВТОМАТИЗАЦИИ БРАУЗЕРОВ


     Watir




   2002   2004   2006   2008   2010   2012
WATIR

+ Управление через Windows OLE
+ Стабильность
– Только IE
– Только Windows
– Только Ruby
WATIR


browser.goto "http://www.google.com"
browser.text_field(:name, "q").value = "Watir"
browser.button(:name, "btnG").click
WATIR

 FireWatir
OperaWatir
SafariWatir
СИСТЕМЫ АВТОМАТИЗАЦИИ БРАУЗЕРОВ


     Watir
          Selenium




   2002    2004      2006   2008   2010   2012
SELENIUM
+ Ядро использует JavaScript
+ Кросс-браузерность
+ Кросс-платформенность
+ Поддержка разных языков (Java, PHP, Ruby и т.д.)

– Ограничение JavaScript песочницей
– Нестабильность
– Перегруженное API
SELENIUM


browser.keyPress
browser.type
browser.typeKeys
SELENIUM


browser.open "http://www.google.com"
browser.type "name=q", "Selenium"
browser.click "name=btnG", :wait_for => :page
СИСТЕМЫ АВТОМАТИЗАЦИИ БРАУЗЕРОВ


     Watir
          Selenium
               WebDriver




   2002    2004      2006   2008   2010   2012
WEBDRIVER

+ Эмуляция действий пользователя (native events)
+ Кросс-браузерность
+ Кросс-платформенность
+ Поддержка разных языков (Java, PHP, Ruby и т.д.)
+ Объектно-ориентированное API
WebDriver API


WebDriver SPI


    JSON


  Браузер
NativeDriver
 ios-driver
СИСТЕМЫ АВТОМАТИЗАЦИИ БРАУЗЕРОВ


     Watir
          Selenium
               WebDriver
                               Selenium-WebDriver




   2002    2004      2006   2008   2010   2012
SELENIUM-WEBDRIVER API
SELENIUM-WEBDRIVER API


– Есть ли элемент на странице
SELENIUM-WEBDRIVER API


– Есть ли элемент на странице
– Строки CSS/XPath локаторов
SELENIUM-WEBDRIVER API
    Есть ли элемент на странице
SELENIUM-WEBDRIVER API
             Есть ли элемент на странице

browser.find_element id: "does-not-exist"
#=> Selenium::WebDriver::Error::NoSuchElementError: Unable to
locate element: {"method":"id","selector":"does-not-exist"}
SELENIUM-WEBDRIVER API
             Есть ли элемент на странице

browser.find_element id: "does-not-exist"
#=> Selenium::WebDriver::Error::NoSuchElementError: Unable to
locate element: {"method":"id","selector":"does-not-exist"}



                      Monkey patch?
SELENIUM-WEBDRIVER API
             Есть ли элемент на странице

browser.find_element id: "does-not-exist"
#=> Selenium::WebDriver::Error::NoSuchElementError: Unable to
locate element: {"method":"id","selector":"does-not-exist"}



                     Monkey patch?
                    Методы-обертки?
SELENIUM-WEBDRIVER API
      CSS/XPath локаторы
SELENIUM-WEBDRIVER API
           CSS/XPath локаторы

  browser.find_element css: ".div1 .div2 .div3"
SELENIUM-WEBDRIVER API
           CSS/XPath локаторы

  browser.find_element css: ".div1 .div2 .div3"



     Конкатенация строк локаторов?
SELENIUM-WEBDRIVER API
           CSS/XPath локаторы

  browser.find_element css: ".div1 .div2 .div3"



     Конкатенация строк локаторов?
         Цепочки из find_element?
WATIR API
WATIR API
Имя метода = название тэга
WATIR API
Имя метода = название тэга

       browser.div
       browser.span
       browser.button
       browser.img
       browser.a
browser.header
WATIR API
Сохранение DOM иерархии
WATIR API
Сохранение DOM иерархии

    browser.div.span
    browser.frame.a
    browser.table.tbody.td
browser.header.div.div.div.a
browser.header.a(class: 'b-logo__image')
WATIR API
Коллекции элементов
WATIR API
Коллекции элементов

browser.divs.each do |div|
  div.text
end
browser.table.trs.map do |tr|
  tr.td(index: 2).text
end
#=> ["$500.00", "$5,600.00"]
WATIR API
Ленивая инициализация
WATIR API
                  Ленивая инициализация

link = browser.a(class: "does-not-exist")
link.exists? #=> false
link.click
#=> Watir::Exception::UnknownObjectException: unable to locate
element, using {:class=>"does-not-exist", :tag_name=>"a"}
Admin
Admin

User
Admin

 User

def project
  {
    user: project_div.span(class: "user").text,
    job: project_div.span(class: "job").text,
  }
end
Admin

 User

def project
  {
    user: project_div.span(class: "user").text,
    job: project_div.span(class: "job").text,
    change_link: project_div.a(text: "Change Commitment")
  }
end
Admin

 User

def project
  {
    user: project_div.span(class: "user").text,
    job: project_div.span(class: "job").text,
    change_link: project_div.a(text: "Change Commitment")
  }
end


project[:change_link].click #=> Admin: "Ok"
project[:change_link].click #=> User: "UnknownObjectException"
WATIR API
Удобная работа с Ajax
WATIR API
               Удобная работа с Ajax

browser.button(id: "button").when_present.click
browser.text_field(id: "field").when_visible.set "watir"
browser.img(id: "image").wait_while_present
WATIR API
Поддержка “текстовых” локаторов
WATIR API
Поддержка “текстовых” локаторов


   browser.text_field label: "Email"
   browser.button text: "Submit"
WATIR API
Множественные локаторы
WATIR API
            Множественные локаторы

browser.img class: "image", index: 3
WATIR API
            Множественные локаторы

browser.img class: "image", index: 3

browser.find_element xpath: "(//img[@class='image'])[4]"
WATIR API
Кастомные аттрибуты
WATIR API
 Кастомные аттрибуты

browser.div data_attr: "attr"
WATIR API
Регулярные выражения в локаторах
WATIR API
Регулярные выражения в локаторах

     browser.a id: /job_d+_name/
Старый дизайн
Старый дизайн
Старый дизайн




def message
  browser.div(class: "flash_notice").text
end
Старый дизайн




def message
  browser.div(class: "flash_notice").text
end

            Новый дизайн
Старый дизайн




def message
  browser.div(class: "flash_notice").text
end

            Новый дизайн
Старый дизайн




def message
  browser.div(class: /(flash_|b-)notice/).text
end

            Новый дизайн
WATIR API
  Checkers
WATIR API
                 Checkers

browser.add_checker do |page|
  if page.text.include?("Server Error")
    raise TestError, "Application exception!"
  end
end
WATIR API
        Checkers

1. При переходе по URL
2. При обновлении страницы
3. При клике по элементу
WATIR API

    Alert API
  Cookies API
 Screenshot API
Selenium-WebDriver
         +
       Watir
         =
Watir-WebDriver
the most elegant way to use webdriver in ruby
WebDriver API


WebDriver SPI


    JSON


  Браузер
Watir API


WebDriver API


WebDriver SPI


    JSON


  Браузер
UNDER THE HOOD
UNDER THE HOOD

                  WebIDL
            https://github.com/jarib/webidl

  Парсер Interface Description Language и
          генератор Ruby-кода

Обеспечивает поддержку W3C спецификаций
UNDER THE HOOD

                 WatirSpec
           https://github.com/watir/watirspec

Набор интеграционных тестов, описывающих и
          проверяющих Watir API
UNDER THE HOOD


Конструктор XPath запросов
 Конструктор CSS запросов
UNDER THE HOOD

    browser.text_field
UNDER THE HOOD

                                            browser.text_field

                                                          =
.//input[not(@type) or (translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='file' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='radio' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='checkbox' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='submit' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='reset' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='image' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='button' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='hidden' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='datetime' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='date' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='month' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='week' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='time' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='datetime-local' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='range' and
                        translate(@type,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')!='color')]
СЕЙЧАС
СЕЙЧАС

Watir-Classic
    +
Watir-WebDriver
СЕЙЧАС

Watir-Classic
    +
Watir-WebDriver
    =
Watir 4
WATIR 4

Watir::Browser.new :internet_explorer
Watir::Browser.new :firefox
Watir::Browser.new :chrome
Watir::Browser.new :phantomjs
ПРОСВЕТЛЕНИЕ?
ПРОСВЕТЛЕНИЕ?

    Легкость
ПРОСВЕТЛЕНИЕ?

    Легкость
    Скорость
ПРОСВЕТЛЕНИЕ?

     Легкость
    Скорость
    Поддержка
ПРОСВЕТЛЕНИЕ?

     Легкость
     Скорость
    Поддержка
    Понимание
ПРОСВЕТЛЕНИЕ?

     Легкость
     Скорость
    Поддержка
    Понимание
    WebDriver
ССЫЛКИ
ССЫЛКИ

 http://watir.com
ССЫЛКИ

      http://watir.com
http://watirwebdriver.com
ССЫЛКИ

                 http://watir.com
           http://watirwebdriver.com
http:://groups.google.com/group/watir-general
ССЫЛКИ

                 http://watir.com
           http://watirwebdriver.com
http:://groups.google.com/group/watir-general
            http://github.com/watir
?
     @p0deje
p0deje@gmail.com
github.com/p0deje

More Related Content

What's hot

Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
REST и HATEOAS
REST и HATEOASREST и HATEOAS
REST и HATEOASArtem Bey
 
API Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классAPI Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классYandex.Maps
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQAFest
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаIlya Chesnokov
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
Ф'Yii'лософия
Ф'Yii'лософияФ'Yii'лософия
Ф'Yii'лософияPaul Klimov
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Зачем нужен EmberJS, если мне хвататет jQuery
Зачем нужен EmberJS, если мне хвататет jQueryЗачем нужен EmberJS, если мне хвататет jQuery
Зачем нужен EmberJS, если мне хвататет jQuerySergey Bolshchikov
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
 

What's hot (20)

Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
REST и HATEOAS
REST и HATEOASREST и HATEOAS
REST и HATEOAS
 
API Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классAPI Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-класс
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профи
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервиса
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
Ф'Yii'лософия
Ф'Yii'лософияФ'Yii'лософия
Ф'Yii'лософия
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Зачем нужен EmberJS, если мне хвататет jQuery
Зачем нужен EmberJS, если мне хвататет jQueryЗачем нужен EmberJS, если мне хвататет jQuery
Зачем нужен EmberJS, если мне хвататет jQuery
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
 

Viewers also liked

CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...CodeFest
 
CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...
CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...
CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...CodeFest
 
CodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать все
CodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать всеCodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать все
CodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать всеCodeFest
 
CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...
CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...
CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...CodeFest
 
CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?
CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?
CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?CodeFest
 
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...CodeFest
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest
 
CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...
CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...
CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...CodeFest
 
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...CodeFest
 

Viewers also liked (9)

CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
 
CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...
CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...
CodeFest 2014. Снитко Д. — Арт-дирекшен. Как сделать так, чтобы дизайн расска...
 
CodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать все
CodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать всеCodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать все
CodeFest, июль 2012. Кобзев Е. — Маркетинг должны делать все
 
CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...
CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...
CodeFest 2013. Селиванов В. — Юридическое оформление отношений с разработчика...
 
CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?
CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?
CodeFest 2013. Белый И. — Marmalade SDK. Что под капотом?
 
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
 
CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...
CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...
CodeFest 2012. Тиняков И. — Как попасть в ТОП-10 магазина Windows Phone 7, по...
 
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
 

Similar to CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению

Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Andrey Rebrov
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...Alexey Makhov
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...AvitoTech
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funAlexandr Khotemskoy
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETMikhail Shcherbakov
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 

Similar to CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению (20)

Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Telerik Web aii
Telerik Web aiiTelerik Web aii
Telerik Web aii
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Viper architecture
Viper architectureViper architecture
Viper architecture
 

More from CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению