1

Mocha > Chai > PhantomJS を使用してヘッドレス テストを実行します。すべてがセットアップされ、機能していますが、フォームに不適切な資格情報を入力して、DOM 要素が作成されていることを確認しようとしています。

私がやりたいことは基本的にこれです:

it('should display error message string for bad credentials', function(done) {
    page.evaluate(function() {
        document.querySelector('input.form-input[type="text"]').value = 'foo@bar.com';
        document.querySelector('input.form-input[type="password"]').value = 'wrongpass';
        document.querySelector('input.form-action-b').click();
        return document.querySelector('div.status-oops p').innerText;
    }, function(result) {
        result.should.equal('Username and password do not match.');
        done();
    });
});

しかし、私は取得しています:「キャッチされていない TypeError: null のプロパティ 'should' を読み取ることができません」

... div.status-oops がまだ存在しないためです。Chrome コンソールでも同じ結果が得られますが、数秒後に同じテキストを表示しようとすると、問題なく動作します。

返品を遅らせる方法はありますか?

4

1 に答える 1

1

waitfor.jsを見てください。要素が表示されるまで待機するタイマーを設定できます。コードは次のようになります。

it('should display error message string for bad credentials', function(done) {
    page.evaluate(function() {
        document.querySelector('input.form-input[type="text"]').value = 'foo@bar.com';
        document.querySelector('input.form-input[type="password"]').value = 'wrongpass';
        document.querySelector('input.form-action-b').click();
    });

    waitFor(function() {
        // wait for 'div.status-oops p' to appear
        return page.evaluate(function() {
            return document.querySelector('div.status-oops p').is(":visible");
        });
    }, function() {
        // on appearance, grab the innerText and compare it to the desired value
        result = page.evaluate(function() {
            return document.querySelector('div.status-oops p').innerText;
        });
        result.should.equal('Username and password do not match.');
        phantom.exit();
    });
});
于 2013-08-07T17:08:41.773 に答える