2010-10-08 5 views
30

Chúng tôi gặp sự cố trên trang web thương mại điện tử của chúng tôi, nơi người dùng thỉnh thoảng nhấn "thanh toán" hai lần và bị tính phí hai lần.Làm cách nào để mô phỏng nút quay lại trình duyệt trong Capybara?

Đó là một lỗi phổ biến đủ và dễ sửa, nhưng tôi muốn kiểm tra giải pháp trong thiết lập capybara của chúng tôi. Một khi tôi đã gọi là click_button ('checkout'), có thể cho tôi giả vờ tôi là một người dùng nhấn nút quay lại trình duyệt và sau đó gọi click_button ('checkout') lần thứ hai?

Trả lời

2

Tôi đã sử dụng phương pháp này trong Webrat. Tôi chắc rằng một cái gì đó tương tự cho Capybara sẽ làm việc.

When(/^I go back$/) do 
    visit request.env['HTTP_REFERER'] 
end 

Lưu ý bên: phương thức "redirect_to: back" không hoạt động vì bất kỳ lý do gì.

+1

ngoại trừ việc sẽ tải lại trang trước (không giống như nút quay lại trình duyệt), tôi hy vọng sẽ chỉ truy cập lại vào nguồn. –

36

Bạn có thể muốn thử:

When(/^I go back$/) do 
    page.evaluate_script('window.history.back()') 
end 

Điều này đòi hỏi chạy senario trong một trình điều khiển có khả năng javascript (selen/celerity/akephalos)

1

Cảm ơn! Câu hỏi và câu trả lời này đã giúp tôi rất nhiều!

Chỉ cần để thêm vào @Jake câu trả lời Mallory của, selen hiện là một phần của Capybara và bạn có thể khá dễ dàng chạy javascript trong các thử nghiệm bằng cách thêm :js => true (và có thể thêm một vài tinh chỉnh) như mô tả trong hai bài hướng dẫn sau đây:

http://www.opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/ http://railscasts.com/episodes/257-request-specs-and-capybara?view=asciicast

8

bạn có thể sử dụng page.driver.go_back, nếu bạn đang sử dụng webkit như Capybara của bạn javascript lái xe qua capybara-webkit đá quý. Cũng yêu cầu :js => true cho số scenario.

+0

Hoạt động khi sử dụng Selenium làm trình điều khiển JavaScript Capybara. – ctc

2

Ít nhất với capybara2.10selenium-webdriver công trình này:

When(/^I go back$/) do 
    page.go_back 
end 

Đó là cơ bản một phím tắt cho jbarr's câu trả lời. Để biết thêm chi tiết, hãy xem capybara documentation on go_back.

BTW: Bộ đếm là page.go_forward.