2017-03-14 4 views
2

Also, ich bin mit Alptraum js und Ich mag eine Login-Prozedur simulieren, zu tun, damit ich nightmarejs wie dieErhalten Ajax-Request mit Alptraum js

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); 
      }); 
} 

Die Sache ist Ich mag würde zu ändere das "// etwas" in etwas, das mir zurückgeben würde "name = test & pwd = test" (so die ajax-post-anfrage), kann jemand mir helfen oder mir sagen, ob es überhaupt möglich ist?

+0

hi, hat meine Antwort Ihnen geholfen? – Andrew

+0

Hallo Andrew, es könnte helfen, wenn ich einen Weg finden könnte, Albtraum zu machen, akzeptiere "$" -Parameter, ich habe einen Weg gesucht, seit du mir geantwortet hast ^^ –

+0

Sorry was? verwendest du nicht jQuery? – Andrew

Antwort

0

keine Erfahrung mit Alptraum js aber da Sie jQuery mit Tags versehen haben, einfach .serialize()

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

Die .serialize() Methode eine Textzeichenfolge in Standard-URL-kodierte Notation erstellt. Es kann auf ein jQuery-Objekt handeln, die einzelne Formular-Steuerelemente, wie <input>, <textarea> und <select> ausgewählt hat: $("input, textarea, select").serialize();

Beispiel:

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

Das für tun sollte genau das, was Sie suchen.

Für Ihr spezielles Beispiel auch einen Blick in .serializeArray()

0

Ich weiß, das ist alt, aber das war auch für mich schwierig. Dies ist, was ich verwende und es funktioniert:

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} 

Hinweis Selektor, muss es ein Paramter oder ein Objekt sein, wenn Sie mehr Schlüsselwerte wollen. Es wird nicht wirklich in diesem beschissenen Beispiel verwendet, aber es ist nur ein beschissenes Beispiel.

Und aus welchem ​​Grund auch immer, könnte der JS-Stil in der Auswertung Callback es6 Stil Code verarbeiten.

Auch die interne Versprechen Kette ist völlig anders als die äußere. Alles innerhalb von evaluate läuft in Elektron NICHT auf Ihrem Node-Server. Sobald Sie jedoch aufgelöst haben, wird im Knoten wieder gesichert.

Verwandte Themen