2013-04-26 26 views
8

Robię kilka testów funkcjonalnych dla aplikacji wykonanej z Symfony2 (2.1) i utknąłem z problemem.Testowanie funkcjonalne Symfony2 - Kliknij elementy z interakcją jQuery

Mam niektóre części witryny, które ładują się, gdy użytkownik kliknie łącze lub inny element, ale te działania są wykonywane przy użyciu wywołań jQuery i $ .post. W jaki sposób mogę uruchomić robot indeksujący Symfony2 w celu wykonywania tych połączeń?

Kiedy coś takiego zrobić:

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

Robot dostaje "href" z "a" elementu i uruchamia go, ale "href" jest pusta, a "click()" funkcja jest powiązana z tym elementem, zapobiegając akcji kliknięcia za pomocą "preventDefault()".

Dziękuję wszystkim !! :)

Odpowiedz

7

Testy funkcjonalne Symfony wykonują kod, bezpośrednio wywołując jądro Symfony. Nie są uruchamiane przez przeglądarkę internetową i dlatego nie obsługują javascript (który po prostu nie jest uruchamiany).

Jeśli nie można uruchomić aplikacji bez javascript, należy użyć innego narzędzia do testowania funkcjonalnego. Jedną z opcji jest użycie Mink z jednym ze sterowników obsługujących javascript (np. Selenium2).

1

Symfony nie obsługuje javascript, Ajax, Jquery. Jest używany przez phpunit do testowania funkcjonalności php. Nie został stworzony do tego.

Można użyć casperjs. Dzięki CasperJS możesz przeprowadzić test funkcjonalny, tak jak w przypadku robota w Symfony, a otrzymasz cały kod javascript i css.

4

Mogę użyć przeglądarki "bez głowy" do tego zadania jako PhantomJS.

PhantomJS to bezgłowy skrypt WebKit z interfejsem JavaScript API. Posiada szybką i natywną obsługę różnych standardów internetowych: obsługi DOM, selektora CSS, JSON, Canvas i SVG.

W celu ułatwienia pracy, można użyć CasperJS

CasperJS jest towarzyszem dla PhatomJS który przynosi znacznie lepsze API w celu ułatwienia tworzenia skrobanie i przepływy pracy automatyki.

w przypadku, gdy z kontekstu internetowych, które starają się czołgać obejmuje dynamicznej zawartości poprzez jQuery i AJAX, CasperJS jest doskonałym rozwiązaniem, jeśli chcesz używać JavaScript, aby to osiągnąć. Możesz go użyć do wyzwalania zdarzeń, dodawania kroków procesu, włączania funkcji, aby czekać i sprawdzać po każdym wywołaniu ajax, aby przetworzyć następny krok.

Oto przykład jak indeksować strony internetowej z CasperJS i jQuery: CasperJs and Jquery with chained Selects

Oto przykład jak indeksować stronę internetową z CasperJS i tylko javascript: CasperJS dynamic selectlists