Как я могу проверить с определенным словом является ссылка или нет с огурцом? - PullRequest
0 голосов
/ 23 июля 2010

Я хотел бы этот пользовательский шаг:

Then I should see the link 'foo'

и его противоположность:

But I should not see the link 'foo'

На странице я могу иметь что-то вроде:

lorem foo bar

или альтернативно

lorem <a href=''>foo</a> bar

Мне нужно проверить, когда 'foo' является ссылкой, а когда нет.Спасибо.

Ответы [ 4 ]

1 голос
/ 25 июля 2010

Попробуйте что-то вроде этого (я не пробовал запускать его, поэтому могут потребоваться незначительные изменения):

Then /^I should see the link "([^\"]*)"$/ do |linked_text|
  # AFAIK this raises an exception if the link is not found
  find_link(linked_text)
end

Then /^I should not see the link "([^\"]*)"$/ do |linked_text|
  begin
    find_link(linked_text)
    raise "Oh no, #{linked_text} is a link!"
  rescue
    # cool, the text is not a link
  end
end
0 голосов
/ 22 апреля 2011
Then /^I should not see the link "([^\"]*)"$/ do |linked_text|
  page.should_not have_css("a", :text => linked_text)
end

Then /^I should see the link "([^\"]*)"$/ do |linked_text|
  page.should have_css("a", :text => linked_text)
end
0 голосов
/ 26 июля 2010

Возможно, вам больше повезет с использованием xpaths, вы можете использовать что-то вроде "// a / text () = 'foo'".Вам просто нужно включить xpaths для webrat, я написал сообщение в блоге о том, как сделать что-то похожее с xpaths в таблицах здесь http://www.opsb.co.uk/?p=165,, он включает код, необходимый для включения xpaths для webrat.

0 голосов
/ 23 июля 2010

Уже есть заранее определенные Webrat шаги, которые делают это (или, по крайней мере, очень похожи).От web_steps.rb

Then /^(?:|I )should see \/([^\/]*)\/ within "([^\"]*)"$/ do |regexp, selector|
  within(selector) do |content|
    regexp = Regexp.new(regexp)
    if defined?(Spec::Rails::Matchers)
      content.should contain(regexp)
    else
      assert_match(regexp, content)
    end
  end
end

и

Then /^(?:|I )should not see "([^\"]*)" within "([^\"]*)"$/ do |text, selector|
  within(selector) do |content|
    if defined?(Spec::Rails::Matchers)
      content.should_not contain(text)
    else
      hc = Webrat::Matchers::HasContent.new(text)
      assert !hc.matches?(content), hc.negative_failure_message
    end
  end
end
...