вторник, 4 декабря 2012 г.

Особенности selenium


Элементы теста:
  1. Приложение - драйвер
  2. Тестовая логика (описание)
    -предусловия
    -сценарии
    -постусловия
  3. Технические детали (код)
  4. Тестовые данные

Основные принципы:
  1. Повторное использование кода
  2. Атомарные тесты
  3. DSL - разбиение на тестовую логику и технические детали (логика не зависит ни от переменных, ни от реализации)
  4. Справочник доменных понятий
Локаторы:

В отличае от сахи нет разделения на веб-элементы (span,textarea и тд)

Selenium предлагает семь встроенных способов поиска элементов:

Простые локаторы
  • по идентификатору элемента (значению атрибута id)
  • element = driver.find_element(:id, 'some-frame')
  • по имени элемента (значению атрибута name)
  • element = driver.find_element(:name, 'q')
  • по классу элемента(значению атрибута class)
  • element = driver.find_element(:class, 'news') (или по class_name)
    element = driver.find_element(:class_name, 'news') 
  • по тексту ссылки
  • element = driver.find_element(:link, "Зарегистрироваться") (или по link_text)
    element = driver.find_element(:link_text, "Зарегистрироваться")
    element = driver.find_element(:partial_link_text, "Регистрация") (ищется вхождение в текст ссылки)
  • по названию тега элемента
  •  element = driver.find_element(:tag_name, 'td') 
Сложные локаторы
  • по запросу XPath
  • element = driver.find_element(:xpath, "//div[@id='content']/*/span")
    element = driver.find_element(:xpath, "/html/body/div") - ищем от корня
    element = driver.find_element(:xpath, "//input") - ищем по всем вложениям элемент input
    element = driver.find_element(:xpath, "//*[@id=menu]") - ищем любой элемент с id menu
    element = driver.find_element(:xpath, "//menu")
    element = driver.find_element(:xpath, "//span[@class=test and @name=span]") и 
  • element = driver.find_element(:xpath, "//span [@class=test][@name=span]") или
  • element = driver.find_element(:xpath, "//a[text()='some text']")
    element = driver.find_element(:xpath, "//div[1]") или
    element = driver.find_element(:xpath, "//div[position()=1]")
    element = driver.find_element(:xpath, "//div[@id='test' and contains()='text']")
    element = driver.find_element(:xpath, "//div[@id='it']/*/a[counts()=1]")
    element = driver.find_element(:xpath, "/descendant::div[@id='my']/descendant::a[1]")
    Ищем среди потомков документы див my, а среди его потомков первую ссылку
    element = driver.find_element(:xpath, "//a[ancestor::div[@id='my']]")
    Ищем ссылку с родителем div (c id my)
  • element = driver.find_element(:xpath, "//*[contains(text(),'ABC')]")
  • по селектору CSS
  • обращаемся к элементам
  • element = driver.find_element(:css, "span.toolbar-link") по классу
    element = driver.find_element(:css, "span#news_class") по id
    element = driver.find_element(:css, "p") по тегу - находим все элементы p
    element = driver.find_element(:css, "*") все элементы на странице
  • обращается по атрибутам
  • element = driver.find_element(:css, "div[class=toolbar_menu]") полное совпадение
    element = driver.find_element(:css, "div[class^=toolbar]") начинается с
    element = driver.find_element(:css, "div[class$=menu]") оканчивается на
    element = driver.find_element(:css, "div[class]") div у которого есть атрибут class
    element = driver.find_element(:css, "div[class*=bar]") содержит текст
  • отношения элементов друг к другу
  • element = driver.find_element(:css, "div a") ищем все ссылки в дивах (все потомки в любой вложенности)
    element = driver.find_element(:css, "div > a") ищем ссылки в дивах (непосредственный потомки - между ними не должно быть других элементов)
    element = driver.find_element(:css, "div + div") ищем элемент сразу за элементом (между ними не должно быть других элементов)
    element = driver.find_element(:css, "div ~ div") ищем элемент за элементом (между ними могут быть другие элементы)
    element = driver.find_element(:css, "div:contains('text')") div содержит текст
    element = driver.find_element(:css, "div#menu a:nth-of-type(1)") Первая ссылка в диве с id menu
    element = driver.find_element(:css, "span[name=hello][background=green]") Ищем элемент  с 2 атрибутами
Метод, начинающийся со слов findElement находит первый элемент, удовлетворяющий условиям поиска, а метод, начинающийся с findElements – все подходящие элементы

Подробнее про локаторы для руби тут
Отличный вебинар по локаторам от Михаила Поляруша - ссылка
Подробнее про локаторы вцелом тут и тут
Про то как правильно подбирать локаторы - подробнее

Команды

Комментариев нет:

Отправить комментарий