确定链接是否存在w / Cucumber / Capybara

时间:2010-12-12 04:32:42

标签: cucumber capybara

我想验证页面上是否存在具有特定href的链接。我目前正在做我应该看到“/ some-link-here”但似乎失败了。如何确保链接存在而无需点击+我应该在“/ some-link-here”页面上?

4 个答案:

答案 0 :(得分:5)

您需要添加自定义步骤

Then /^"([^\"]*)" should link to "([^\"]*)"(?: within "([^\"]*)")$/ do |link_text, 
page_name, container|
  with_scope(container) do
    URI.parse(page.find_link(link_text)['href']).path.should == path_to(page_name)
  end
end

您可以使用Then "User Login" should link to "the user_login page"之类的步骤,user_login是您路线的名称

答案 1 :(得分:0)

我使用了jatin的答案,但有一个单独的范围界定步骤:

When /^(.*) within ([^:]+)$/ do |step, parent|
  with_scope(parent) { When step }
end

Then /^"([^\"]*)" should link to "([^\"]*)"$/ do |link_text, page_name|
  URI.parse(page.find_link(link_text)['href']).path.should == path_to(page_name)
end

然后我在测试中有这个:

step '"my foods" should link to "food_histories" within ".tabs"'

这就在我的路上:

# note: lots not shown
def path_to(page_name)
  case page_name
  when /^food_histories$/
    food_histories_path
  end
end

答案 2 :(得分:0)

这就是我自己做的,非常简单,但它确实意味着你正在硬编码你的网址,说实话并不理想,因为它会让你的测试变得非常脆弱。特别是如果您使用的是第三方网址!

但是如果你使用的是你管理的网址,并且很乐意维持这个测试,那就去吧。

Then /^the link is "(.*?)"$/ do |arg1|
   page.should have_xpath("//a[@href='" + arg1 + "'][@target='_blank']")
end

答案 3 :(得分:0)

寻找解决方案时,我首先来到这里,以为我会提供最新的答案。这取决于您的水豚语法,但是使用匹配器has_link?可以为href = /some-link-herelink_text "Click Me"

编写

expect(page).to have_link("Click Me", href: '/some-link-here')