2015-07-13 33 views
5

Tôi có một trang đôi khi tải trong hơn một phút. Giả sử đây là hành vi mong đợi và sẽ không thay đổi. Trong những trường hợp này, tôi nhận được Net::ReadTimeout.Capybara tăng thời gian tải trang tối đa cho phép

Lưu ý rằng điều này sau khi điều hướng đến trang bằng cách nhấp vào nút trên trang trước, không phải yêu cầu ajax. Do đó Capybara.using_wait_time không giúp ích gì.

Tôi đã thử một số điều căn bản (một số trong đó tôi biết sẽ không hoạt động) như:

  • Thiết page.driver.browser.manage.timeouts 's implicit_wait, script_timeoutpage_load.
  • Lặp qua toàn bộ không gian đối tượng và đặt tất cả Selenium::WebDriver::Remote::Http::Default giá trị timeout.
  • Lặp qua toàn bộ không gian đối tượng và đặt tất cả Net::HTTP 's read_timeout.
  • page.driver.browser.send(:bridge).http.instance_variable_get(:@http).read_timeout=

Không có gì có vẻ hiệu quả. Điều này sẽ rất tầm thường, tôi vẫn không thể tìm ra cách để làm điều đó.

Nếu bạn biết về giải pháp thuyết bất khả tri web sẽ tuyệt vời. Nếu không - tôi đang sử dụng selenium.

+0

2 cent của tôi: tự động hóa là tất cả về phản hồi nhanh, nếu ứng dụng của bạn mất hơn một phút để tải, tăng thời gian chờ trang không phải là câu trả lời, hãy giảm thời gian tải xuống ứng dụng của bạn là những gì bạn nên tập trung ... – Bodao

+0

@ user3087106, tôi hoàn toàn đồng ý. Tuy nhiên, trong trường hợp hiện tại, điều này không áp dụng được. Giả sử tôi đang thử nghiệm dự án trực tiếp của người khác và họ không sẵn sàng đầu tư các nguồn lực cần thiết để tối ưu hóa hoạt động/đặt nó trong một quá trình nền hoặc bất cứ điều gì. – ndn

+0

Bạn đã thử tăng Capybara.default_max_wait_time (mặc định là 2 giây), cùng với một khẳng định cho một yếu tố chỉ có sẵn trên trang mới? – Sam

Trả lời

11

Selen có nhiều cài đặt thời gian chờ khác nhau, một số có thể được thay đổi khi chạy, các cài đặt khác phải được đặt khi trình điều khiển được khởi chạy. Bạn có nhiều khả năng chạy vào Http :: Default timeout mặc định là 60 giây. Bạn có thể ghi đè này bằng cách dụ riêng của bạn vào người lái xe Selenium như http_client

Capybara.register_driver :slow_selenium do |app| 
    client = Selenium::WebDriver::Remote::Http::Default.new 
    client.timeout = 120 
    Capybara::Selenium::Driver.new(app, http_client: client) 
end 

và sau đó sử dụng: tài xế slow_selenium cho xét nghiệm mà sẽ mất hơn một phút để tải trang

+0

Chỉ cần làm rõ để tham khảo trong tương lai của bất kỳ ai - bạn có thể yêu cầu Capybara sử dụng trình điều khiển mới cho một số thông số của bạn bằng cách thêm thẻ 'driver:: slow_selenium'. – ndn

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