Опция имени кнопки отсутствует в режиме без монитора при отправке запроса на исправление - PullRequest
0 голосов
/ 25 июня 2018

У меня есть форма, которая отправляет запрос PATCH с несколькими кнопками отправки

button_tag "Save", type: "submit", class: "btn btn-secondary", name:  "commit", value: "save"
button_tag "Submit", type: "submit", class: "btn btn-secondary", name:  "button", value: "submit"

есть действие контроллера, которое проверяет значение нажатой кнопки.

def update
  params[:commit].to_s.downcase == "save"
  ....
end

Возвращается значение true для режима разработки и при использовании драйвера селен, оно прерывается для режима без головы, когда я использую poltergeist javascript_driver. В этом случае значение отсутствует.

Я проверил это с помощью click_on команды «Сохранить»

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

Большое спасибо заранее за совет.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я предполагаю, что отправка выполняется AJAX с использованием фактического запроса PATCH (в отличие от запроса POST, который передает скрытый параметр _method, установленный в 'PATCH').

Из-за версии QtWebkit PhantomJS (используемой Poltergeist в качестве «браузера»), созданной вместе с ней, имеет проблему, когда тела фактических запросов на исправления всегда пусты. Основанный на QtWebkit (который был EOL'd) оставляет PhantomJS примерно эквивалентным 6-7-летнему браузеру и становится все менее и менее способным для тестирования современных приложений на основе JS. Возможно, вам лучше использовать Selenium с хромом без головки для тестирования без головы.

0 голосов
/ 25 июня 2018

Я считаю, что это проблема поддержки браузера. Глядя на документы для button_tag, он гласит:

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

Возможно, вам лучше использовать флажок, чтобы указать здесь разницу в состоянии.

Кроме того, вы смешиваете проблемы в своем методе update - на самом деле он должен нести только одну ответственность за обновление рассматриваемой записи, а не за ее отправку. Возможно, вам лучше использовать дополнительный контроллер и button_to для функции «отправки». Больше чтения по теме.

...