Symfony2功能测试 - 点击带有jQuery交互的元素

时间:2013-04-26 16:00:22

标签: jquery symfony phpunit functional-testing web-crawler

我正在为使用Symfony2(2.1)完成的应用程序进行一些功能测试,我遇到了问题。

我有网站的某些部分在用户点击链接或其他元素时加载,但这些操作是使用jQuery和$ .post调用执行的。如何让Symfony2抓取工具进行这些调用?

当我做这样的事情时:

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

抓取工具获取“a”元素的“href”并启动它,但“href”为空,并且“click()”函数与此元素关联,防止点击操作带有“preventDefault”( )”。

谢谢大家!! :)

3 个答案:

答案 0 :(得分:8)

Symfony功能测试通过直接调用Symfony内核来运行您的代码。它们不是通过Web浏览器运行的,因此不支持javascript(根本不执行)。

如果没有javascript就无法运行您的应用程序,那么您必须使用其他工具进行功能测试。其中一个选项是将Mink与其中一个支持javascript的驱动程序一起使用(例如Selenium2)。

答案 1 :(得分: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

答案 2 :(得分:1)

Symfony不支持javascript,Ajax,Jquery。它被phpunit用于测试php功能。它不是为此而制造的。

您可以使用casperjs。使用CasperJS,您可以像在Symfony上使用爬虫一样进行功能测试,并获得所有javascript和css代码。