Capybara, Selenium i SSL

Mam w aplikacji logowanie po SSLu, próbuję napisać test Selenium który będzie to robił. Niestety przy przejściu ze strony http na https dostaję błąd w Firefoksie:

[code]Secure Connection Failed

An error occurred during a connection to 127.0.0.1:51996.
SSL received a record that exceeded the maximum permissible length.

(Error code: ssl_error_rx_record_too_long)[/code]
Da się to jakoś ominąć? Albo może zaproponujecie coś innego do testów w przeglądarce?

Środowisko:
Rails 3.0.3
Ruby 1.9.2
RVM

A normalnie pod firefoxem strona działa po SSL ? (instancją firefox’a uruchamianą normalnie a nie z poziomu selenium). Możesz spróbować napisać na grupę capybary. Wiem, że można zmienić profil jakiego ma używać selenium do odpalenia firefoxa i pewnie potrzebowałbyś takiego który ma dodany twoj self-signed (zgaduję) klucz do zaufanych. To tak na pierwszy rzut oka, chociaż błąd w przeglądarce wskazuje na jakąś inną techniczną przyczynę.

Ten błąd oznacza, że na tym porcie serwowany jest http a nie https. Serwer Selenium jest odpalany automatycznie przez Capybarę. Sensownym (wydawałoby się) rozwiązaniem byłoby skonfigurowanie lokalnego nginxa żeby pod dodatkową domeną serwował tę samą aplikację tylko ze zmienionym środowiskiem na test. Niestety nginx (albo passenger) miesza środowiska i w efekcie tam gdzie powinna działać aplikacja w środowisku dev dostaję testową. I generalnie dziwi mnie że wszyscy piszą że “SSL support out of the box” i nikt nie ma tego problemu co ja. Więc albo mało kto używa SSLa + Capybara/Selenium, albo ja coś robię nie tak.

Hmmm, to może w tą stronę: Postaw pound’a jako proxy, niech capybara zawsze na tym samym porcie startuje aplikację jako test + skonfiguruj ją by z aplikacją komunikowała się przez proxy jakie robi pound. Co sądzisz ?

Nie bardzo rozumiem, możesz podać więcej szczegółów? Konkretnie nie rozumiem co to zmienia w kwestii SSLa - jeżeli przez proxy przekieruję ruch na dany port, to nadal zapytania http i https będą trafiały pod ten sam port w Capybarze?

Co masz na myśli mówiąc “pod ten sam port w Capybarze” ?

Z tego co rozumiem to problem masz taki, że chcesz testować aplikacje po https ale instancja twojej aplikacji nie jest tak startowana. Więc ja mówie na to: olej startowanie aplikacji, przykładowo capybara uruchamia webricka na porcie ABC (zawsze). Ty masz skonfigurowanego pound jako proxy pomiędzy portem XYZ a ABC. Jeśli wejdziesz na stronę przez port ABC to będzie po http a przez XYZ będzie po https chociaż sam serwer aplikacji nawet nie będzie zajmował się odszyfrowaniem komunikacji, pound załatwi to za niego. Dla informacji serwera aplikacji dodatkowe headery są ustawiane przez pound na podstawie których RoR wie czy linki generować z przedrostkiem https czy http.

Jak już to masz, to możesz ustawić capybarę by odwoływała się do portu XYZ pomimo, że serwer wystartowała na porcie ABC.

Jest to bardzo na około metoda, być może można prościej np by skonfigurować capybara jakoś by serwer aplikacji (niekoniecznie webrick) uruchamiała z wsparciem dla https i podanym certyfikatem. Nie wiem na ile to możliwe i proste.

Ja to robię jeszcze inaczej na około. Mam domenę skierowaną na mój komputer (przekierowanie na routerze) i potem tylko w test_helper.rb

Capybara.app_host = "http://www.mojadomena.pl"

Coś w stylu DynDNS lub No-IP?