Symfony2 Functional Testing - Klicken Sie auf Elemente mit jQuery-Interaktion

8

Ich mache einige Funktionstests für eine Anwendung, die mit Symfony2 (2.1) durchgeführt wurde und ich habe ein Problem.

Ich habe einige Teile der Website, die geladen werden, wenn der Benutzer auf einen Link oder ein anderes Element klickt, aber diese Aktionen werden mit jQuery- und $ .post-Aufrufen ausgeführt. Wie kann ich den Symfony2-Crawler dazu bringen, diese Aufrufe auszuführen?

Wenn ich so etwas tue:

%Vor%

Der Crawler ruft den "href" des Elements "a" ab und startet ihn, aber "href" ist leer, und diesem Element ist eine Funktion "click ()" zugeordnet, die die Klickaktion mit "preventDefault ( ) ".

Danke euch allen !! :)

    
user2324588 26.04.2013, 16:00
quelle

3 Antworten

7

Symfony-Funktionstests üben Ihren Code aus, indem Sie den Symfony-Kernel direkt aufrufen. Sie werden nicht über einen Webbrowser ausgeführt und unterstützen daher kein Javascript (das einfach nicht ausgeführt wird).

Wenn es nicht möglich ist, Ihre Anwendung ohne JavaScript auszuführen, müssen Sie ein anderes Tool für den Funktionstest verwenden. Eine der Optionen ist, Mink mit einem der Treiber zu verwenden, die JavaScript unterstützen (wie Selen2 ).

    
Jakub Zalas 26.04.2013 19:27
quelle
4

Ich könnte einen "kopflosen" Browser für diese Aufgabe als PhantomJS verwenden.

  

PhantomJS ist ein Headless-WebKit, das mit einer JavaScript-API skriptfähig ist. Es hat schnelle und native Unterstützung für verschiedene Web-Standards: DOM-Handhabung, CSS-Selektor, JSON, Canvas und SVG.

Um Ihre Arbeit zu erleichtern, könnten Sie CasperJS

verwenden
  

CasperJS ist ein Begleiter für PhatomJS, der eine stark verbesserte API bietet, um das Erstellen von Scraping- und Automatisierungs-Workflows zu erleichtern.

In Ihrem Fall, in dem der Webkontext, den Sie zu durchsuchen versuchen, dynamischen Inhalt über JQuery und AJAX enthält, ist CasperJS eine ausgezeichnete Option, wenn Sie Javascript verwenden möchten, um dies zu erreichen. Sie können damit Ereignisse auslösen, Prozessschritte hinzufügen, Funktionen zum Warten hinzufügen und nach jedem Ajax-Aufruf validieren, bevor Sie einen nächsten Schritt ausführen.

Hier ein Beispiel, wie man eine Website mit CasperJS und JQuery crawlt: CasperJs und Jquery mit angeketteten Selects

Hier ein Beispiel wie man eine Website mit CasperJS und einfach Javascript crawlt: CasperJS dynamische Auswahllisten

    
Hemerson Varela 05.06.2013 13:10
quelle
1

Symfony unterstützt kein JavaScript, Ajax, Jquery. Es wird von phpunit zum Testen von PHP-Funktionen verwendet. Dafür wurde es nicht gemacht.

Sie können casperjs verwenden. Mit CasperJS kannst du deinen Funktionstest wie mit deinem Crawler auf Symfony machen und bekommst alles Javascript und CSS-Code.

    
Babou34090 05.06.2013 01:47
quelle