2010-07-12 2 views
3

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

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

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 

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

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

ответ

2

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

1

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

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

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

Смежные вопросы