我在尝试用黄瓜测试的页面上有以下HTML。
<div class='try_options'>
<ul>
<li>
<div>
<img alt="" src="/images/main_page1.jpg" />
<div class='right_section'>
<p>
Feature 1
</p>
<a class='suggest_btn' href='url1'>Try Now</a>
</div>
</div>
</li>
<li>
<div>
<img alt="" src="/images/main_page2.jpg" />
<div class='right_section'>
<p>
Feature 2
</p>
<a class='suggest_btn' href='url2'>Try Now</a>
</div>
</div>
</li>
<li>
<div>
<img alt="" src="/images/main_page3.jpg" />
<div class='right_section'>
<p>
Feature 3
</p>
<a class='suggest_btn' href='url3'>Try Now</a>
</div>
</div>
</li>
<li>
<div>
<img alt="" src="/images/main_page4.jpg" />
<div class='right_section'>
<p>
Feature 4
</p>
<a class='suggest_btn' href='url4'>Try Now</a>
</div>
</div>
</li>
</ul>
</div>
基本上,有一些功能,每个功能都有一个“立即尝试”链接。我想测试点击链接是否会将我带到相应功能的页面。
我找到了一个simalar步骤实现here,但是XPATH有问题。任何帮助将不胜感激。
答案 0 :(得分:5)
当我以前做过类似的事情时,我已经使用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是最后的手段。
编辑:
考虑你的评论询问如何在父元素的范围内做其他事情,我会更喜欢做类似下面的事情,这会给你更多的灵活性,并略微削减丑陋的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
答案 1 :(得分:0)
如果您的xpath基于您提供的链接,则可能会获得一系列元素。因此,它不仅仅是一个链接,而是获得一组链接。尝试抓住其中一个链接(如集合中的第一个链接)并使用它。