2017-03-14 43 views
2

所以,我使用的是噩夢JS Ajax請求,我喜歡模擬登錄過程,這樣做,我用nightmarejs像獲取了惡夢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); 
      }); 
} 

事情是我想把「//東西」改成可以讓我返回的東西「name = test & pwd = test」(所以ajax post請求),任何人都可以幫助我或告訴我它是否可能?

+0

嗨,我的回答有幫助嗎? – Andrew

+0

嗨安德魯,這可能會有所幫助,如果我可以找到一種方法讓惡夢接受「$」參數,我一直在尋找一種方式,因爲你回答我^^ –

+0

對不起?你不是在用jQuery嗎? – Andrew

回答

0

了惡夢沒有經驗的js但既然你已經標記了jQuery,只需使用.serialize()

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

.serialize()方法創建標準的URL編碼符號的文本字符串。它可以充當已選擇個人表單控件一個jQuery對象,如<input><textarea><select>$("input, textarea, select").serialize();

例子:

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

這應該做的正是你在找什麼。

爲了您的具體的例子,也考慮.serializeArray()

0

我知道這是舊的,但,這是非常棘手對我來說太。這是我使用和它的作品:

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} 

注意選擇,它必須是一個參數,則還是一個對象,如果你想要更多的鍵值。在這個蹩腳的例子中並沒有實際使用它,但它只是一個蹩腳的例子。

無論出於何種原因,評估回調中的js樣式可以處理es6樣式代碼。

此外,內部承諾鏈與外部承諾鏈完全不同。評估中的所有內容都運行在電子而非您的節點服務器上但是一旦你解決了,它會在節點中進行備份。