分度器-コアAPI

この章では、分度器の機能の鍵となるさまざまなコアAPIを理解できます。

分度器APIの重要性

分度器は、ウェブサイトの現在の状態を取得するために次のアクションを実行するために非常に重要なさまざまなAPIを提供します-

  • テストするWebページのDOM要素を取得します。
  • DOM要素との相互作用。
  • それらにアクションを割り当てます。
  • 彼らに情報を共有する。

上記のタスクを実行するには、分度器APIを理解することが非常に重要です。

さまざまな分度器API

Protractorは、Node.jsのWebDriverバインディングであるSelenium-WebDriverのラッパーであることがわかっています。分度器には次のAPIがあります-

ブラウザ

これは、ナビゲーション、ページ全体の情報などのブラウザーレベルのコマンドを処理するために使用されるWebDriverのインスタンスのラッパーです。たとえば、browser.getメソッドはページをロードします。

素子

これは、テストしているページのDOM要素を検索して操作するために使用されます。この目的のために、要素を見つけるための1つのパラメーターが必要です。

ロケーター(by)

これは、要素ロケーター戦略のコレクションです。たとえば、要素は、CSSセレクター、ID、またはng-modelでバインドされているその他の属性によって見つけることができます。

次に、これらのAPIとその機能について詳しく説明します。

ブラウザAPI

上で説明したように、これはブラウザレベルのコマンドを処理するためのWebDriverのインスタンスのラッパーです。次のようにさまざまな機能を実行します-

関数とその説明

ProtractorBrowserAPIの機能は次のとおりです-

browser.angularAppRoot

Browser APIのこの関数は、Angularを検索する要素のCSSセレクターを設定します。通常、この関数は「body」にありますが、ng-appの場合は、ページのサブセクションにあります。サブ要素の場合もあります。

browser.waitForAngularEnabled

Browser APIのこの関数は、trueまたはfalseに設定できます。名前が示すように、この関数がfalseに設定されている場合、分度器はブラウザと対話する前にAngular $ httpおよび$ timeoutタスクが完了するのを待ちません。値を渡さずにwaitForAngularEnabled()を呼び出すことで、現在の状態を変更せずに読み取ることもできます。

browser.getProcessedConfig

このブラウザAPI関数の助けを借りて、現在実行されている仕様と機能を含む、処理された構成オブジェクトを取得できます。

browser.forkNewDriverInstance

名前が示すように、この関数は、対話型テストで使用されるブラウザーの別のインスタンスをフォークします。制御フローを有効または無効にして実行できます。両方の場合の例を以下に示します-

Example 1

ランニング browser.forkNewDriverInstance() 制御フローを有効にした場合-

var fork = browser.forkNewDriverInstance();
fork.get(‘page1’);

Example 2

ランニング browser.forkNewDriverInstance() 制御フローを無効にした場合-

var fork = await browser.forkNewDriverInstance().ready;
await forked.get(‘page1’);

browser.restart

名前が示すように、ブラウザインスタンスを閉じて新しいインスタンスを作成することにより、ブラウザを再起動します。また、制御フローを有効または無効にして実行することもできます。両方の場合の例を以下に示します-

Example 1 −ランニング browser.restart() 制御フローを有効にした場合-

browser.get(‘page1’);
browser.restart();
browser.get(‘page2’);

Example 2 −ランニング browser.forkNewDriverInstance() 制御フローを無効にした場合-

await browser.get(‘page1’);
await browser.restart();
await browser.get(‘page2’);

browser.restartSync

これはbrowser.restart()関数に似ています。唯一の違いは、新しいブラウザインスタンスに解決するpromiseを返すのではなく、新しいブラウザインスタンスを直接返すことです。制御フローが有効になっている場合にのみ実行できます。

Example −ランニング browser.restartSync() 制御フローを有効にした場合-

browser.get(‘page1’);
browser.restartSync();
browser.get(‘page2’);

browser.useAllAngular2AppRoots

名前が示すように、Angular2とのみ互換性があります。要素を見つけたり、安定性を待ったりしながら、ページで利用可能なすべての角度のあるアプリを検索します。

browser.waitForAngular

このブラウザーAPI関数は、Angularがレンダリングを終了し、未処理の$ httpまたは$ timeout呼び出しがなくなるまで待機してから、続行するようにWebDriverに指示します。

browser.findElement

名前が示すように、このブラウザーAPI関数は、要素を検索する前にAngularがレンダリングを終了するのを待ちます。

browser.isElementPresent

名前が示すように、このブラウザAPI関数は、要素がページに存在するかどうかをテストします。

browser.addMockModule

Protractor.getメソッドが呼び出されるたびに、Angularの前にロードするモジュールが追加されます。

Example

browser.addMockModule('modName', function() {
   angular.module('modName', []).value('foo', 'bar');
});

browser.clearMockModules

browser.addMockModuleとは異なり、登録されているモックモジュールのリストをクリアします。

browser.removeMockModule

名前が示すように、レジスタモックモジュールを削除します。例:browser.removeMockModule( 'modName');

browser.getRegisteredMockModules

browser.clearMockModuleの反対側で、登録されているモックモジュールのリストを取得します。

browser.get

browser.get()を使用して、ブラウザーを特定のWebアドレスにナビゲートし、Angularをロードする前にそのページのモックモジュールをロードできます。

Example

browser.get(url);
browser.get('http://localhost:3000'); 
// This will navigate to the localhost:3000 and will load mock module if needed

browser.refresh

名前が示すように、これは現在のページをリロードし、Angularの前にモックモジュールをロードします。

browser.navigate

名前が示すように、以前と同じように呼び出されるように、ナビゲーションメソッドをナビゲーションオブジェクトに戻すために使用されます。例:driver.navigate()。refresh()。

browser.setLocation

ページ内ナビゲーションを使用して別のページを参照するために使用されます。

Example

browser.get('url/ABC');
browser.setLocation('DEF');
expect(browser.getCurrentUrl())
   .toBe('url/DEF');

ABCからDEFページに移動します。

browser.debugger

名前が示すように、これは分度器のデバッグで使用する必要があります。この関数は基本的に、制御フローにタスクを追加して、テストを一時停止し、ヘルパー関数をブラウザーに挿入して、ブラウザーコンソールでデバッグを実行できるようにします。

browser.pause

WebDriverテストのデバッグに使用されます。使用できますbrowser.pause() テストでは、制御フローのそのポイントから分度器デバッガーに入ります。

Example

element(by.id('foo')).click();
browser.pause();
// Execution will stop before the next click action.
element(by.id('bar')).click();

browser.controlFlowEnabled

制御フローが有効かどうかを判断するために使用されます。