Вебрат говорит, что не может найти текст, но текст на самом деле там - PullRequest
3 голосов
/ 15 апреля 2010

У меня есть веб-страница, на которой есть кнопка формы, которая называется «удалить», и сценарий «Cuke» со строкой:

And I should see "delete"

Когда я запускаю сценарий, я получаю эту ошибку:

expected the following element's content to include "delete"

... и он выводит страницу webrat в stdout, а "delete" на самом деле не существует. Все идет нормально. Однако когда я говорю вебрату показать мне страницу до того, как произойдет ошибка:

Then show me the page
And I should see "delete"

... Safari запускается и показывает мне страницу, а в Safari есть кнопка «Удалить», полностью там.

Почему вебрат не находит кнопку формы? У меня также была такая же проблема с полями формы, такими как текстовые вводы, которые имеют значение при загрузке страницы, но вебрат говорит, что там ничего нет. Если вы посмотрите на это в Safari, то снова увидите, что поле содержит правильный текст.

Это ошибка или вебрат просто не подходит для проверки элементов формы? Есть ли другой способ сделать это? Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 апреля 2010

Вы можете проверить элементы формы, написав свои собственные определения шагов. Например, чтобы найти кнопку со значением «удалить», напишите свою функцию как:

And I should see a button with a value of "delete"

И определение шага:

Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value=#{value}]")
end

В качестве примечания вы заметите, что если ваш пользовательский шаг завершится неудачно, он выведет весь ответ, а затем вы увидите элемент формы. Я не совсем уверен, почему это так, но очевидно, что Cucumber не соответствует значениям элементов формы, когда вы пишете «Я должен видеть ...»

Вебрат утверждает, что поддерживает CSS3-селекторы для сопоставления элементов HTML при использовании синтаксиса have_selector.

1 голос
/ 19 сентября 2010

Леонардо:

Для надписей кнопок с пробелами в них необходимо включить value в кавычки, например:

Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value='#{value}']")
end
0 голосов
/ 30 августа 2011

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

Then /^I should see a button with "([^"]*)"$/ do |button_text|
  if page.respond_to? :should
    page.should have_xpath("//input[contains(@value,'#{button_text}')]")
  else
    assert page.has_xpath?("//input[contains(@value,'#{button_text}')]")
  end
end
0 голосов
/ 15 апреля 2010

Убедитесь, что HTML-код, с которым вы тестируете, действителен

...