поля формы автозаполнения webrat

Учусь писать тесты с огурцом / вебрапом. Один из моих тестовых сценариев настроен на проверку валидации формы (оставляя поля пустыми). Как ни странно, поля, которые я не заполняю с помощью fill_in, устанавливаются на атрибут поля name. Это происходит только при запуске огурца, при использовании браузера этого не происходит.

Шаг, который я использую, прост:

When /^I submit the form$/ do
  # Not filling in the 'Name' field here
  fill_in 'Description', :with => 'This is a description'
  click_button 'Save'
end

После запуска сценария, в котором используется описанный выше шаг, я вижу, что текстовое поле «Имя» имеет значение «имя», а не пустое. То же самое происходит, если я заполняю это поле пустым пространством или nil:

fill_in 'Name', :with => ''

Форма, на которой я тестирую, достаточно проста:

<form action="/item/create" method="post">
  <div>
    <label for="ItemName">Name</label>
    <input type="text" name="name" id="ItemName" />
  </div>
  <div>
    <label for="ItemDescription">Description</label>
    <textarea name="description" id="ItemDescription"></textarea>
  </div>
  <input type="submit" value="Save" />
</form>

Есть идеи, почему это происходит?


person dmondark    schedule 14.01.2011    source источник
comment
+1 За интересную задачу. Не могу дождаться, пока кто-нибудь это выяснит.   -  person raidfive    schedule 03.02.2011
comment
Что произойдет, если вы введете имя, а не описание? Мне интересно, попали ли вы в крайний случай, когда метка, атрибут и значение являются именем   -  person Mark Thomas    schedule 05.02.2011
comment
@Mark, если я введу имя, но не описание, он заполнит поле описания буквальным описанием, которое является значением атрибута имени этого поля.   -  person dmondark    schedule 22.02.2011
comment
Какой адаптер вы используете? Механизировать?   -  person Rimian    schedule 20.09.2011


Ответы (3)


Я предполагаю, что вы используете Webrat с адаптером Mechanize, верно? Если так, то я очень расстроился из-за той же проблемы. Оказывается, это ошибка в том, как Webrat передает значения полей формы в Mechanize. Вы можете найти подробности и патч здесь: https://webrat.lighthouseapp.com/projects/10503/tickets/384-webrat-does-not-pass-empty-form-fields-correctly-to-Mechanize

В качестве альтернативы, если вы не хотите использовать исправленную версию Webrat, несколько неоптимальный обходной путь состоит в том, чтобы вместо этого fill_in с пробелом ('') и убедиться, что проверка ввода вашего приложения обрезает или игнорирует пробелы при рассмотрении того, было ли поле заполнено правильно.

К сожалению, похоже, что существует ряд подобных проблем, из-за которых были внесены исправления, которые не были объединены в «официальную» кодовую базу Webrat. Я написал автору по электронной почте около полутора месяцев назад, чтобы спросить, поддерживает ли он его до сих пор, и, если нет, пожалуйста, подумайте о том, чтобы позвонить тому, кто будет, так как многие люди все еще используют его. На сегодняшний день я еще не получил ответа.

person Michael    schedule 04.08.2011
comment
Miquel, спасибо за ответ и патч. Это решает проблему (да, я использовал Machanize). Я должен упомянуть, что с тех пор мы перешли на Capybarra, что, кажется, делает большинство. Capybarra была довольно стабильной, и то, как она обрабатывает драйверы, довольно аккуратно. Я также слышал, что Webrat больше не поддерживается, но я не могу этого подтвердить. - person dmondark; 22.10.2011

Вы можете попробовать отключить автозаполнение в этом поле (autocomplete = "off") и посмотреть, повлияет ли это на результат.

<form action="/item/create" method="post">
  <div>
    <label for="ItemName">Name</label>
    <input type="text" name="name" id="ItemName" autocomplete="off" />
  </div>
  <div>
    <label for="ItemDescription">Description</label>
    <textarea name="description" id="ItemDescription"></textarea>
  </div>
  <input type="submit" value="Save" />
</form>
person Ben    schedule 03.02.2011
comment
нам пришлось это сделать, потому что автозаполнение в Firefox заполняло поля в нашем тесте. Кроме того, если у вас есть поле пароля, оно заполнит его вашим паролем в кеше заполнения форм, а также заполнит текстовое поле перед паролем, независимо от имени этого поля, с именем пользователя в форме-заполнение тайник - person Ben; 04.02.2011
comment
Черт, похоже, это будет сложно отследить: / Не могли бы вы запустить Firefox в другом профиле пользователя или инкогнито, чтобы этого не произошло? - person raidfive; 04.02.2011
comment
Это было в нашем наборе тестов, когда он использовал селен. Не знаю, как указать ему работать в другом профиле. Но в этом не было необходимости, потому что autocomplete = off устранил наши проблемы, и мы все равно не хотели автозаполнения для этого поля. - person Ben; 04.02.2011
comment
Но тогда я не использую ни селен, ни (безголовый) firefox. В конце концов, Webrat - это браузер. И похоже, что автозаполнение не уважает. Я только что попробовал, но он все еще заполняет поле значением атрибута name. И даже если автозаполнение не было отключено, оно не должно просто захватывать имя и заполнять им поле. - person dmondark; 04.02.2011

Можете ли вы попробовать что-то подобное в этом шаге?

Учитывая% {, я заполняю "имя" с ""}

Или, что еще лучше, в файле функций используйте

Данные заполняю "имя с" ".

Я бы также посоветовал переехать в Capybara, вы можете делать такие вещи, как это:

https://github.com/jnicklas/capybara/issues/issue/219

Это позволит вам настроить профили Firefox для ваших тестов на селен.

person Tyler K    schedule 04.02.2011
comment
Спасибо, Тайлер. Я уже пробовал передать пустую строку (и ноль), но она все равно заполнит ее именем поля. Я обязательно посмотрю на Capybara, но я не использую firefox / selenium. Только webrat на данный момент. - person dmondark; 04.02.2011