Chrome / Firefox behalten keine Cookies bei, wenn sie über (Watir-) Webdriver aufgerufen werden?

8

Ich arbeite an einem Projekt für einen Kunden mit Ruby & amp; Watir. Er fordert, dass die Sitzung wiederhergestellt wird, wenn die Anwendung neu geladen wird (um seine Anmeldestatus zu speichern). Dies ist das normale Verhalten von Chrome (scheint es), und Firefox hat die Option, dies auch zu tun.

Ich habe alles versucht, was mir einfällt, und ich kann nicht glauben, dass dies mit watir-webdriver funktioniert. Ich habe Watir angewiesen, ein bestimmtes Profil zu verwenden (was vermutlich das Problem hätte lösen können), habe sichergestellt, dass alle Einstellungen korrekt sind (was sie sind, weil sie funktionieren, wenn ich den Browser selbst starte). Ich habe Chrome mit verschiedenen Switches und Profiloptionen ausprobiert, von denen ich dachte, dass sie helfen könnten. Nichts.

Die Frage ist also, warum passiert das und was kann ich tun, um dieses Problem zu lösen oder zu umgehen? Mir sind an dieser Stelle die Ideen fast vollständig ausgegangen. Ich habe sogar versucht, die Cookies in IRB manuell zu speichern und neu zu laden, aber ohne Erfolg ...

Ich weiß, dass es möglich sein muss, wenn ich mich manuell bei den Webseiten anmelde, den Browser schließe und ihn wieder öffne. Ich bin immer noch eingeloggt. Ich muss genau dieses Verhalten reproduzieren, aber irgendwas läuft irgendwo schief zwischen der manuellen Instanz von Chrome / Firefox und der von Watir gesteuerten Instanz.

Zu guter Letzt möchte ich erwähnen, dass ich festgestellt habe, dass wenn ich mein Profil anwähle, es meine bisherigen Einträge lädt, aber keines der Cookies. Es verwirrt mich mehr und mehr.

Wenn mir jemand helfen kann, würde ich es sehr schätzen.

    
Ethan Barron 08.05.2013, 01:02
quelle

3 Antworten

3

Nun, die gute Nachricht ist, dass ich eine Lösung gefunden habe. Ich wollte es teilen, für den Fall, dass jemand anderes mit diesem Problem meinen Weg in meine Schuhe findet. Ich entschuldige mich aufrichtig bei denen von euch, die es getan haben.

Meine mögliche Lösung war wie folgt:

  1. Erstellen Sie ein Firefox-Profil speziell für die Anwendung
  2. Setzen Sie Firefox auf "Windows & Amp; Tabs wiederherstellen". Das hat nicht funktioniert (etwas mit Watir / Selenium) und würde die Einstellungen einfach ignorieren, sogar während Firefox hat sie erkannt.
  3. Um das oben erwähnte Problem zu beheben, habe ich eine user.js Datei gefunden Selen, hat die Einstellungen manuell auf "Windows & Amp; Tabs wiederherstellen" geändert in dieser Datei und fügte die Datei über die in meinem Firefox Profilverzeichnis (~ / .mozilla / firefox /*).
  4. Firefox ersetzt die Einstellungen in prefs.js durch diejenigen in user.js bei jedem Lauf. Das hat es behoben.

Ich werde bemerken, dass ich im selen-webdriver selbst ziemlich viel Code optimieren musste, um alles reibungslos laufen zu lassen. watir-webdriver sitzt auf Selen-webdriver.

    
Ethan Barron 10.05.2013, 05:16
quelle
3

Ich glaube, dass webdriver von Anfang an Sitzungen immer mit einem sauberen Cookie startet.

Dies kann die Dinge ein wenig schwierig machen, wenn Sie versuchen, einen Test zu machen, der das Schließen und Wiederöffnen des Browsers simuliert (was wirklich in vielerlei Hinsicht ist, den Browser mehr zu testen als die Webseite, da der Webserver wirklich hat keine Möglichkeit zu wissen, dass der Browser geschlossen und wieder geöffnet wurde)

Wenn Sie versuchen möchten, Cookies zu speichern und wiederherzustellen, wird ein wichtiger Vorbehalt durch das Lesen einiger der webdriver docs im Abschnitt über Cookies angezeigt, wo dies steht.

  

Bevor wir diese nächsten Schritte verlassen, könnten Sie daran interessiert sein   Verständnis, wie man Cookies benutzt. Zuallererst müssen Sie auf dem sein   Domäne, für die der Cookie gültig sein soll. Wenn Sie versuchen, voreinzustellen   Cookies, bevor Sie mit einer Website interagieren und Ihre Homepage ist   groß / dauert eine Weile, um eine Alternative zu laden ist eine kleinere Seite zu finden   Auf der Website ist die 404-Seite normalerweise klein   ( Ссылка )

Wenn Sie also versuchen, Cookies zu speichern und sie nach dem Zurücksetzen des Browsers wiederherzustellen, müssen Sie möglicherweise zu einem anderen Ort auf der Website navigieren, bevor Sie versuchen, die Cookies erneut zu erstellen.

Ich würde das über IRB versuchen und sehen, was Sie bekommen

    
Chuck van der Linden 08.05.2013 22:12
quelle
2

Wenn Sie einen vorhandenen Ordner als user-data-dir switch verwenden, behalten Sie alle Dateien und Sitzungen, nachdem der Browser geschlossen wurde. Andernfalls erstellt er einen Ordner und löscht ihn anschließend (mit allen Cookies, tmp-Dateien und Sitzungen).

Sie können also alle vorhandenen Profile verwenden, die sich wie hier beschrieben hier befinden, oder den Standardpfad bei chrome://version/ url

In meinem Fall ist es /Users/mikhail/Library/Application Support/Google/Chrome/Default

Aus irgendeinem Grund wäre der richtige Pfad dieser String ohne den letzten '/ Default' Teil des Pfades:

%Vor%

In diesem Fall behalten Sie den gesamten Verlauf und die installierten Erweiterungen bei.

Oder einfacher:

%Vor%

In diesem Fall sollte some folder existieren und Sie werden ein neues Profil von Grund auf erstellen.

    
Mikhail Chuprynski 26.12.2015 20:32
quelle