Estou fazendo alguns testes funcionais para uma aplicação feita com o Symfony2 (2.1) e estou com um problema.
Eu tenho algumas partes do site que são carregadas quando o usuário clica em um link ou outro elemento, mas essas ações são executadas usando as chamadas jQuery e $ .post. Como posso fazer com que o rastreador do Symfony2 faça essas chamadas?
Quando faço algo assim:
$link = $crawler->filter('ul.line_menu a')->eq(1)->link(); $crawler = $client->click($link);
O rastreador obtém o “href” do elemento “a” e o lança, mas o “href” está vazio e uma function “click ()” é associada a esse elemento, impedindo a ação de clique com “preventDefault ()”.
Obrigado a todos !! 🙂
Os testes funcionais do Symfony exercitam seu código chamando diretamente o kernel do Symfony. Eles não são executados através de um navegador da web e, portanto, não suportam javascript (que simplesmente não é executado).
Se não for possível executar seu aplicativo sem o javascript, você precisará usar outra ferramenta para testes funcionais. Uma das opções é usar o Mink com um dos drivers que suportam javascript (como o Selenium2 ).
Eu poderia usar um navegador “headless” para essa tarefa como PhantomJS .
O PhantomJS é um script WebKit sem header com uma API JavaScript. Ele tem suporte rápido e nativo para vários padrões da web: manuseio DOM, seletor CSS, JSON, Canvas e SVG.
Para facilitar o seu trabalho, você pode usar o CasperJS
O CasperJS é um complemento do PhatomJS, que traz uma API muito aprimorada para facilitar a criação de streams de trabalho de raspagem e automação.
No seu caso, onde o contexto da web que você está tentando rastrear inclui conteúdo dynamic por meio de JQuery e AJAX, o CasperJS é uma excelente opção se você quiser usar JavaScript para conseguir isso. Você pode usá-lo para acionar events, adicionar etapas do processo, include funções para aguardar e validar após cada chamada ajax antes de processar qualquer próxima etapa.
Aqui um exemplo de como rastrear um site com CasperJS e JQuery: CasperJs e Jquery com Selects encadeados
Aqui um exemplo de como rastrear um site com CasperJS e apenas JavaScript: CasperJS listas de seleção dinâmicas
O Symfony não suporta javascript, Ajax, Jquery. É usado pelo phpunit para testar as funcionalidades do php. Não foi feito para isso.
Você pode usar casperjs . Com CasperJS você poderia fazer seu teste funcional como com seu rastreador no Symfony e obter todo o código javascript e css.