Ich versuche eine Google Maps App mit Rails3 zu testen. Ich benutze Gurke mit Capybara und Selen für JavaScript-Tests. Ich habe eine Karte, wo ich darauf warte, dass Google Maps geladen wird, und dann eine Ajax-Anfrage an meinen Server, wo ich Orte erhalte, die ich in die Karte einfüge. Ich frage mich, ob es mit Selen möglich ist zu warten, bis Google Maps geladen wird, der Ajax-Aufruf an meinen Server ist beendet und die Marker sind in der Karte platziert. Das andere Problem ist, wie man diesen Marker in Google Maps auswählt. Gibt es Selektoren?
Oder sollte ich in die andere Richtung gehen und ein JS-Testframework wie Jasmine verwenden, um zu testen, ob meine Klassen geladen sind und so weiter. Ich habe keine Erfahrung mit Jasmine, also ist es möglich, Google Maps zu testen?
Vielleicht kennt jemand eine Lösung, oder einen Hinweis, wenn es nicht möglich ist, oder eine Abhilfe oder ...;)
[UPDATE 1]
Aber hier kommt das nächste Problem. Wie wähle ich einen bestimmten Marker aus? Gibt es einen Weg innerhalb der Javascript Google Maps API, um ihm eine ID zuzuweisen, damit ich #marker_1
, #marker_2
... verwenden kann?
Und noch eine seltsame Sache ist, dass die Funktion wie wait_for_element
oder wait_for_condition
nicht in meinen Gurkenschrittdefinitionen verfügbar ist. Sind die Google Selen-Tests mit einer eigenen Funktion wie der waitForElementPresent
? Oder funktioniert dieses Standard-Selen? Ich habe viele Posts gefunden, wo sie immer etwas wie
Innerhalb meiner Step-Definitionen sind selenium
und @selenium
var a nil. Wie kann ich auf diese Methoden zugreifen? Ich habe auch diese Beitrag , aber es ist vom Okt. 08, also denke ich, dass es eine bessere Lösung geben muss (übrigens funktioniert diese Lösung auf den ersten Blick).
Wie auf dieser Seite geben sie einen Überblick über einige Selenmethoden, wie man auf eine Bedingung oder ein Element wartet. Ist das noch vorhanden? Wie kann ich diese Funktionen nutzen?
[UPDATE 2]
Verdammt, ich habe herausgefunden, dass die Selentests, die ich oben erwähnt habe, für V2 von Google Maps sind, nicht für V3. Ich habe es mit
probiert %Vor%Aber es funktioniert nicht. Der Marker ist auf der Karte sichtbar, aber ich erhalte einen Timeout-Fehler, weil er mit diesem XPath-Selektor nicht gefunden wird. Ich frage mich, ob es generell möglich ist, einen Marker aus dem DOM auszuwählen.
Ich habe auch versucht, dem Marker ein zusätzliches Attribut zuzuweisen, wenn ich es erstelle:
%Vor% Aber wenn ich versuche, mit dem jQuery-Selektor $("#marker_1")
darauf zuzugreifen, findet er es nicht. Also, noch keine Lösung, noch.
Was ich mit mir mache ist, die Aufrufe in Ihren Schrittdefinitionen wie folgt auszuführen:
page.execute_script ("launchmap ()")
dann auf ihre Existenz auf der Seite überprüfen .. dann tun Sie Ihre normale Ajax Check-in Capybara. der marker wird in einem div rechts enthalten sein? Wenn Sie dann launchmap aufrufen und die Marker erstellen, sollte Capybara Ihre Marker finden können
AKTUALISIEREN
habe über dieses Plugin erfahren: Ссылка
es gibt Ihnen semantisches Markup für Ihre google maps (für gradeful Degradation), das Ihnen erlaubt, tatsächlich zu überprüfen, ob ein Marker mit Capybara existiert. hoffe, es hilft (habe keine Zeit, es zu testen, aber es sieht vielversprechend aus)
Zu Ihrer ersten Frage: Verwenden Sie waitForCondition mit einem Skript, das auf die Anwesenheit der Marker prüft.
%Vor%Ich habe einen Weg gefunden, meine Google Map mit RSpec und Capybara zu testen. Ich wollte einen Test schreiben, um zu bestätigen, dass der Inhalt eines internen JSON-Feeds in Form von Markierungen und Infofenstern auf meiner Karte (Google Maps API V3) in einer Rails 4 App endete.
Das Problem: Selbst wenn ich die Tests mit Selenium Webdriver durchführte, die JS unterstützen, habe ich keine Möglichkeit gefunden, die Marker mit Capybara auszuwählen, um nach ihrem Inhalt zu suchen.
Meine Lösung: 1. Ich habe meinem HTML-Markup ein Div mit ID-Testbox hinzugefügt 2. Ich schrieb drei Hilfsmethoden in mein JS, die Zugriff auf meine Kartenmarker hatten und fügte die Ergebnisse zur Testbox hinzu. 3. In Capybara habe ich die Hilfsmethoden ausgeführt und erwartet, den erwarteten Inhalt oder die erwarteten Werte in der Box zu finden.
Der Code:
HTML:
%Vor%JS-Helfer: in app / assets / javascripts / events.js
%Vor%"Markierungen" in meinem Code ist ein Array, das ich in jeden Marker einschiebe, nachdem ich es zur Karte hinzugefügt habe. Ich kann sicher sein, dass der Inhalt tatsächlich auf der Karte ist, wenn er sich im Marker-Array befindet.
Test:
%Vor%Um die Javascripts auszuführen, müssen Selenium-Webdriver und Firefox installiert sein ('' gem 'selen-webdriver' '' in Ihrer Gemfile)
Ich erstelle den Testinhalt (lass! ...) mit Factory Girl.
Wenn Sie die Tests durchführen, sehen Sie tatsächlich die Marker auf der Karte und ihr Inhalt erscheint in der Testbox.
Achten Sie darauf, die URL zu aktivieren, die Capybara verwendet, um den Testserver in der Google-Konsole für Ihre App auszuführen.
Sie können diese URL (und die Fehlermeldung beim Laden von Google Maps) überprüfen, indem Sie config.debug= true
innerhalb des Capybara-Treiberkonfigurations-Ladeblocks setzen.
Tags und Links google-maps ruby-on-rails capybara selenium cucumber