2015-07-13 36 views
5

Bazen bir dakika içinde yüklenen bir sayfam var. Bunun beklenen davranış olduğunu ve değişmeyeceğini varsayın. Bu durumlarda, Net::ReadTimeout'u alırım.Capybara artış maksimum sayfa yükleme süresi

Bunun, bir sayfada gezindikten sonra, ajax isteği değil, önceki sayfada bulunan bir düğmeyi tıkladığını unutmayın. Bu nedenle Capybara.using_wait_time yardımcı olmaz. page.driver.browser.manage.timeouts 'ın implicit_wait, script_timeout ve page_load Ayar

  • :

    ben gibi radikal şeyler bir dizi (bazıları işe etmeyeceğini biliyordum) çalıştılar.

  • Tüm nesne alanı boyunca döngü yaparak ve tüm Selenium::WebDriver::Remote::Http::Default öğelerinin timeout değerini ayarlayarak.
  • Tüm nesne alanı boyunca döngü yaparak ve tüm Net::HTTP 'lerin read_timeout ayarını yapın.
  • page.driver.browser.send(:bridge).http.instance_variable_get(:@http).read_timeout=

Yok çalışmıyor gibi görünüyor. Bu çok önemsiz olmalı, yine de bunu yapmanın bir yolunu bulamadım.

Bir webdriver agnostic çözümü biliyorsanız, bu harika olur. Değilse - selenium kullanıyorum.

+0

benim 2 sent yüklemek için bir dakika devralacak testler için slow_selenium sürücüsünü: otomasyon olduğunu hızlı geri bildirim hakkında, uygulamanızın yüklenmesi için bir dakikadan fazla sürüyorsa, sayfa zaman aşımını artırmanın cevabı değil, uygulamalarınızın yüklenme süresini aşağıya indirdiğinizde odaklanmanız gereken şey ... – Bodao

+0

@ user3087106, Tamamen katılıyorum. Ancak, mevcut durumda bu geçerli değildir. Bir başkasının canlı projesini test ettiğimi varsayalım ve operasyonu optimize etmek/bir arka plan sürecine ya da herhangi bir şeye koymak için gerekli kaynaklara yatırım yapmaya istekli değiller. – ndn

+0

Capybara.default_max_wait_time değerini artırmayı denediniz mi (varsayılan 2 saniyedir), sadece yeni sayfada bulunan bir öğe için bir iddia mı? – Sam

cevap

11

Selenium, birçoğu çalışma zamanında değiştirilebilir, diğerleri ise sürücü başlatıldığında ayarlanması gereken birçok zaman aşımı ayarına sahiptir. Büyük olasılıkla 60 saniyede varsayılan Http :: Varsayılan zaman aşımına giriyorsunuz. Sen http_client olarak Selenyum sürücüsü içine

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 

Kendi örneğini geçirerek bu geçersiz kılmak ve sonra kullanabilirsiniz: sayfa

+0

Kimsenin gelecekteki referansını açıklığa kavuşturmak için - Capybara'ya 'driver:: slow_selenium' etiketini ekleyerek bazı özelliklerin yeni sürücüsünü kullanmasını söyleyebilirsin. – ndn