Проверка элемента отсутствует с помощью WebRat - PullRequest
1 голос
/ 27 октября 2009

Следующее работает просто отлично:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should contain(name)
    end
  end
end

Теперь мне нужно дополнить его следующим шагом:

Then /^I should not see a button called "([^\"]*)"$/ do |name|
   [snip...]
end

Стандарт «И я не должен видеть» не является удовлетворительным, поскольку он подберет целевую фразу в любом месте страницы, а не только внутри кнопок. Мне нужно убедиться, что ни одна кнопка с целевым текстом отсутствует.

Моим первым инстинктом было попробовать что-то вроде этого:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should_not contain(name)
    end
  end
end

Но, конечно, это пройдет, пока на странице есть какая-либо кнопка, которая не содержит целевой текст, даже если есть также одна или несколько кнопок, которые включают целевой текст.

Ваши мысли?

Большое спасибо,

Стивен.

Ответы [ 3 ]

2 голосов
/ 27 октября 2009

Вы можете использовать assert_not_contain (и, возможно, not_contain, но я сомневаюсь в этом, поскольку его нет в rdoc ).

a.should assert_not_contain(name)
1 голос
/ 29 октября 2009

Проблема решена! Я дал каждому контролю класс «контроль», затем написал определение этого шага:

Then /^I should not see a control called "([^\"]*)"$/ do |name|
  response.should have_selector("a.control", :content => name, :count
=> 0)
end

Конечно, это предполагает, что я счастлив дать им всем класс "Контроль" ...

s.

0 голосов
/ 27 октября 2009

Ваши кнопки на самом деле ссылки? Для кнопок (где есть значение отправки) я использую:

assert_have_selector "input[type=submit][value=\"#{text}\"]"

и

assert_have_no_selector "input[type=submit][value=\"#{text}\"]"

НТН.

...