分度器-デバッグ

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

前書き

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

失敗の種類

テストスイートの失敗にはさまざまな理由が考えられます。よく知られている失敗の種類は次のとおりです。

WebDriverの失敗

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

WebDriverの予期しない障害

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

Angularの分度器の故障

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

分度器Angular2の障害

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

タイムアウトによる分度器の故障

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

期待の失敗

通常の期待の失敗がどのように見えるかを示す最も一般的なテストの失敗の1つ。

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

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

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

分度器でデバッグする方法はここで説明されています&miuns;

一時停止方法

分度器でテストケースをデバッグするためにpauseメソッドを使用することは、最も簡単な方法の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/ ページには、指定されたロケーターを持つ要素がありません。

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

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

デバッガーメソッド

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

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

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