Есть форма для добавления пользователя на портал. Нужно проверить работу формы через тест. Свойства полей ID и Name формируются на основе случайных значений, зависящих от сеанса, выцепить очень сложно - можно ли как-нибудь в WebDriver C# реализовать доступ к полям через DOM?
Как использовать DOM с WebDriver 2.0 C#?
Автор Sunday8990, 11 июл 2011 18:53
Сообщений в теме: 3
#1
Отправлено 11 июля 2011 - 18:53
#2
Отправлено 12 июля 2011 - 07:35
Вопрос не очень понятен. Что имеется в виду "через DOM"? Все локаторы работают с DOM-деревом, только по разному. XPath и CSS (JQuery) -- этого не достаточно?
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#3
Отправлено 13 июля 2011 - 18:47
В том-то и дело, xpath пригодится когда есть уникальное расположение тегов в коде. К примеру, если у нас есть форма и несколько инпутов,то запись типа "/input/form" просто найдет первый инпут, и вернет его. Если использовать xpath, то придется писать цикл по обработке всех найденных тегов и выбору конкретного,
че-нибудь вроде foreach(IWebElement n in Inputs){if(n.Value!="text") break; return n;}.
Вот если б можно было написать что-нибудь вроде form.input[3], было бы здорово!
че-нибудь вроде foreach(IWebElement n in Inputs){if(n.Value!="text") break; return n;}.
Вот если б можно было написать что-нибудь вроде form.input[3], было бы здорово!
#4
Отправлено 13 июля 2011 - 20:31
Вы уж определитесь, Вам надо по текстовому содержимому поля искать или по индексу (первое, кстати, навигацией по DOM нельзя обнаружить, а вот XPath справится с такой задачей).
Давайте пока будем считать, что надо найти по индексу, то есть ищем "третий инпут в первой попавшейся форме" (напоминаю на всякий случай, что input это не только текстовое поле, но и чекбокс, а с другой стороны есть ещё textarea)
Итак, вот несколько вариантов на выбор:
Последний вариант, видимо, следует считать ближайшим аналогом "навигации по DOM", но не совсем, потому что findElements ищет на всю глубину.
Ну а при желании можно написать небольшую вспомогательную функцию, которая будет превращать form.input[3] в вышеуказанную длинную цепочку вызовов.
Давайте пока будем считать, что надо найти по индексу, то есть ищем "третий инпут в первой попавшейся форме" (напоминаю на всякий случай, что 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] в вышеуказанную длинную цепочку вызовов.
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных