Подтвердить что ты не робот

Capybara - Отправить форму без кнопки

Я пытаюсь отправить форму без кнопки, используя только Capybara и Rspec (без огурца или селена, я знаю, что уже есть вопрос об этом).

Я видел, что есть смысл добавить метод для отправки формы без кнопки:

module SubmitRackTestFormWithoutButton
  def submit_form!
    Capybara::RackTest::Form.new(driver, form).submit({})
  end
end
Capybara::RackTest::Node.send :include, SubmitRackTestFormWithoutButton

https://gist.github.com/989533, но я не получил его на работу, и я оставил его комментарий:

Я получаю метод undefined `submit_form! ' для #Capybara:: Node:: Элемент:... на самом деле "Capybara:: RackTest:: Node.send: include, SubmitRackTestFormWithoutButton" добавлен метод submit_form! Node (не к элементу), но найдите return Element

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

Спасибо

4b9b3361

Ответ 1

Несмотря на то, что вы можете использовать то, что хотите использовать capybara, проще и практичнее решить поставить кнопку отправки в форме.

Нет причин не иметь кнопки в форме, плохой доступ к не имеющей формы, а пользователи, у которых нет графического интерфейса или используются программы для чтения с экрана, будут иметь проблемы с отправкой формы в противном случае.

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

<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;">

Ответ 2

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

Попробуйте сделать это вместо:

page.execute_script("$('form#your-form').submit()")

Ответ 3

Здесь простое решение, которое не требует capybary-webkit, qt, lmnop или что-то еще.

Не требуется кнопка отправки. Люди говорят, что вам это нужно, но что угодно.

Просто monkeypatch класс или два

# /spec/support/capybara.rb
  class Capybara::Session
    def submit(element)
      Capybara::RackTest::Form.new(driver, element.native).submit({})
    end
  end

Затем вы можете сделать что-то вроде

require 'support/capybara'

before do
  create :lead
  create :user, :different_email
end

it 'Searchable' do
  visit users_path
  page.should have_content 'Slicer'
  page.should have_content 'Dicer'

  fill_in 'Search', with: 'dice'

  form = find '#search-form' # find the form
  page.submit form           # use the new .submit method, pass form as the argument

  page.should have_content 'Dicer'
  page.should_not have_content 'Slicer'
end

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

Для этого решения вы можете определить это в каком-либо файле в каталоге /support или в начале этого одного спецификатора и т.д. Это уменьшает беспорядок в тесте.

Ответ 4

Я получил это для работы в capybara 1.1.2 с помощью:

  form = page.find("form")
  class << form
    def submit!
      Capybara::RackTest::Form.new(driver, native).submit({})
    end
  end
  form.submit!

и похоже, что подобное решение описано здесь: http://minimul.com/submitting-a-form-without-a-button-using-capybara.html

Ответ 5

Вы можете сделать это, нажав enter внутри входа

find('form input').native.send_keys :enter

Ответ 6

Теперь вы должны использовать click_on

click_on 'Sign up'