2013-07-12 5 views
7

Irgendwann im letzten Monat (Juni 2013), begannen einige unserer Capybara-Tests, hauptsächlich weil die Knöpfe, auf die sie klicken, nicht sichtbar sind. Im Idealfall würde ich gerne herausfinden, was sich geändert hat. Wir sind derzeit auf Selen-Webdriver 2.33, aber ich habe versucht, zurück zu 2.29 und es funktioniert immer noch nicht. Gegenwärtig laufen wir nur gegen Firefox und vielleicht liegt es an einer neueren Version von Firefox.Automatisches Scrollen eines Knopfes mit Capybara und Selenium

Abgesehen davon kann ich nicht herausfinden, wie Sie die Schaltflächen in die Ansicht scrollen. Von dem, was ich erhalte, kann ich scrollIntoView benutzen, aber nicht sicher, wie man es im Capybara-Schritt nennt. Ich habe versucht, Variationen auf:

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

Aber ohne Glück, weil find_button selbst nicht funktioniert.

Hinweis: Wir wählen basierend auf dem Text der Schaltfläche aus. Die Auswahl anhand der ID ist zwar möglich, erfordert jedoch viele Änderungen an unseren UI-Tests. Daher möchten wir dies vermeiden.

+0

Ein weiterer Hinweis: Der Button ist in einem scrollbaren Div. Die Seite selbst scrollt nicht. –

+0

Welche Version von Firefox? Vielleicht möchten Sie versuchen, Firefox zu deinstallieren und dann eine bestimmte Version von Firefox zu installieren und dann das Upgrade zu deaktivieren, damit es in der von Ihnen erwarteten Version bleibt. – djangofan

Antwort

0

Da Ihre Seite nicht scrollbar ist, können Sie den gleichen Ansatz wie die verknüpfte Antwort in der anderen Antwort verwenden, aber mit einer Variation auf Ihr scrollbares Element zielen. Zum Beispiel, wenn Ihr rollbaren Element hat eine ID von „scrollable“:

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

ich persönlich mit Hass für Tests zu bewegen, so dass, wenn jemand mit einer besseren Lösung dieses Problem für Capybara + Selen kommt, würde ich ich liebe es zu sehen.

18

Ich habe normalerweise ein Modul JavascriptDriver, die ich verwende Selenium-Funktionalität in einem Test zu schließen, und es definiere ich eine Hilfsmethode:

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 

Und dann in Ihrem Test können Sie diesen Code verwenden, indem eine normale vorbei Capybara Element:

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

Funktioniert nicht für mich ... –

+0

@CJohnson: Versuchen Sie es mit der Option "visible: false". Meine Antwort wurde aktualisiert. –

+0

Danke Mann, du hast mir wirklich das Leben gerettet! BTW, das funktioniert auch für horizontale Scroll :) –

Verwandte Themen