4

Ich habe Schwierigkeiten, mit meinen Google Place-Ergebnissen zur automatischen Vervollständigung innerhalb meiner Integrationstests zu interagieren.Wie simuliert man einen Klick auf ein Autocomplete-Ergebnis von Google Place?

Mit dem vorherigen Code gibt es kein Ergebnis und die Eingabe ist nicht gefüllt, noch sind die vorgeschlagenen Ergebnisse ausgeblendet.

Wie kann ich die Aktion eines Benutzers simulieren, der eine Adresse in die Autocomplete-Eingabe eingibt und auf eines der vorgeschlagenen Ergebnisse klickt?

Einige Ressourcen, die ich auf zu fragen ähnliche Fragen gekommen sind:

How to "simulate" a click on a Google Maps Marker?

https://developers.google.com/maps/documentation/javascript/events?csw=1#EventsOverview

+1

Können Sie ein vollständiges Testskript bereitstellen? Welche Version von PhantomJS benutzt du? –

+0

@ ArtjomB. Ich benutze Casperjs 1.1.1 und ich glaube, PhantomJS 2.1.7. Ein vollständiges Testskript wäre nur eine HTML-Seite mit Google Autocomplete, die auf eine Eingabe mit dem Selektor 'input.street-address' initialisiert wurde. – Feek

Antwort

2

Ich hatte dieselbe Frage. um in die Orte automatische Vervollständigung Quellcode Nach dem Graben, kam ich mit dem Follow-up, die Sie in Ihrem CasperJS Test enthalten können, oder nach Bedarf ändern:

https://gist.github.com/jadell/8b9aeca9f1cc738843eca3b4af1e1d32

casper.then(function() { 
    casper.sendKeys('input.street-address', 'fake address here', { keepFocus: true }); 
    casper.page.sendEvent('keydown', 0); 
    casper.page.sendEvent('keyup', 0); 
}); 
casper.waitUntilVisible('.pac-container .pac-item', function() { 
    casper.page.sendEvent('keydown', casper.page.event.key.Down); 
    casper.page.sendEvent('keydown', casper.page.event.key.Enter); 
}); 

Grundsätzlich versuchen Sie nicht, simulieren Sie einen Mausklick auf das Ergebnis, verwenden Sie den Abwärtspfeil und die Eingabetaste, um das erste Ergebnis auszuwählen.

Die Autocomplete-Funktion wartet vor dem Auslösen auf Schlüssel-Down- und Up-Ereignisse, die von der sendKeys-Methode nicht gesendet werden. Daher senden wir einige Null-Key-Ereignisse mit sendEvent. Warten Sie dann, bis der Container "Results" angezeigt wird, und senden Sie den Pfeil nach unten und die Taste "Enter", um das erste Ergebnis auszuwählen.

+0

Ich musste hinzufügen: casper.wait (1000, Funktion() { casper.page.sendEvent ('keydown', 0); casper.page.sendEvent ('keyup', 0); }); , damit es in meinem Fall funktioniert! – F3L1X79

2

Das Autocomplete Eingabeelement nicht über ein Click-Ereignis angebracht, so dass es einen Klick Senden haben Kein Effekt. ein keydown Ereignis Versuchen:

casper.page.sendEvent('keydown', someKey); 
+0

Vielen Dank für Ihre Antwort, aber ich versuche nicht, in das Eingabefeld zu tippen. Das habe ich schon erreicht. Ich habe Probleme damit, auf eines der vorgeschlagenen Ergebnisse zu klicken. – Feek

0

Ich war nicht in der Lage, die tatsächliche Klicken eines der automatischen Vervollständigung Ergebnisses zu simulieren, jedoch war es möglich, das gleiche Ergebnis zu erreichen, indem Sie den Pfeil nach unten verwendet und Drücken von Tasten eingeben.

Nach Ihrem Text in dem die automatischen Vervollständigung Eingabe eingeben und sicher zu sein, um den Fokus zu halten, einfach die folgenden Zeilen von Code und Ihr Ergebnis wird ordnungsgemäß durch den Google Places Autocomplete API

casper.then(function() { 
    casper.page.sendEvent('keypress', casper.page.event.key.Down); 
    casper.page.sendEvent('keypress', casper.page.event.key.Enter); 
}); 

casper.thenEvaluate(function() { 
    $(inputSelector).blur(); 
}, placeSelector, inputSelector); 

Diesen Code wird gesetzt Wählen Sie das erste Autocomplete-Ergebnis aus.

Verwandte Themen