Определение, существует ли ссылка с огурцом / капибарой - PullRequest
3 голосов
/ 12 декабря 2010

Я хочу убедиться, что на странице существует ссылка с определенной ссылкой. В настоящее время я делаю, я должен увидеть "/ some-link-here", но это, похоже, не сработало. Как я могу убедиться, что ссылка существует, не нажимая кнопку + Я должен быть на странице / some-link-here?

Ответы [ 4 ]

5 голосов
/ 12 декабря 2010

Вам нужно будет добавить пользовательский шаг

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 голосов
/ 11 сентября 2018

Я впервые приземлился здесь, когда искал решение, и подумал, что дам обновленный ответ.Это зависит от синтаксиса вашей капибары, но с помощью соответствия has_link? вы можете написать для href = /some-link-here и link_text "Click Me"

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

0 голосов
/ 08 октября 2013

Это то, что я сделал сам, довольно просто, но это означает, что вы жестко программируете свой URL, который, честно говоря, не идеален, поскольку делает ваш тест очень хрупким. Особенно, если вы используете сторонние URL!

Но если вы используете URL-адрес, которым управляете, и рады, что можете продолжить этот тест, то сделайте это.

Then /^the link is "(.*?)"$/ do |arg1|
   page.should have_xpath("//a[@href='" + arg1 + "'][@target='_blank']")
end
0 голосов
/ 19 марта 2012

Я использовал ответ Джатина, но у меня есть отдельный шаг определения:

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
...