确定是否存在与Cucumber/Capybara的链接

确定是否存在与Cucumber/Capybara的链接,cucumber,capybara,Cucumber,Capybara,我想验证页面上是否存在具有特定href的链接。我目前正在做我应该看到“/这里有一些链接”,但这似乎失败了。如何确保链接存在而不必单击“/此处有链接”页面上的“我应该在这里”按钮?您需要添加自定义步骤 Then /^"([^\"]*)" should link to "([^\"]*)"(?: within "([^\"]*)")$/ do |link_text, page_name, container| with_scope(container) do URI.parse(pag

我想验证页面上是否存在具有特定href的链接。我目前正在做我应该看到“/这里有一些链接”,但这似乎失败了。如何确保链接存在而不必单击“/此处有链接”页面上的“我应该在这里”按钮?

您需要添加自定义步骤

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

您可以使用类似
的步骤,然后“用户登录”应链接到“用户登录页面”
,用户登录是您路线的名称

我使用了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

这是我自己做的,非常简单,但它确实意味着你正在硬编码你的url,老实说,这并不理想,因为它使你的测试非常脆弱。尤其是当你使用第三方网址的时候

但是,如果您使用的是您管理的url,并且很乐意维护此测试,那么请尝试使用它

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

我第一次来到这里,是在寻找解决方案时,我想我会给出最新的答案。这取决于您的capybara语法是什么,但是使用matcher您可以为
href=/some link here
link\u text“Click Me”

expect(第页)。拥有链接(“单击我”,href:“/some link here”)