2013-11-13 4 views
1

Могу ли я найти элемент (любого типа) по его содержимому с Capybara?Capybara найти элемент по содержанию

В идеале я хотел бы написать такой код:

find('Copy from a paragraph') # finds the p element 
find('Copy from a link')   # finds a element 
find('Copy from a button')  # finds button element 

т.д.

+1

Что вы подразумеваете под "стоимостью"? Вы имеете в виду атрибут ценности элемента? Я думаю, что только элементы ввода обычно имеют атрибут value. –

+0

Спасибо, что спросили. Я имел в виду «по содержанию» и отредактировал вопрос. –

ответ

1

все могли бы ответить на этот вопрос

desired_element = nil 
all('p').each do |elem| 
    if elem.text == 'Copy from a paragraph' 
    desired_element = elem 
    end 
end 

заменить 'р' с 'A' или '' вход по мере необходимости.

Надеется, что это помогает

1

Я не считаем, что этим решение, которое вам нравится. Рассмотрим этот HTML:

<div> 
    <p> 
    <span>hello</span> 
    </p> 
</div> 

Все три из этих элементов "содержит" текст hello. Каждый содержащий элемент (body, html и т. Д.) Будет соответствовать. Возможно, вы можете помочь нам понять, почему вы хотите это сделать?

2

Если вы знаете тип элемента, можно написать:

find('p', text: 'text in paragraph') 
find('a', text: 'text in link') 
find('button', text: 'text in button') 
1

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

Ответ не является окончательным, но он работает. Все, что необходимо на этом шаге, - иметь дело с точным соответствием лучше, чем с использованием регулярного выражения.

search = find(:css, #{parent_selector}).find(:css, '*', :text => /\A#{element_text}\z/) 
Смежные вопросы