ログインしていくつかのアクションを実行することにより、サイトのテストを作成しようとしています。私は、動作に非常に近いスクリプトを持っていますが、回避できなかった重要な欠陥が 1 つあります。以下のロジックを参照してください
var phantom = require('phantom');
var rl = require('readline-sync');
var Spooky = require('spooky');
// Go to login page
spooky.start(url);
// Generate an image of the captcha
spooky.then(function () {
this.capture('captcha.png');
});
// Fill in login form
spooky.then([{
captcha: new Captcha()
}, function () {
this.fill('form#login-form', {
'username': 'username',
'password': 'password',
'recaptcha_response_field' : captcha.phrase
});
}]);
spooky.wait(5000, function() {
this.capture('afterlogin.png');
});
spooky.run();
function Captcha() {
return {
phrase: ask("Enter Captcha Phrase: ")
}
}
function ask (msg, options){
return rl.question(msg, options)
}
したがって、これは画像をうまく生成し、フォームにうまく記入します。問題は、「new Captcha()」関数の挿入にあります。たとえば、フォームの画像を最初に表示する必要がない場合は、ユーザー名を入力して ask 関数で渡すと、すべて入力されます。しかし、これは不気味な約束の前に評価されるようです。
スクリプトを実行すると、最初にフレーズが要求され、入力後に画像が生成されます。フレーズを尋ねる前に画像を生成する必要があります。誰かが私の問題に光を当てることができれば、それは素晴らしいことです! さらに情報が必要な場合はお知らせください。