2013-04-26 5 views
8

Ich mache einige Funktionstests für eine Anwendung mit Symfony2 (2.1) gemacht und ich bin mit einem Problem stecken.Symfony2 Functional Testing - Klicken Sie auf Elemente mit jQuery Interaktion

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-Aufrufe durchgeführt. Wie kann ich den Symfony2-Crawler dazu bringen, diese Aufrufe auszuführen?

Wenn ich etwas tun, wie folgt aus:

$link = $crawler->filter('ul.line_menu a')->eq(1)->link(); 
$crawler = $client->click($link); 

Der Crawler wird die „href“ der „ein“ Element und startet es, aber die „href“ leer ist, und ein „Klick()“ Funktion ist diesem Element zugeordnet und verhindert die Klickaktion mit "preventDefault()".

Danke euch allen !! :)

Antwort

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 Werkzeug für den Funktionstest verwenden. Eine der Optionen ist, Mink mit einem der Treiber zu verwenden, die Javascript unterstützen (wie Selenium2).

1

Symfony unterstützt kein JavaScript, Ajax, Jquery. Es wird von phpunit zum Testen von PHP-Funktionen verwendet. Es wurde dafür 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.

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 bietet schnelle und native Unterstützung für verschiedene Web-Standards: DOM-Handhabung, CSS-Selektor, JSON, Canvas und SVG.

Um Ihre Arbeit zu erleichtern, können Sie CasperJS

CasperJS zu verwenden ist ein Begleiter für PhatomJS, die eine stark verbesserte API bringt die Schaffung von Schaben und Automatisierung von Workflows zu erleichtern.

In Ihrem Fall, wo der Web-Kontext, die Sie dynamische Inhalte durch JQuery und AJAX enthält zu kriechen versuchen, ist CasperJS eine ausgezeichnete Wahl, wenn Sie Javascript, um verwenden möchten, 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 eine Website kriechen mit CasperJS und JQuery: CasperJs and Jquery with chained Selects

Hier ein Beispiel, wie man eine Website mit CasperJS kriechen und nur Javascript: CasperJS dynamic selectlists