2012-01-06 34 views
22

Tôi đang cố gắng gửi biểu mẫu không có nút chỉ sử dụng Capybara và Rspec (không có Dưa chuột hoặc Selenium, tôi biết đã có câu hỏi về điều đó).Capybara - Gửi biểu mẫu mà không cần nút

Tôi đã nhìn thấy có một ý chính để thêm một phương pháp để nộp một hình thức mà không cần nút:

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, nhưng tôi đã không nhận được nó để làm việc và tôi đã để lại một bình luận về nó:

Tôi nhận được phương thức chưa xác định `submit_form! ' cho #Capybara :: Nút :: Phần tử: ... thực sự của "Capybara :: RackTest :: Node.send: include, SubmitRackTestFormWithoutButton" phương thức submit_form! được thêm vào nút (không phải phần tử), nhưng hãy tìm lại phần tử

Bạn có ý tưởng nào đó để tạo biểu mẫu không có nút không?

Cảm ơn

Trả lời

5

Mặc dù nó có thể đạt được những gì bạn muốn sử dụng Capybara, giải pháp dễ dàng hơn và thực tế hơn là để đặt một nút gửi trên biểu mẫu.

Không có lý do gì để không có nút trên biểu mẫu, không thể có biểu mẫu và người dùng không có GUI hoặc đang sử dụng trình đọc màn hình sẽ gặp sự cố khi gửi biểu mẫu khác.

Nếu bạn không muốn vào nút hình thức để được nhìn thấy, tôi có thể đề nghị sử dụng một số CSS để làm cho nó ẩn:

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

Tôi nghĩ rằng anh ấy đang thử nghiệm một cái gì đó giống như biểu mẫu tìm kiếm như trên. – Hauleth

+0

Cảm ơn Mario, tôi đồng ý với bạn, nhưng tôi đã không thiết kế GUI và bây giờ không thể thay đổi nó (nhưng tôi cần phải viết các bài kiểm tra sử dụng nó) –

+1

Không có vấn đề gì, chỉ cần đặt nút tắt màn hình và sau đó nó sẽ hoạt động :) –

22

Tất cả các mã sản xuất của bạn nên được kiểm chứng, vì vậy nếu bạn thêm một mã mà chỉ được sử dụng bởi các thử nghiệm so với kiểm tra sẽ làm cho không có ý nghĩa ...

Cố gắng làm điều này thay vì:

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

Làm thế nào mà nên làm việc nếu bạn không sử dụng một trình điều khiển javascript? ;) – siegy22

2

Bạn có thể làm điều này bằng cách nhấn vào trong đầu vào

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

Bây giờ Bạn nên sử dụng click_on

click_on 'Sign up' 
3

Đây là một giải pháp đơn giản không yêu cầu capybary-webkit, qt, lmnop hay bất cứ thứ gì.

Không yêu cầu nút gửi. Mọi người nói bạn cần nó nhưng bất cứ điều gì.

Chỉ monkeypatch một lớp hoặc hai

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

Sau đó, bạn có thể làm điều gì đó như

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 

Đó là kinda như jacob 's câu trả lời trên đây nhưng đối với mình, bạn phải xác định rằng ở giữa của bài kiểm tra.

Đối với giải pháp này, bạn có thể xác định điều này trong một số tệp trong thư mục/support hoặc ở đầu của một thông số, v.v. Nó làm giảm sự lộn xộn trong thử nghiệm.

Các vấn đề liên quan