2009-09-16 10 views
2

Я буду коротким.Получить элементы по атрибутам

Насколько я знаю, библиотека watir предоставляет два метода для получения элементов html.

Почти для каждого элемента (Div, кнопки, таблицы, Li и т.д.) Watir обеспечивает два метода:

. Один - это метод «единственного», который получает только один конкретный элемент. Например:

watir_instance.div(:id,'my_div_id') 
watir_instance.link(:href,'my_link_href') 
watir_instance.button(:class =>'my_button_class', :index => 4) 

Эти методы будут извлекать только один элемент. Это нормально ...

. Во-вторых, «множественное число» метод, который возвращает все элементы экземпляра Watir

watir_instance.divs 
watir_instance.links 
watir_instance.buttons 

Но, насколько я знаю, Watir не предоставляет метод для получения более одного элемента дает определенные условия.

Например ... Если я хочу прошить все ссылки с идентификатором: my_link_id было бы очень легко сделать что-то вроде этого:

watir_instance.divs(:id, 'my_link_id').each do |link| 
    link.flash 
end 

С Hpricot эту задачу очень легко ... но если ваша цель - не разбираться, я не смог найти метод Watir, который делает то, что я хочу.

Надеется, что вы можете понять меня ...

Ура, Хуан !!

ответ

2

Хуан,

сценарий имеет несколько проблем:

  • Вы говорите, что вы хотите прошить все ссылки, но затем использовать watir_instance.divs. Это должно быть watir_instance.links
  • вы передаете аргументы divs метод: watir_instance.divs(:id, 'my_link_id'). Это должно быть просто watir_instance.divs

Ваш пример также странно:

я хочу прошить все ссылки с ID: my_link_id

Насколько я знаю, идентификатор должен быть уникальный на странице.

Итак, различные примеры:

1) Флэш все ссылки на этой странице:

require "watir" 
b = Watir::IE.start "http://stackoverflow.com/questions/1434697" 
b.links.each do |link| 
    link.flash 
end 

2) вспышка все ссылки на этой странице, которые имеют questions в URL (бонус: прокрутка страницы поэтому видна мигающая линия):

require "watir" 
b = Watir::IE.start "http://stackoverflow.com/questions/1434697" 
b.links.each do |link| 
    if link.href =~ /questions/ 
    link.document.scrollintoview 
    link.flash 
    end 
end 
+0

Большое спасибо Zeljko! Но я думаю, что я не очень хорошо объясняю свою проблему и то, что хочу делать ... Я просто спрашивал, поддерживает ли watir такой метод, как divs, но принимает параметры ... Например, если мне пришлось замаскировать все ссылки с помощью класса 'my_class', я бы поставил что-то вроде этого: b = Watir :: IE.start "xxxxxxx" b.links (: class, 'myclass'). each do | link | link.flash end Существует ли какой-либо метод? В любом случае, если этот метод не существует, в вашем примере я видел способ исправить мою проблему; a выполняет условие if, сравнивающее атрибут. – flyer88

+0

Короткий ответ: нет. Ответ немного длиннее: насколько я знаю, когда вы запрашиваете коллекцию элементов (divs, links ...), вы получаете их все, нет способа получить только некоторые элементы (например, ссылки с определенным классом). К счастью, мой ответ решает эту проблему. –