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
Есть ли у вас идея выработать этот метод или какое-то другое решение для отправки формы без кнопки?
Спасибо
Ответы
Ответ 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'