2013-07-12 7 views
7

A volte il mese scorso (giugno 2013) alcuni dei nostri test Capybara hanno iniziato a fallire principalmente perché i pulsanti che stanno cercando di fare clic non sono visibili. Idealmente, mi piacerebbe capire cosa è cambiato. Al momento siamo su selenium-webdriver 2.33 ma ho provato a tornare alla 2.29 e ancora non funziona. Al momento stiamo andando contro Firefox e forse è dovuto a una versione più recente di Firefox.Scorrimento automatico di un pulsante in visualizzazione con Capybara e selenio

A parte questo, non riesco a capire come scorrere i pulsanti in vista. Da quello che ho raccolto, posso usare scrollIntoView ma non sono sicuro di come chiamarlo nel passaggio Capybara. Ho provato le varianti su:

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

Ma senza fortuna perché find_button non funziona.

Nota: selezioniamo in base al testo del pulsante. La selezione in base all'ID è possibile ma richiederà molte modifiche ai nostri test dell'interfaccia utente, quindi vorremmo evitarlo.

+0

Un'altra nota: il pulsante è in un div scorrevole. La pagina stessa non scorre. –

+0

Quale versione di Firefox? Potresti voler provare a disinstallare Firefox e quindi installare una versione specifica di Firefox e quindi disabilitare l'aggiornamento su di esso in modo che rimanga alla versione che ti aspetti. – djangofan

risposta

0

Poiché la pagina non è scorrevole, è possibile utilizzare lo stesso approccio della risposta collegata fornita nell'altra risposta, ma con una variante per indirizzare l'elemento scorrevole. Per esempio, se il vostro elemento scorrevole ha un id di "scorrimento":

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

Io personalmente odio dover scorrere per le prove, quindi se qualcuno si presenta con una soluzione migliore a questo per Capybara + selenio, mi piacerebbe amo vederlo

18

solito ho un modulo JavascriptDriver che uso per includere funzionalità di selenio in un test, e lì ho definire un metodo di supporto:

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 

E poi nel tuo test è possibile utilizzare il codice passando un normale Capibara elemento:

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

Non funziona per me ... –

+0

@CJohnson: Prova con l'opzione 'visible: false'. Aggiornato la mia risposta. –

+0

Grazie amico, mi hai davvero salvato la vita! A proposito, questo funziona anche per scroll orizzontale :) –

Problemi correlati