2013-04-26 78 views
8

我正在做一些使用Symfony2(2.1)完成的應用程序的功能測試,並且我遇到了一個問題。Symfony2功能測試 - 點擊與jQuery交互的元素

我有部分網站在用戶點擊鏈接或其他元素時加載,但這些操作是使用jQuery和$ .post調用執行的。我怎樣才能讓Symfony2爬蟲執行這些調用?

當我做這樣的事情:

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

爬蟲獲取的「A」元素的「href」並啓動它,但「HREF」是空的,而「點擊()」函數與此元素相關聯,從而阻止使用「preventDefault()」的點擊操作。

謝謝大家! :)

回答

7

Symfony功能測試通過直接調用Symfony內核來執行您的代碼。它們不是通過Web瀏覽器運行的,因此不支持JavaScript(它不會被執行)。

如果無法在沒有JavaScript的情況下運行應用程序,那麼您必須使用其他工具進行功能測試。其中一個選項是使用Mink以及其中一個支持javascript的驅動程序(如Selenium2)。

1

Symfony不支持javascript,Ajax,Jquery。它由phpunit用於測試php函數。這不是爲了這個。可以使用casperjs。使用CasperJS,您可以在Symfony上使用您的抓取工具進行功能測試,並獲得所有JavaScript和css代碼。

4

我可以使用「無頭」瀏覽器作爲PhantomJS這項任務。

PhantomJS是一款帶JavaScript API的無頭WebKit腳本。它具有對各種Web標準的快速和本地支持:DOM處理,CSS選擇器,JSON,Canvas和SVG。

爲了方便您的工作,你可以使用CasperJS

CasperJS是PhatomJS伴侶帶來一個很大的提高API來緩解刮和自動化工作流程的創建。

在您的情況下,您嘗試抓取的Web上下文包含通過JQuery和AJAX提供的動態內容,如果您想使用Javascript來實現這一點,CasperJS是一個很好的選擇。您可以使用它來觸發事件,添加處理步驟,包括在每個ajax調用之後等待和驗證的函數,以便處理任何下一步。

下面的例子如何抓取與CasperJS和JQuery網站: CasperJs and Jquery with chained Selects

下面的例子,如何用CasperJS和公正的JavaScript抓取網站: CasperJS dynamic selectlists