Перейти к содержимому

Фотография

Как использовать DOM с WebDriver 2.0 C#?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 Sunday8990

Sunday8990

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Плисов Константин
  • Город:Кострома

Отправлено 11 июля 2011 - 18:53

Есть форма для добавления пользователя на портал. Нужно проверить работу формы через тест. Свойства полей ID и Name формируются на основе случайных значений, зависящих от сеанса, выцепить очень сложно - можно ли как-нибудь в WebDriver C# реализовать доступ к полям через DOM?
Изображение
  • 0

#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 12 июля 2011 - 07:35

Вопрос не очень понятен. Что имеется в виду "через DOM"? Все локаторы работают с DOM-деревом, только по разному. XPath и CSS (JQuery) -- этого не достаточно?
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 Sunday8990

Sunday8990

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Плисов Константин
  • Город:Кострома

Отправлено 13 июля 2011 - 18:47

В том-то и дело, xpath пригодится когда есть уникальное расположение тегов в коде. К примеру, если у нас есть форма и несколько инпутов,то запись типа "/input/form" просто найдет первый инпут, и вернет его. Если использовать xpath, то придется писать цикл по обработке всех найденных тегов и выбору конкретного,
че-нибудь вроде foreach(IWebElement n in Inputs){if(n.Value!="text") break; return n;}.
Вот если б можно было написать что-нибудь вроде form.input[3], было бы здорово!
  • 0

#4 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 13 июля 2011 - 20:31

Вы уж определитесь, Вам надо по текстовому содержимому поля искать или по индексу (первое, кстати, навигацией по DOM нельзя обнаружить, а вот XPath справится с такой задачей).

Давайте пока будем считать, что надо найти по индексу, то есть ищем "третий инпут в первой попавшейся форме" (напоминаю на всякий случай, что input это не только текстовое поле, но и чекбокс, а с другой стороны есть ещё textarea)

Итак, вот несколько вариантов на выбор:
driver.findElement(By.xpath("//form/input[3]"));
driver.findElement(By.cssSelector("form > input:nth-of-type(3)"));

driver.findElement(By.tagName("form")).findElements(By.tagName("input"))[2]
(примечание: в большинстве языков индексация с нуля)

Последний вариант, видимо, следует считать ближайшим аналогом "навигации по DOM", но не совсем, потому что findElements ищет на всю глубину.
Ну а при желании можно написать небольшую вспомогательную функцию, которая будет превращать form.input[3] в вышеуказанную длинную цепочку вызовов.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных