Upgrade to Pro — share decks privately, control downloads, hide ads and more …

From Selenium to Watir

From Selenium to Watir

Talk from CodeFest 2013 comparing Watir and Selenium (Russian)
http://2013.codefest.ru/doklad/24

Alex Rodionov

March 30, 2013
Tweet

More Decks by Alex Rodionov

Other Decks in Technology

Transcript

  1. SELENIUM + Ядро использует JavaScript + Кросс-браузерность – Ограничение JavaScript

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

    Кросс-платформенность + Поддержка разных языков (Java, PHP, Ruby и т.д.) + Объектно-ориентированное API
  3. Есть ли элемент на странице browser.find_element id: "does-not-exist" #=> Selenium::WebDriver::Error::NoSuchElementError:

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

    Unable to locate element: {"method":"id","selector":"does-not-exist"} SELENIUM-WEBDRIVER API Monkey patch? Методы-обертки?
  5. Ленивая инициализация 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"} WATIR API
  6. 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
  7. 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"
  8. UNDER THE HOOD .//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')] browser.text_field =