Symfony2功能测试 - 使用jQuery交互单击元素

8

我正在为一个使用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个回答

8
Symfony功能测试通过直接调用Symfony内核来测试您的代码。它们不通过Web浏览器运行,因此不支持JavaScript(根本不执行)。
如果无法在没有JavaScript的情况下运行应用程序,则必须使用另一种功能测试工具。其中一个选项是使用Mink和支持JavaScript的驱动程序之一(如Selenium2)。

4
我可以使用一个"无头"浏览器来完成这个任务,例如PhantomJS

PhantomJS是一个无头WebKit,带有JavaScript API。它快速且本地支持各种Web标准:DOM处理,CSS选择器,JSON,Canvas和SVG。

为了简化您的工作,您可以使用CasperJS

CasperJS是PhatomJS的伴侣,它提供了一个大大改进的API,以便于创建爬取和自动化工作流程。

在您的情况下,如果您想使用Javascript实现包括JQuery和AJAX动态内容的爬取,那么CasperJS是一个很好的选择。您可以使用它来触发事件,在任何下一步骤之前添加过程步骤,包括等待和验证每个ajax调用后再进行处理。
以下是使用CasperJS和JQuery爬取网站的示例: CasperJs and Jquery with chained Selects 以下是使用CasperJS和纯Javascript爬取网站的示例: CasperJS dynamic selectlists

1
Symfony不支持javascript、Ajax和Jquery。它被phpunit用于测试php功能,而不是为此而设计的。您可以使用casperjs。使用CasperJS,您可以像在Symfony上使用爬虫一样进行功能测试,并获取所有的javascript和css代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接