3

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

4

4 回答 4

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 是您的路线名称

于 2010-12-12T08:18:03.870 回答
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
于 2012-03-19T13:58:18.917 回答
0

这是我自己所做的,非常简单,但这确实意味着您正在对您的 url 进行硬编码,老实说这并不理想,因为它使您的测试非常脆弱。特别是如果您使用的是第 3 方 URL!

但是,如果您使用的是您自己管理的 url,并且很乐意维护这个测试,那么就去做吧。

Then /^the link is "(.*?)"$/ do |arg1|
   page.should have_xpath("//a[@href='" + arg1 + "'][@target='_blank']")
end
于 2013-10-08T14:20:19.857 回答
0

在寻找解决方案时,我首先来到这里,并认为我会给出更新的答案。这取决于您的水豚语法是什么,但是使用has_link?您可以编写的匹配器href = /some-link-herelink_text "Click Me"

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

于 2018-09-11T12:08:20.867 回答