2015-07-13 16 views
5

Ho una pagina che a volte carica in più di un minuto. Supponiamo che questo sia il comportamento previsto e non cambierà. In questi casi, ricevo Net::ReadTimeout.Capybara aumenta il tempo di caricamento massimo consentito della pagina

Si noti che questo è dopo aver navigato in una pagina facendo clic su un pulsante nella pagina precedente, non su una richiesta Ajax. Pertanto, Capybara.using_wait_time non aiuta.

Ho provato un certo numero di cose radicali (alcuni dei quali sapevo che non avrebbe funzionato) come:

  • Impostazione page.driver.browser.manage.timeouts s' implicit_wait, script_timeout e page_load.
  • Ciclo continuo attraverso l'intero spazio oggetti e impostazione del valore timeouttimeout.
  • Ciclo continuo attraverso l'intero spazio oggetti e impostazione di tutti gli Net::HTTP di read_timeout.
  • page.driver.browser.send(:bridge).http.instance_variable_get(:@http).read_timeout=

Nessuno sembra funzionare. Questo dovrebbe essere molto banale, ancora non ho trovato il modo di farlo.

Se siete a conoscenza di una soluzione agnostica di un webdriver, sarebbe fantastico. In caso contrario, sto utilizzando selenio.

+0

i miei 2 centesimi: automazione tutto sul feedback rapido, se la tua app richiede più di un minuto per caricare, aumentare il timeout della pagina non è la risposta, portare il tempo di caricamento delle app è quello che dovresti concentrarti su ... – Bodao

+0

@ user3087106, sono completamente d'accordo. Tuttavia, nel caso attuale questo non è applicabile. Supponiamo che sto testando il progetto live di qualcun altro e non sono disposti a investire le risorse necessarie per ottimizzare l'operazione/inserirla in un processo in background o altro. – ndn

+0

Hai provato ad aumentare Capybara.default_max_wait_time (il valore predefinito è 2 secondi), insieme a un'asserzione per un elemento che è disponibile solo sulla nuova pagina? – Sam

risposta

11

Il selenio dispone di diverse impostazioni di timeout, alcune delle quali possono essere modificate in fase di runtime, altre che devono essere impostate quando il driver viene inizializzato. Probabilmente si sta eseguendo il timeout Http :: Default che ha come valore predefinito 60 secondi. È possibile ignorare questa passando il proprio esempio nel driver Selenio come 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 

e quindi utilizzare il: autista slow_selenium per i test che avrà più di un minuto per caricare la pagina

+0

Giusto per chiarire il futuro riferimento di qualcuno, puoi dire a Capybara di usare il nuovo driver per alcune delle tue specifiche aggiungendo il tag 'driver:: slow_selenium'. – ndn

Problemi correlati