2017-03-14 4 views
2

Alors, j'utilise les js cauchemar de cauchemar, et j'aime simuler une procédure de connexion, de le faire, je l'utilise nightmarejs comme çaObtenez demande ajax avec

function testiiing(){ 
    nightmare 
      .goto('http://localhost:4200/login') 
      .type('#name', 'test') 
      .type('#pwd', 'test') 
      .click('#log') 
      .evaluate(function() { 
      return //something 
      }) 
      .then(function(result) { 
      console.log(result); 
      }) 
      .then(function() { 
      console.log('done'); 
      }) 
      .catch(function(error){ 
      console.error('an error has occurred: ' + error); 
      }); 
} 

La chose est que je voudrais changer le "// quelque chose" en quelque chose qui me renverrait "nom = test & pwd = test" (donc la demande ajax post), quelqu'un peut-il m'aider ou me dire si c'est possible du tout?

+0

Bonjour, est-ce que ma réponse vous a aidé? – Andrew

+0

Salut Andrew, ça pourrait aider, si je pouvais trouver un moyen de faire cauchemarder le paramètre "$", je cherche un moyen depuis que tu m'as répondu ^^ –

+0

Désolé quoi? n'utilisez-vous pas jQuery? – Andrew

Répondre

0

aucune expérience avec cauchemar js mais puisque vous avez jQuery étiqueté, utilisez simplement .serialize()

https://api.jquery.com/serialize/

La méthode .serialize() crée une chaîne de texte en notation standard de code URL. Il peut agir sur un objet jQuery qui a sélectionné les contrôles de formulaire individuels, tels que <input>, <textarea> et <select>: $("input, textarea, select").serialize();

Exemple:

$("form").on("submit", function(event) { 
    event.preventDefault(); 
    console.log($(this).serialize()); 
}); 

Cela devrait faire exactement ce que vous recherchez.

Pour votre exemple précis, regarde aussi dans .serializeArray()

0

Je sais que c'est vieux, mais cela me était difficile trop. Voilà ce que je me sers et il fonctionne:

test(){ 
     let selector = "#twd"; 
     return this.nightmare 
     .goto("https://time.is/") 
     .inject("js", "jquery.js") //actually injects jquery, which doesn't exist on the site 
     .evaluate((selector) =>{ 
      return new Promise((resolve, reject) =>{ 
       // resolve(document.querySelector(selector).innerHTML) 
       $.ajax({ 
        url: "https://jsonplaceholder.typicode.com/posts", 
        type: "POST", 
        data: {foo: "bar"}, 
       }) 
       .then(response =>{ 
        resolve(response) //resolve the promise from browser and resume execution in node 
       }) 
      }) 
     }, selector) //can only pass in one param 
     .then(result =>{ 
      let x = result; 
     }) 
    } 

    //result = {id: some number} 

sélecteur avis, il doit être l'un paramter, ou un objet si vous souhaitez des valeurs plus importantes. Ce n'est pas vraiment utilisé dans cet exemple merdique, mais c'est juste un exemple merdique.

Et pour une raison quelconque, le style js dans le rappel d'évaluation pourrait gérer le code de style es6.

En outre, la chaîne de promesses interne est complètement différente de la chaîne extérieure. Tout dans l'évaluation fonctionne en électron PAS votre serveur de noeud. Mais une fois que vous avez résolu, il reprend dans le nœud.