En cliquant sur un bouton pour exécuter casperJS en PHP et echo, vous obtenez la même page PHP avec le bouton

J'ai un script casperJS qui connecte plusieurs utilisateurs avec les informations d'identification fournies; Qui renvoie le nombre de connexions réussies et échouées ainsi que les noms d'utilisateur qui ont réussi et échoué. Je tente d'exécuter ce script en cliquant sur un bouton dans une page PHP, et après que casperJS fonctionne, je souhaite que les résultats soient répercutés sur la même page où le bouton a été cliqué (sans recharger la page). J'ai examiné et examiné les Q / As suivants, mais aucun d'entre eux ne fournit une réponse adéquate à mon problème (puisque les résultats ne sont pas affichés une fois le script terminé): cliquez sur le bouton pour exécuter le code php et le résultat d'écho , Exécuter / Exécuter Script CasperJS en cliquant sur un bouton sur la page Web , CasperJS transmettant les données à PHP .

Mon serveur Web actuel est configuré:

  • Version PhantomJS: 1.9.7
  • CasperJS version: 1.1.0-beta3
  • Apache / 2.2.27 (Unix) mod_ssl / 2.2.27 OpenSSL / 1.0.1h DAV / 2 PHP / 5.5.14
  • Sur OS X 10.9.3

Mon script casperJS: gist

J'ai d'abord appelé le script casperJS directement sur la page PHP (mais cela a évidemment provoqué l'exécution du script, puis la page chargée), en utilisant ce (de Comment exécuter le script casperJS de l'API php ):

echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js"); 

Une fois la page chargée, elle a fait écho à une partie des résultats de l'exécution du script. Je ne suis pas sûr de savoir pourquoi il a seulement choisi de faire écho à la dernière this.echo (JSON.stringify (tracker)); . J'aimerais évidemment imprimer tous les échos dans le script, mais cela peut être une autre question; Je voudrais également être une balle pour colorier les échos. En outre, les captures d'écran n'ont pas eu lieu non plus.

Maintenant, j'ai en fait un bouton, et quand je l'appuie, il reste pressé aussi longtemps que le script casperJS est en cours d'exécution, et une fois qu'il est terminé, il devient impitoyable, mais je n'ai pas de résultat résonné. Je n'ai aucun moyen de savoir si le script a fonctionné ou pas puisque les captures d'écran ne se produisent pas, bien que le temps que le bouton reste pressé me fait croire qu'il a été exécuté. C'est donc ma page PHP:

 <html> <head> <title>casperJS testing</title> </head> <body> <center> <p>Welcome to the casperJS Automated Testing Utility</p> <br> <input type="button" name="runcasperjs" onclick="casperjs()"><div id="results">Waiting for echoes</> <br> <?php ## This Function Below Sets PhantomJs So CasperJS Can Use It putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs"); echo "Running PhantomJS version: "; echo exec('/usr/local/bin/phantomjs --version 2>&1'); echo "<br />"; echo "Running CasperJS version: "; echo exec('/usr/local/bin/casperjs --version 2>&1'); echo "<br />"; echo 'Current PHP version: ' . phpversion(); echo "<br />"; $version = apache_get_version(); echo "$version\n"; ?> </center> <script> function casperjs(){ var xhReq = new XMLHttpRequest(); var request = "http://pathToLocalHost/phpTest.php" // this will prepare a request to your server xhReq.open("GET", request, false); // send a request xhReq.send(null); document.getElementsByID("results").innerHTML=xhReq.responseText /// this will display results } </script> </body> </html> 

Et c'est la page PHP activée onclick phpTest.php :

 <?php echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js"); ?> 

Peut-être que je le fais complètement mal et je ne devrais pas avoir une autre page PHP, je ne suis pas sûr. J'ai essayé de créer une solution en étudiant les Q / As précédents, mais je ne peux pas trouver une solution. Merci!

J'ai donc pensé que je pourrais utiliser AJAX pour afficher les résultats échoués par Casperj dans la même page. J'ai fait une page HTML avec deux boutons: 1) Exécutez casperjs AJAX pour exécuter l'AJAX, et 2) Exécutez casperjs pour simplement charger une page PHP exécutant le script Casperjs et imprimer les résultats dans une nouvelle page. Voici le HTML (avec l'aide de Comment lier le fichier javascript externe sur le clic du bouton pour le bouton AJAX, cliquez sur):

 <!DOCTYPE html> <html> <head> <title>casperJS testing</title> </head> <center> <body> <div id="mainContent"> <p>Welcome to the Automated Testing Utility</p> <table> <tr> <td><button id="button_AJAX">Run casperjs AJAX</button></td> <td><form action="runscript.php"> <input type="submit" value="Run casperJS"> </form></td> </tr> </table> </div> <script type="text/javascript"> var button = document.getElementById('button_AJAX'); button.onclick = function(){ var script = document.createElement("script"); script.type = "text/javascript"; script.src = "casperjsajax.js"; document.getElementsByTagName("head")[0].appendChild(script); return false; } </script> </center> </body> </html> 

Le code casperjsajax.js (avec l'aide de JS Essential Training ):

 // 1: Create the request var myRequest; // feature check! if (window.XMLHttpRequest) { // does it exist? we're in Firefox, Safari etc. myRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { // if not, we're in IE myRequest = new ActiveXObject("Microsoft.XMLHTTP"); } // 2: Create an event handler for request to call back myRequest.onreadystatechange = function(){ if (myRequest.readyState === 4) { var p = document.createElement("p"); var t = document.createTextNode(myRequest.responseText); p.appendChild(t); document.getElementById("mainContent").appendChild(p); } }; // Open and send it myRequest.open('GET', 'scriptresults.php', true); // any parameters? myRequest.send(null); 

Le code scriptresults.php :

 <?php echo "Here are your test results!"; echo "<br />"; echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js"); ?> 

Et le lien runscript.php pour non-AJAX

 <html> <head> <title>casperJS Test Results</title> </head> <body> <center> <p>Here are your results!</p> <br> <?php echo exec("/usr/local/bin/casperjs /full/path/to/your_script.js"); ?> </center> </body> </html>