2012-01-06 23 views
22

Próbuję przesłać formularz bez przycisku używając tylko kapibara i Rspec (bez ogórka lub selenu, wiem, że już o tym mowa).Kapibara - Prześlij formularz bez przycisku

Widziałem tam jest sens, aby dodać metodę złożyć formularz bez przycisku:

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, ale ja nie dotarłeś go do pracy, a ja skomentowało na nim:

Otrzymuję niezdefiniowaną metodę "submit_form!" dla #Capybara :: Node :: Element: ... w rzeczywistości przez "Capybara :: RackTest :: Node.send: include, SubmitRackTestFormWithoutButton" metoda submit_form! jest dodawany do ten węzeł (nie do elementu), ale znaleźć powrócić element

Czy masz jakiś pomysł, aby wypracować że GIST, lub niektóre inne rozwiązanie złożyć formularz bez przycisku?

Dzięki

Odpowiedz

5

Chociaż jest to możliwe, aby osiągnąć to, co chcesz za pomocą kapibary, tym łatwiej i bardziej praktycznym rozwiązaniem jest umieszczenie przycisku złożyć na formularzu.

Nie ma powodu, aby nie mieć przycisku w formularzu, jest zły dostęp do formularza, a użytkownicy, którzy nie mają GUI lub używają czytników ekranu, będą mieli problemy z przesłaniem formularza w inny sposób.

Jeśli nie chcesz przycisk formularz, aby były widoczne, mogę zasugerować używając trochę CSS, aby ukryć:

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

Myślę, że testuje coś podobnego do powyższej. – Hauleth

+0

Dzięki Mario, zgadzam się z Tobą, ale nie zaprojektowałem GUI i na razie nie można go zmienić (ale muszę napisać testy, które go używają) –

+1

Bez problemów, po prostu umieść przycisk poza ekranem, a następnie to powinno działać :) –

22

Wszystko kod produkcja powinna być sprawdzalne, więc jeśli dodać kod, który jest używany tylko przez test niż test będzie bez sensu ...

spróbować zrobić to zamiast:

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

Jak to działa, jeśli nie używasz sterownika javascript? ;) – siegy22

2

Można to zrobić przez naciśnięcie wprowadzić w wejściu

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

Teraz należy użyć click_on

click_on 'Sign up' 
3

Oto proste rozwiązanie, które nie wymaga kapibary-webkit, qt, lmnop lub cokolwiek innego.

Nie wymaga przycisku przesyłania. Ludzie mówią, że tego potrzebujesz, ale nieważne.

Wystarczy monkeypatch klasę lub dwie

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

Następnie można zrobić coś

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 

To trochę jak jacob jest odpowiedź na tutaj, ale dla jego trzeba określić, że w środku testu.

Dla tego rozwiązania można to zdefiniować w pliku w katalogu/support lub na początku tej specyfikacji, itp. Zmniejsza to bałagan w teście.

Powiązane problemy