Капибара - отправить форму без кнопки - PullRequest
26 голосов
/ 06 января 2012

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

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

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,, но я не получил ее на работу и оставил комментарий:

Я получаю неопределенный метод submit_form!для #Capybara :: Node :: Element: ... фактически методом "Capybara :: RackTest :: Node.send: include, SubmitRackTestFormWithoutButton" методом submit_form!добавляется к Узлу (не к Элементу), но находит возвращаемый Элемент

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

Спасибо

Ответы [ 6 ]

24 голосов
/ 05 декабря 2012

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

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

page.execute_script("$('form#your-form').submit()")
9 голосов
/ 22 мая 2016

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

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

Просто обезьяна заплатить класс или два

# /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 или в начале этой спецификации и т. Д. Это уменьшает беспорядок в тесте.

3 голосов
/ 22 марта 2016

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

find('form input').native.send_keys :enter
3 голосов
/ 26 октября 2013

Я получил это для работы в капибаре 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

1 голос
/ 26 апреля 2016

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

click_on 'Sign up'
0 голосов
/ 06 января 2012

Несмотря на то, что с помощью капибары можно добиться желаемого, более простое и практичное решение - поместить кнопку отправки в форму.

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

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

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