ブラウザーテストまたはモバイルテスト用のスニペットを作成する場合、スニペットエディターは最初に、事前定義されたmablJavaScriptStep
関数を指定します。テスト内でカスタムJavaScriptを実装するには、この事前定義された関数内でのコードの記述方法を理解しておくことが重要です。
この記事では、ブラウザーテストおよびモバイルテスト用のスニペットエディターの構成要素について、使用例を交えてわかりやすく説明します。
AIスニペットジェネレーター
スニペットを書いたことがない場合やスニペットを書くのにサポートが必要な場合は、AIスニペットジェネレーターで実行したいことを記述してみてください。入力フィールドにプロンプトを書き込み、[Generate] をクリックすると、新しいスニペットの作成や既存のスニペットの変更を行うことができます。
詳細については、AIによるスニペット生成に関する記事を参照してください。
mablJavaScriptStep関数
すべてのスニペットは、mablJavaScriptStep
という事前定義された関数で構成されます。コードはこの関数内で動作します。
外部ライブラリ
外部JavaScriptライブラリのインポートは、現時点ではサポートされていません。
たとえば、次のスニペットは、変数string
の値を小文字に変換し、出力をcallback
関数に渡します。
function mablJavaScriptStep(mablInputs, callback) {
string = 'SAMPLE'
const result = string.toLowerCase();
callback(result);
}
デフォルトでは、mablJavaScriptStep
関数には、mablInputsとcallbackという2つのパラメーターが存在します。スニペットに別の入力値を渡したい場合は、カスタムパラメーターを追加することもできます。
パラメーター
さまざまなコンテキストでのスニペットの再利用性を高めるには、コードエディターの左側でカスタムパラメーターを追加します。
スニペットエディターのパラメーターセクション
たとえば、テキストを小文字に変換するスニペットの場合、次のように、小文字に変換する文字列用のパラメーターを追加できます。
function mablJavaScriptStep(mablInputs, callback, string = `SAMPLE`) {
const result = string.toLowerCase();
callback(result);
}
別のコンテキストでスニペットを再利用するには、パラメーターstring
のデフォルト値をオーバーライドします。
デフォルトのパラメーター値のオーバーライド
スニペットエディターは、常にパラメーター値を文字列として渡します。たとえば、APIステップからJSONレスポンスボディが返され、これをパラメーターとして渡す場合、このパラメーターはオブジェクトではなく文字列になります。
パラメータ化されたスニペットがフロー内にある場合、スニペットのパラメータ値への更新はフローのすべてのインスタンスに自動的に適用されます。フローの各インスタンスにパラメータ値をローカルにスコープしたい場合は、フローパラメータを作成し、それらをスニペットのパラメータ値として使用してください。
パラメーターでの変数の参照
パラメーターではmabl変数構文もサポートされるため、コンテキストに応じて変わる値を参照することができます。
たとえば、ページから姓を抽出して、これを変数last_name
に格納する場合、mabl変数構文を使ってこの変数を参照するようにパラメーターstring
のデフォルト値を更新できます。{{@last_name}}
:
function mablJavaScriptStep(mablInputs, callback, string = `{{@last_name}}`) {
if (string === undefined) {
throw "parameter 'string1' was not defined"
}
const result = string.toLowerCase();
callback(result);
}
再利用可能なスニペットで、変数をデフォルトのパラメーター値として保存する場合は、変数が定義されていない場合にエラーメッセージをスローする条件付きロジックを追加するようにします。
デフォルト値の入力フィールドに「{{@
」と入力すると、テストで利用可能な変数リストのドロップダウンが表示されます。テストで利用可能な変数の詳細については、変数のタイプに関する記事を参照してください。
mablInputs
mablInputs
は、テストで利用可能な変数を格納する読み取り専用のオブジェクトです。以前は、スニペットでパラメーターがサポートされていなかったため、mablInputs
オブジェクトが、テストの変数にアクセスする唯一の方法でした。
以下に、mablInputsオブジェクトを使ってアクセスできる変数の例を示します。
- ユーザーが作成した変数:
mablInputs.variables.user.your_variable_name
- ループインデックス:
mablInputs.variables.web.runtime.flow_run_ordinal_index
- テスト実行ID:
mablInputs.variables.web.test_run_id
常に文字列に変換されるパラメーター値と異なり、mablInputs
を使ってアクセスする変数値では元のタイプが維持されます。たとえば、変数値がAPI呼び出しからのレスポンスボディである場合、この変数はオブジェクトのままになります。
callback
callback関数はスニペットステップを完了します。callbackから返される値は、スニペットステップの出力として提供されます。callbackが実行された後、mablはテストの次のステップに進みます。
JavaScriptスニペットの最大実行時間
callback待ちの状態で5分が経過すると、テストの実行は失敗します。実行が必要な非同期コードを入力した後は、必ずこの関数を呼び出してください。
スニペットでサポートされている戻り値の型は、以下のとおりです。
- ブール値
- 文字列
- 数値
- オブジェクト
callback関数が実行されない場合または値を返さない場合、スニペットステップは失敗します。
非同期操作
mablJavaScriptStep
関数では、ステップを完了するためにcallbackの値が必要ですが、async
/await
やPromiseなど、他の非同期操作もサポートされます。
async/awaitおよびPromise
async
で宣言した関数はPromiseを返し、await
はPromiseが解決されるまで関数の実行を一時停止します。
たとえば、次のJavaScriptスニペットは、非同期関数を使ってモバイルデバイスの位置情報を設定します。このスニペットでは、callAppium()
に対する非同期呼び出しを行い、Appiumドライバーオブジェクトにアクセスして位置情報を設定した後に、Promiseを使って結果を返します。
function mablJavaScriptStep(mablInputs, callback, altitude = "10", latitude = "48.85873;", longitude = "2.29373") {
async function callAppium() {
const driver = await mabl.mobile.getDriver();
await driver.setGeoLocation({ latitude, longitude, altitude });
return "Geo Location set: " + latitude + ", " + longitude + ", " + altitude;
}
callAppium()
.then((result) => callback(result))
.catch((error) => callback(error));
}
保存オプション
[Save] ボタンの横にある下矢印をクリックすると、すべての保存オプションが表示されます。
Save
既存のスニペットのデフォルトのオプションです。
Save as one-time snippet
スニペットを再利用する予定がない場合、ワンタイムスニペットとして保存すると便利です。後で考えが変わった場合は、[Save as new reusable snippet] をクリックして、ワンタイムスニペットを再利用可能なスニペットにいつでも変換できます。
ワンタイムスニペットは [Snippets] ページには表示されず、他のテストステップと同様にバージョン管理されます。
Save as new reusable snippet
同一のJavaScriptステップを複数のテストで使用する必要がある場合、あるいは同一のテスト内で複数回使用する必要がある場合に、再利用可能なスニペットとして保存します。後でJavaScriptの更新が必要になった場合、1か所で更新を行うことができます。このスニペットを含むすべてのテストで、更新されたバージョンが使用されます。
スニペットとブランチ
再利用可能なスニペットはブランチに準拠していません。再利用可能なスニペットに対する変更は、すべてのスニペットに同期されます。ブランチのスニペットを管理するには、ワンタイムスニペットとして保存し、再利用可能なフローに配置します。
[Snippets] ページ ([Tests] > [Snippets]) にあるスニペットはすべて、再利用可能なスニペットです。[Snippets] ページでスニペットを操作するときは、次の点に留意してください。
- 新しいスニペットは、常に再利用可能なスニペットとして保存されます。
- 既存のスニペットを更新することはできますが、mabl Trainerの外部で既存のスニペットから新しいスニペットを作成することはできません。
- ブラウザーテストまたはモバイルテストでスニペットの結果を確認するには、mabl Trainerでスニペットを開く必要があります。
バージョンドロップダウン
スニペットへの変更を保存するたびに、新しいバージョンが作成されます。バージョンドロップダウンを使うと、スニペットへの変更を追跡し、以前のバージョンに戻すことができます。
古いバージョンのスニペットへのアクセス
スニペットの変更履歴は、[Snippets] ページ ([Tests] > [Snippets]) で編集したスニペットでのみ利用できます。
mabl Trainer内でスニペットを保存するとスニペットの新しいバージョンが作成されますが、mabl Trainerのスニペットエディターにバージョンドロップダウンは表示されません。