2013-07-12 14 views
7

Đôi khi tháng trước (tháng 6 năm 2013), một số thử nghiệm Capybara của chúng tôi bắt đầu không thành công chủ yếu do các nút mà họ đang cố bấm không có trong chế độ xem. Lý tưởng nhất, tôi muốn tìm ra những gì đã thay đổi. Chúng tôi hiện đang sử dụng selenium-webdriver 2.33 nhưng tôi đã cố gắng quay lại phiên bản 2.29 và nó vẫn không hoạt động. Hiện tại, chúng tôi chỉ đang chạy trên Firefox và có thể do phiên bản Firefox mới hơn.Tự động cuộn một nút vào chế độ xem với Capybara và Selenium

Chặn điều đó, tôi không thể tìm ra cách cuộn các nút đó thành chế độ xem. Từ những gì tôi thu thập, tôi có thể sử dụng scrollIntoView nhưng không chắc chắn làm thế nào để gọi nó trong bước Capybara. Tôi đã thử các biến thể trên:

Capybara.current_session.driver.execute_script("arguments[0].scrollIntoView(true;)", find_button(button).native) 

Nhưng không may mắn vì find_button không hoạt động.

Lưu ý: chúng tôi đang chọn dựa trên văn bản của nút. Lựa chọn dựa trên ID là có thể nhưng sẽ yêu cầu nhiều thay đổi đối với các kiểm tra giao diện người dùng của chúng tôi vì vậy chúng tôi muốn tránh nó.

+0

Lưu ý khác: nút nằm trong div có thể cuộn. Bản thân trang không cuộn. –

+0

Phiên bản Firefox nào? Bạn có thể muốn thử gỡ cài đặt Firefox và sau đó cài đặt một phiên bản Firefox cụ thể và sau đó vô hiệu hóa nâng cấp lên Firefox để nó vẫn ở phiên bản bạn mong đợi. – djangofan

Trả lời

0

Vì trang của bạn không thể cuộn được, bạn có thể sử dụng phương pháp tương tự như câu trả lời được liên kết được cung cấp trong câu trả lời khác, nhưng với biến thể để nhắm mục tiêu phần tử có thể cuộn của bạn. Ví dụ, nếu yếu tố cuộn của bạn có id của "cuộn":

page.execute_script "document.getElementById("scrollable").scrollTop += 100" 

Cá nhân tôi ghét phải di chuyển để kiểm tra, vì vậy nếu có ai đi lên với một giải pháp tốt hơn để điều này cho Capybara + Selenium, tôi muốn thích nhìn thấy nó.

18

Tôi thường có một mô-đun JavascriptDriver mà tôi sử dụng để bao gồm chức năng Selenium trong một thử nghiệm, và ở đó tôi xác định một phương pháp helper:

module JavascriptDriver 
    # other code that prepares capybara to work with selenium 

    def scroll_to(element) 
    script = <<-JS 
     arguments[0].scrollIntoView(true); 
    JS 

    Capybara.current_session.driver.browser.execute_script(script, element.native) 
    end 
end 

Và sau đó trong thử nghiệm của bạn, bạn có thể sử dụng mã mà bằng cách đi qua một bình thường Phần tử Capybara:

scroll_to(page.find("button.some-class", visible: false)) 
+0

Không hoạt động đối với tôi ... –

+0

@CJohnson: Thử với tùy chọn 'visible: false'. Đã cập nhật câu trả lời của tôi. –

+0

Cảm ơn người đàn ông, bạn thực sự đã cứu mạng tôi! BTW, điều này cũng làm việc cho cuộn ngang :) –

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