Protractor-debugging

提供:Dev Guides
移動先:案内検索

分度器-デバッグ

前章で分度器のすべての概念を見てきましたので、この章でデバッグの概念を詳細に理解しましょう。

前書き

エンドツーエンド(e2e)テストは、そのアプリケーションのエコシステム全体に依存するため、デバッグが非常に困難です。 これらはさまざまなアクションに依存していることがわかりました。特に、ログインなどの以前のアクションでは、許可に依存していると言うことができます。 e2eテストのデバッグにおけるもう1つの困難は、WebDriverへの依存性です。これは、オペレーティングシステムとブラウザが異なると動作が異なるためです。 最後に、e2eテストのデバッグも長いエラーメッセージを生成し、ブラウザー関連の問題を分離してプロセスエラーをテストすることを困難にします。

失敗の種類

テストスイートの失敗にはさまざまな理由がありますが、次のような有名な失敗タイプがあります-

WebDriverの障害

コマンドを完了できない場合、WebDriverによってエラーがスローされます。 たとえば、ブラウザが定義されたアドレスを取得できない、または期待どおりに要素が見つかりません。

WebDriverの予期しないエラー

Webドライバーマネージャーの更新に失敗すると、予期しないブラウザーとOS関連の障害が発生します。

Angularの分度器の故障

Protractor for Angularの失敗は、Protractorが期待どおりにライブラリでAngularを見つけられなかったときに発生します。

分度器のAngular2の障害

この種の障害では、構成にuseAllAngular2AppRootsパラメーターが見つからない場合、Protractorは失敗します。 これが発生するのは、これがないと、テストプロセスが1つの単一のルート要素を見ながら、プロセス内の複数の要素を期待するためです。

タイムアウトの分度器障害

この種の障害は、テスト仕様がループまたは長いプールにヒットし、時間内にデータを返さない場合に発生します。

期待失敗

最も一般的なテストの失敗の1つで、通常の期待失敗がどのようなものかを示します。

分度器でデバッグが重要なのはなぜですか?

テストケースを作成して失敗した場合、エラーが発生した正確な場所を見つけるのは非常に難しいため、それらのテストケースをデバッグする方法を知ることは非常に重要です。 Protractorを使用しているときに、コマンドラインで赤色のフォントで長いエラーが発生します。

テストの一時停止とデバッグ

分度器でデバッグする方法については、こちらで説明しています&miuns;

一時停止方法

一時停止メソッドを使用して分度器でテストケースをデバッグするのが最も簡単な方法の1つです。 テストコード&miuns;を一時停止する場所で次のコマンドを入力できます。

browser.pause();

実行中のコードが上記のコマンドをヒットすると、その時点で実行中のプログラムを一時停止します。 その後、私たちは好みに応じて次のコマンドを与えることができます-

前進するためのタイプC

コマンドが使い果たされるたびに、Cを入力して先に進む必要があります。 Cを入力しないと、テストは完全なコードを実行せず、Jasmineタイムアウトエラーのために失敗します。

対話モードに入るためにreplと入力します

インタラクティブモードの利点は、ブラウザにWebDriverコマンドを送信できることです。 対話モードに入る場合は、 repl と入力します。

テストを終了して続行するには、Ctrl-Cを入力します

一時停止状態からテストを終了し、停止した場所からテストを続行するには、Ctrl-Cを入力する必要があります。

この例では、 example_debug.js という名前の以下の仕様ファイルがあります。分度器はロケーター by.binding ( 'mmmm')で要素を識別しようとしますが、URL(https://angularjs.org/pageは指定されたロケーターを持つ要素はありません。

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      element(by.model('yourName')).sendKeys('Vijay');
        //Element doesn't exist
         var welcomeText =
         element(by.binding('mmmm')).getText();
         expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

ここで、上記のテストを実行するには、テストを一時停止するbrowser.pause()コードを上記の仕様ファイルに追加する必要があります。 次のようになります-

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.pause();
      element(by.model('yourName')).sendKeys('Vijay');
     //Element doesn't exist
      var welcomeText =
      element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

ただし、実行する前に、構成ファイルでもいくつかの変更を行う必要があります。 前の章で example_configuration.js という名前の以前に使用した設定ファイルで次の変更を行っています-

//An example configuration file.
exports.config = {
   directConnect: true,

  //Capabilities to be passed to the webdriver instance.
   capabilities: {
      'browserName': 'chrome'
   },

  //Framework to use. Jasmine is recommended.
   framework: 'jasmine',

  //Spec patterns are relative to the current working directory when

  //protractor is called.
   specs: ['example_debug.js'],
      allScriptsTimeout: 999999,
      jasmineNodeOpts: {
      defaultTimeoutInterval: 999999
   },
   onPrepare: function () {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(5000);
   }
};

今、次のコマンドを実行します-

protractor example_configuration.js

デバッガは上記のコマンドの後に起動します。

デバッガーメソッド

Protractorでテストメソッドをデバッグするために一時停止メソッドを使用するのは、少し高度な方法です。 テストコードを壊したい場所で次のコマンドを入力できます-

browser.debugger();

ノードデバッガーを使用してテストコードをデバッグします。 上記のコマンドを実行するには、テストプロジェクトの場所から開いた別のコマンドプロンプトに次のコマンドを入力する必要があります-

protractor debug protractor.conf.js

このメソッドでは、テストコードを続行するためにターミナルでCを入力する必要もあります。 ただし、pauseメソッドとは反対に、このメソッドでは1回だけ入力する必要があります。

この例では、上記で使用したb * example_debug.js という名前の同じ仕様ファイルを使用しています。 唯一の違いは、 browser.pause()の代わりに、テストコードを壊したい場所で browser.debugger()*を使用する必要があることです。 次のようになります-

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.debugger();
      element(by.model('yourName')).sendKeys('Vijay');
     //Element doesn't exist
      var welcomeText = element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

上記の例で使用したのと同じ構成ファイル example_configuration.js を使用しています。

次に、次のデバッグコマンドラインオプションを使用して分度器テストを実行します。

protractor debug example_configuration.js

デバッガは上記のコマンドの後に起動します。