2016-10-25 4 views
1

nightmare.jsにvanilla JSを含めると、エラーが発生しています。私は配列内のすべての電子メールがシステムに入力されていることを確認したい。ループのために理想的であるが、私は絶えずようなエラーに遭遇しています。ここNightmare.jsエラー:検索に失敗しました:何も "goto"に応答しません

Search failed: Nothing responds to "goto" 

私のコードです:

理想的
var jquery = require('jquery'); 
var Nightmare = require('nightmare'); 
var nightmare = Nightmare({ 
    show: true, 
    dock: true 
}); 

var siteName = "*********"; 
var username = "*********"; 
var password = "*********"; 

var outboundEmailArray = [ 
    { 
    "from_name": "TestOutbound", 
    "email_username": "array1", 
    "email_domain": "salesforce.com", 
    "email_domain": "salesforce.com", 
    "reply_to": "[email protected]" 
    }, 
    { 
    "from_name": "Tester", 
    "email_username": "array2.0", 
    "email_domain": "salesforce.com", 
    "email_domain": "salesforce.com", 
    "reply_to": "[email protected]" 
    } 
]; 
// 
// var outboundEmailSetup = function(outboundEmail){ 
//  nightmare 
//  .goto("https://" + siteName + ".desk.com/login/new") 
//  .type("input[id='user_session_email']", username) 
//  .type("input[id='user_session_password']", password) 
//  .click("#user_session_submit").wait(2000) 
//  .goto("https://" + siteName + ".desk.com/admin/settings/mail-servers") 
//  .click("#a-add-modal").wait(2000) 
//  .type("input[id='postmark_outbound_mailbox_fromname']", outboundEmail.from_name).wait(2000) 
//  .type("input[id='email_username']", outboundEmail.email_username).wait(2000) 
//  .click("#from_select_4999").wait(2000) 
//  .type("input[id='postmark_outbound_mailbox_reply_to']", outboundEmail.reply_to).wait(2000) 
//  .click("#postmark_commit").wait(2000) 
//  .click(".a-modal-bottom .a-button").wait(2000) 
//  .evaluate(function() {}) 
//  .end() 
//  .then(function(result) { 
//   console.log(result) 
//  }) 
//  .catch(function(error) { 
//   console.error('Search failed:', error); 
//  }); 
// } 

var outboundEmailSetup = function(i){ 
    if(i < outboundEmailArray.length) { 
    nightmare 
    .goto("https://" + siteName + ".desk.com/login/new") 
    .type("input[id='user_session_email']", username) 
    .type("input[id='user_session_password']", password) 
    .click("#user_session_submit").wait(2000) 
    .goto("https://" + siteName + ".desk.com/admin/settings/mail-servers") 
    .click("#a-add-modal").wait(2000) 
    .type("input[id='postmark_outbound_mailbox_fromname']", outboundEmailArray[i].from_name).wait(2000) 
    .type("input[id='email_username']", outboundEmailArray[i].email_username).wait(2000) 
    .click("#from_select_4999").wait(2000) 
    .type("input[id='postmark_outbound_mailbox_reply_to']", outboundEmailArray[i].reply_to).wait(2000) 
    .click("#postmark_commit").wait(2000) 
    .click(".a-modal-bottom .a-button").wait(2000) 
    .evaluate(function() {}) 
    .end() 
    .then(function(result) { 
     console.log(result) 
    }) 
    .catch(function(error) { 
     console.error('Search failed:', error); 
    }); 
    outboundEmailSetup(i+1); 
    } 
} 

outboundEmailSetup(0); 

、それはoutboundEmailArrayループスルー、入力に関数を実行します電子メールをシステムに送り、アレイの終わりに達するまで繰り返します。

+0

オブジェクト –

答えて

3

キーはあなたがその概念hereについて非常に詳細な説明があります同時に

thenメソッドへの複数の呼び出しを避けるためです。

基本的にはあなたが何をすべきかは、それぞれの連続通話が前の呼び出しthenメソッド内

を行わ我々は、我々が扱っている、事前にどのように多くの手順を知っているとき、これは本当に簡単ですしてくださいです。我々は二つの連続通話をしたい場合たとえば、コードは次のようになります:google.comへgotothenコールバック内でどのように

nightmare.goto('http://example.com') 
    .title() 
    .then(function(title) { 
    console.log(title); 
    nightmare.goto('http://google.com') 
     .title() 
     .then(function(title) { 
     console.log(title); 
     }); 
    }); 

注意してください。

ループを扱っているので、コードは少し洗練されたものになります。

var urls = ['http://example1.com', 'http://example2.com', 'http://example3.com']; 
urls.reduce(function(accumulator, url) { 
    return accumulator.then(function(results) { 
    return nightmare.goto(url) 
     .wait('body') 
     .title() 
     .then(function(result){ 
     results.push(result); 
     return results; 
     }); 
    }); 
}, Promise.resolve([])).then(function(results){ 
    console.dir(results); 
}); 

私はソースリンクは、このコードよりよく説明して考えるよりも私はでき:-)私は同じ悪夢に複数回evalute /その後、メソッドを呼び出すしようとしたとき、私は同様のエラーを取得しています

The above executes each Nightmare queue in series, adding the results to an array. The resulting accumulated array is resolved to the final .then() call where the results are printed.

関連する問題