我正在为使用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”( )”。
谢谢大家!! :)
答案 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代码。