0

サインイン プロセス テストを自動化する必要があります。そのためにwebdriver.ioを使用しています。

これが私の問題です。

私はこの奇妙なサインインプロセスを持っています:

  1. 通常の Web ページでフォームに入力する必要があります
  2. フォームを送信した後、存在しないURL にリダイレクトされますが、クエリ パラメータの 1 つにアクセス コードが含まれています。
  3. 次に、このアクセス コードを別の場所に送信して、アクセス トークンを取得します。

必要なのは、プログラムでステップ 2 を完了する方法です。1 と 3 は既にわかっているからです。

私はこのようにしようとしています:

var webdriverio = require('webdriverio');
var options = {
    desiredCapabilities: {
        browserName: 'chrome'
    }
};

webdriverio
    .remote(options)
    .init()
    .url(myUrl)
    .title(function(err, res) {
        console.log('Title was: ' + res.value);
    })
    .setValue('#usuario', user)
    .setValue('#password', password)
    .submitForm('form', function(){
        this.url(function(err, res){
            console.log(res.value);
        });
        this.pause(5000, function(){
            this.end();
        });
    });

submitFormただし、ページが読み込まれる前にコールバックが呼び出されるようです。このように、ログには以前に渡したものとまったく同じ URL が表示されます。

私がこのようにしようとすると:

.submitForm('form', function(){
    this.pause(5000, function(){
        this.url(function(err, res){
            console.log(res.value);
            this.end();
        });
    });
});

私はこの奇妙な出力を得ます:

データ:text/html,chromewebdata

このコンテキストでは一時停止が完璧ではないことはわかっていますが、これを行う非同期の方法が見つかりませんでした。

誰でも助けることができますか?

4

1 に答える 1

1

フォームが送信された後、おそらく特定の状態を待っているわけではありません。フォームが送信された後に期待される結果は何ですか?

たとえば、ブラウザがヘッダーのあるページにリダイレクトすることを期待しています

<h1 class="success">Your form is submitted successfully</h1>

次に、次のようにする必要があります。

webdriverio
    .remote(options)
    .init()
    .url(myUrl)
    .waitForExist('form')
    .setValue('#usuario', user)
    .setValue('#password', password)
    .submitForm('form')
    .waitForExist('h1.success', 5000)
    .getText('h1', function (err, res) {
        expect(res).to.contain('submitted successfully'); //chai.js
    })
    .call(done);
于 2014-12-28T14:22:03.713 に答える