Когда я делал нечто подобное раньше, я использовал XPath, чтобы найти элемент «идентификатор» - в вашем случае тег p
, содержащий, например, «Feature 1», затем прошел по DOM к общему родителю (li
здесь) и снова вниз, чтобы найти того брата, которого я преследовал (например, ссылку, связанную с p
). Это может работать для вас:
def find_link_for_feature(feature_name)
find(:xpath, "//p[contains(.,'#{feature_name}')]/ancestor::li/descendant::a")
end
find_link_for_feature('Feature 1').click
Возможно, вы захотите добавить дополнительную фильтрацию, чтобы она только находила ссылку с классом suggest_btn
, в зависимости от вашей ситуации.
Однако, как я уже упоминал в комментарии к вопросу, я предпочитаю изменять разметку, чтобы она действительно тестировалась без необходимости прыгать через такие обручи! Я считаю, что этот тип XPath - это последнее средство, когда я не могу изменить разметку.
EDIT:
Думая о вашем комментарии, спрашивающем, как сделать другие вещи в области действия родительского элемента, я бы больше соблазнился сделать что-то вроде следующего, что дает вам больше гибкости и слегка обрезает уродливый XPath: *
def find_section_for_feature(feature_name)
find(:xpath, "//p[contains(.,'#{feature_name}')]/ancestor::li")
end
within find_section_for_feature('Feature 1') do
click_link 'Try Now'
# Anything else you want to do
and