Итерация по всем полям формы с селеном в ruby - PullRequest
3 голосов
/ 12 июля 2010

Я пытаюсь проверить, что все мои поля формы имеют связанную метку с помощью Selenium, но у меня возникают проблемы с захватом всех полей формы на странице.get_all_fields получает только текстовые поля;У меня нет возможности также захватить пароли, радио, флажки и т. Д.

Я пытался что-то вроде этого:

num_fields = Integer(selenium.get_xpath_count("//input"))

1.upto(num_fields) do |field_number|
  input_id = selenium.get_attribute("//input[#{field_number}]@id")

  selenium.element?("css=label[for=#{input_id}]")

end

Проблема в том, что // input [1] не 'т работа;входы вкладываются в разметку в зависимости от страницы.

Есть ли способ использовать локатор селена для общего получения первого, второго и т. д. ввода?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Попробуйте использовать //body/descendant::input[#{field_number}].

1 голос
/ 16 июля 2010

Изучение того, как работает XPath, поможет с такого рода тестированием;Предложение Дейва Ханта о //body/descendant::input[#{field_number}] довольно хорошо;часть descendant::input вернет массив, в который будет индексироваться field_number.

Есть и другие оси XPath, которые также будут давать массивы - вы также можете использовать элемент формы в качестве начала потомков, а неbody.

Единственным недостатком является то, что выражение xpath будет вычисляться каждый раз вокруг цикла.Если у вас много элементов управления вводом или медленный браузер, такой как IE, это может занять сравнительно много времени, особенно если у вас есть другие стандартные проверки.Возможно, вам лучше использовать selenium.get_html_source и разработать класс WebStandardsChecker для оценки страницы за один проход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...