Ruby Mechanize: многострочное значение для textarea объединяется - PullRequest
6 голосов
/ 05 июня 2011

РЕДАКТИРОВАТЬ: при дальнейшем тестировании кажется, что проблема специфична для конкретного сайта и теоретически должна работать нормально.


Значения текстовой области, которые должны быть в нескольких строках, передаются в одной строке.

textarea_values = "value1\nvalue2"

form = page.form_with(:id => 'form_id_here')
form['my_textarea'] = textarea_values
submit = form.button_with(:value => 'Submit')
form.click_button(submit)

Отправляемое значение равно value1\nvalue2 вместо нескольких строк, как предполагалось.

Есть ли другой способ добавить значения формы, которые я могу попробовать?

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Вы действительно пробовали код, который вы разместили здесь?

Ну, у меня есть веб-сайт с внутренней системой обмена сообщениями, с двумя текстовыми полями и одним текстовым пространством.

мой исходный код образца:

@page = @agent.get "thewebsiteItold"

form = @page.form_with(:id => 'form')

textarea_values = "value1\nvalue2"

form['to'] = "username"
form['subject'] = "somesubject"
form['text'] = textarea_values

button = form.button_with(:name => "send")

@agent.click_button button

Хотя форма имела этот HTML:

<form method="post" action="/somethingyoudontneedtoknow" name="header" id="form">

Запуск моего скрипта вернул эту ошибку:

in 'method_missing': undefined method `id' for #<Mechanize::Form:0x21efb98> (NoMethodError)

Хорошо, я изменил идентификатор для имени и получил еще одну проблему:

in `<main>': undefined method `click_button' for #<Mechanize:0x253f380> (NoMethodError)

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

Так что я изменил его соответственно на эти примеры механизации , и код работал хорошо:

form = @page.form_with(:name => 'header')

textarea_values = "value1\nvalue2"

form['to'] = "username"
form['subject'] = "anotherboringsubject"
form['text'] = textarea_values

button = form.button_with(:name => "send")

@agent.submit(form, button)

и, ну, это сработало как ожидалось:

resulting message on chrome

Вывод: Убедитесь, что ваш исходный код слишком далек от того, что вы нам написали, или версия механизатора совпадает с ссылкой , которую я передал до

0 голосов
/ 08 июня 2011

Как @nash в комментарии, я не могу понять проблему в примере выше. «\ n» является управляющим символом (LINE FEED, маркер строки).

См .: http://en.wikipedia.org/wiki/Control_character

Так что в этой записи нет ничего плохого, если только вы не используете одинарные кавычки (в которых экранирование с "\" не работает).

Если вас смущает такая запись, вы также можете использовать нотацию HEREDOC в Ruby:

textarea_values = <<VALUES
value1
value2
VALUES

В коде с отступом вы также можете использовать:

# ... code ...
  # ... code ...
    textarea_values = <<-VALUES
      value1
      value2
    VALUES
  # ... code ...
# ... code ...

Разница здесь заключается в дефисе в «

Для огромных текстовых вводов я действительно предпочитаю нотацию HEREDOC, она делает вещи проще и удобочитаемее.

Дополнительная информация о HEREDOC:

Все об использовании строк Ruby:

...