2010-12-12 26 views
3

我想验证具有特定href的链接是否存在于页面上。我目前正在做我应该看到“/ some-link-here”,但似乎失败。我怎样才能确保链接存在,而不必点击+我应该在“/ some-link-here”页面?确定链接是否存在w黄瓜/水豚

回答

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是你的路线

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 
0

这是我做了我自己,很简单,但它确实意味着你硬编码您的网址这是诚实的,因为它使你的测试很脆不理想。特别是如果您使用的是第三方网址!

但是,如果您使用的是您管理的网址,并且很乐意继续进行此测试,那就去做吧。

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