12. SELENIUM
+ Ядро использует JavaScript
+ Кросс-браузерность
+ Кросс-платформенность
+ Поддержка разных языков (Java, PHP, Ruby и т.д.)
– Ограничение JavaScript песочницей
– Нестабильность
– Перегруженное API
16. WEBDRIVER
+ Эмуляция действий пользователя (native events)
+ Кросс-браузерность
+ Кросс-платформенность
+ Поддержка разных языков (Java, PHP, Ruby и т.д.)
+ Объектно-ориентированное API
24. SELENIUM-WEBDRIVER API
Есть ли элемент на странице
browser.find_element id: "does-not-exist"
#=> Selenium::WebDriver::Error::NoSuchElementError: Unable to
locate element: {"method":"id","selector":"does-not-exist"}
25. 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?
26. 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?
Методы-обертки?
50. 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
75. UNDER THE HOOD
WebIDL
https://github.com/jarib/webidl
Парсер Interface Description Language и
генератор Ruby-кода
Обеспечивает поддержку W3C спецификаций
76. UNDER THE HOOD
WatirSpec
https://github.com/watir/watirspec
Набор интеграционных тестов, описывающих и
проверяющих Watir API
79. 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')]