2016-07-28 7 views
0

So im Versuch, eine gewisse Automatisierung Tests auf einer Rails-Website auszuführen, was eine grundlegende HTTP-Authentifizierung zu sein scheint erfordert:Capybara/Poltergeist HTTP-Authentifizierung

enter image description here

Im mit localhost: 3000 als mein Gastgeber.

Capybara.app_host = "http://localhost:3000" 
Capybara.server_host = "localhost" 
Capybara.server_port = "3000" 

Im dies jetzt auf Firefox läuft, und ich versuchte http://username:[email protected]:3000 tun, aber es warnt in der Regel über „Phishing-Seiten“ aber ich sowieso gehen, aber es funktioniert nicht und das http Popup erscheint nach wie vor. (Ich habe gehört, dass viele Browser diese Fähigkeit deaktiviert haben).

Ich weiß Selen hat Möglichkeiten, um es zu umgehen, aber was ist mit Poltergeist? oder irgendetwas in Capybara gebaut.

sah ich eine vorherige Frage hier erwähnt: HTTP basic auth for Capybara

aber da, wie die obige URL bedeutet dies entweder nicht zur Arbeit nicht funktionieren schien.

edit: Aktuelle Poltergeist Treiber-Setup:

options = { 
     :timeout => 45, 
     :phantomjs_options => ["--proxy-auth="] 
    } 
    Capybara.register_driver :poltergeist do |app| 
     Capybara::Poltergeist::Driver.new(app, options) 
    end 
    Capybara.default_driver = :selenium 
    Capybara.javascript_driver = :poltergeist 

Antwort

1

können Sie versuchen,

page.driver.basic_authorize(username, password) 

, bevor Sie die Seite in Poltergeist besuchen. Das wird den Benutzernamen und das Passwort in PhantomJS gesetzt und auch die ‚Authorization‘ header

+0

Ich hatte gehofft es wäre so einfach wie damals, leider bekomme ich einen "Server nicht erreicht". Diese App läuft aufgrund der DB sehr langsam auf lokal ... aber so lange wie der Benutzername/das Passwort es vorher eingestellt hat sollte es egal sein, richtig? Ich habe auch dafür gesorgt, dass meine Zeit abgelaufen ist. (Es funktioniert auf selen, wenn ich den Benutzernamen/das Passwort manuell eingeben, während es läuft) – msmith1114

+0

Eigentlich, ich denke das Problem ist, dass es als Proxy-Site läuft, so dass die normalen http-Header nicht funktionieren. – msmith1114

+0

@ Msmith1114 Mit Poltergeist gibt es page.driver.headers =/add_headers/add_header, so dass Sie alle Header setzen können, die Sie brauchen - obwohl "Server nicht erreicht" klingt nicht wirklich wie eine Auth verweigert - welche Timeout setzen Sie? (Die Poltergeist-Timeout-Option ist in der Fahrerregistrierung festgelegt.) –

1

Tossing eine andere Lösung hier oben, für die Arbeit mit Selen + Firefox:

Wenn Sie eine Seite besuchen, die HTTP-Basisauthentifizierungs erfordert, Firefox zeigt ein Dialogfeld an, in dem Sie nach Benutzername und Passwort gefragt werden.

enter image description here

Selen nicht geben Ihnen viele Möglichkeiten, mit dem Dialogfeld interagieren, aber es hat eine accept_alert Methode, die optionale Tastenanschläge nimmt.

Um Text in beide Felder auf einmal eingeben, Sie tab keycode des Selen verwenden:

tab = Selenium::WebDriver::Keys::KEYS[:tab] 
SESSION.accept_alert(with: username + tab + password) 

Dies ist die einzige Lösung, die ich arbeiten gehen konnte - ich verwende remote Fahrer Selen, was nicht existiert Unterstützung für die integrierte HTTP-Basisauthentifizierung.

Wenn alles andere fehlschlägt, geben Sie dies eine Chance.