Webdriverio: javascriptエラーがある場合にテストに失敗する方法に関するアドバイス

作成日 2017年08月08日  ·  4コメント  ·  ソース: webdriverio/webdriverio

問題

発生している問題(またはWebdriverIOに追加してほしい機能)について簡単に説明してください。 あなたがやろうとしていたことと、代わりに何が起こったのかを教えてください。 これは質問をする場所ではないことを忘れないでください。 そのためには、Gitterチャットルームに参加してください(Gitter )!

Gitterを使ってみましたが、誰も応答しませんでした。

環境

詳細

必要に応じて、発生している問題について詳しく説明してください。

ページにJavaScriptエラーがある場合、テストを失敗させたいのですが。

Selenium / WebdriverIOログへのリンク

NA? テストは問題なく合格します。それが問題です。

問題を再現するためのコード[持っていると良い]

サンプルコードで、それを覚えておいてください。 バグの再現が簡単で、修正もはるかに高速です。
たぶん、ページをロードしてonload = function(){throw "fail this test!" }
次に、そのページにアクセスするだけのテストを実行し、コンソールでjavascriptエラーが作成されても、テストが合格することを確認します。

全てのコメント4件

これは非常に基本的なユースケースのように思えます。 .Netセレンスイートにはオプションがあると思います。 PHPとCodeceptionでは、wdioのすべてのコマンドと同様に、waitFor *、getText、url()のすべての「ステップ」にアタッチし、各ステップでwindow.onerrorにバブルアップしたエラーをチェックします。 wdioのすべてのステップで関数を実行する方法はありますか?

私は次のようなことをすることが可能だと思います:

window.onerror = function () {
document.write('');
}

それは次のステップが失敗する原因になります。 しかし、それは少し信頼できないようです。
もちろん、これは次のコマンドと一致します。

beforeSuite(() => browser.execute(...));

wdioのすべてのステップで関数を実行する方法はありますか?

はい、wdioテストランナーにはこれを行うためのafterCommandフックがあります。

私たちに参加するGitterこの種の質問のために。 これは必ずしも問題ではありません。

完璧にありがとう! テストに失敗するように、ソリューションを投稿します
そして多分私達はドキュメントでユースケースを得ることができます!!

エラーがある場合にテストに失敗する方法についての提案はありますか?

チャットを試しましたが無視されました。

これは非常に一般的なユースケースであり、完全に文書化されていないため、これは問題です。

これは、別のサイトで使用したjavascriptエラーチェッカーとCodeceptionについて思いついたもので、Angularとwdioで動作するようになりました。

    beforeCommand: function (commandName, args) {
        if (browser.getUrl().indexOf(this.baseUrl) > -1) {
            browser.execute(function () {
                if (window.wdioErrorHandler !== window.onerror) {
                    const oldHandler = window.onerror;
                    window.windowErrors = [];
                    window.onerror = window.wdioErrorHandler = function (err) {
                        window.windowErrors.push(err + '');
                        if (typeof oldHandler === 'function') {
                            oldHandler.apply(this, arguments);
                        }
                    }
                }
            })
        }
    },

    afterCommand: function (commandName, args, result, error) {
        if (browser.getUrl().indexOf(this.baseUrl) > -1) {
            const errors = browser.execute(function () {
                return window.windowErrors;
            });
            if (errors.value !== null && errors.value.length > 0) {
                throw new Error('Javascript errors! ' + errors.value);
            }
        }
    }

afterCommandブロックからのコマンドを意図的に失敗させるにはどうすればよいですか? テストを失敗させる必要がありますが、 throwれていても、テストに合格したと表示されます。

ドキュメントのどこかにフックの使い方の例を載せることができますか? たぶんデバッグセクションに?

この検索で​​は、実際には何も役に立ちません: https

このページは役に立ちましたか?
0 / 5 - 0 評価