ブラウザーまたはモバイルテスト用のスニペットを作成する際、スニペット編集者はあらかじめ定義されたmablJavaScriptStep関数から始まります。この定義済み関数内でコードを記述する方法を理解することは、テストにカスタムJavaScriptを実装するための重要な最初のステップです。
この記事では、ブラウザテストおよびモバイルテスト用のスニペット編集者のコンポーネントについて説明します。各コンポーネントの動作を示す例も含まれています。
APIスニペット
APIテストのスニペットは、少し異なる動作をします。APIスニペットの使用方法の詳細については、こちらの記事をご覧ください。
生成AIスクリプト生成
スニペットの作成が初めての方や、開始にあたってサポートが必要な方は、AI Assist フィールドに実行したい内容を入力してみてください。プロンプトを入力し、生成をクリックすると、新しいスニペットを作成したり、既存のスニペットを変更したりできます。
ヒントとベストプラクティスについては、生成AIスクリプト生成に関する記事をご覧ください。
mablJavaScriptStep関数
UIテストでは、すべてのスニペットはmablJavaScriptStepという定義済み関数で構成されています。コードはこの関数内に記述します。
外部ライブラリ
外部JavaScriptライブラリのインポートは、現時点ではサポートされていません。
たとえば、次のスニペットは、変数stringの値を小文字に変換し、出力をcallback関数に渡します。
function mablJavaScriptStep(mablInputs, callback) {
string = 'SAMPLE'
const result = string.toLowerCase();
callback(result);
}デフォルトでは、mablJavaScriptStep関数には、mablInputsとcallbackという2つのパラメーターが存在します。スニペットに別の入力値を渡したい場合は、カスタムパラメーターを追加することもできます。
パラメーター
さまざまなコンテキストでのスニペットの再利用性を高めるには、コードエディターの左側でカスタムパラメーターを追加します。
スニペット編集者のパラメータセクション
パラメータを使うと、変数にアクセスできます。これには、テストで生成された変数、データ駆動型の変数、環境変数が含まれます。変数を参照するには、mablの変数構文 {{@var_name}} を使ってください。{{@ と入力し始めると、スニペットで利用できる変数の一覧が表示されます。
たとえば、ページから姓を抽出してlast_nameという変数に保存した場合、スニペット内で{{@last_name}}と記述することで、その変数を参照できます。
function mablJavaScriptStep(mablInputs, callback, string = `{{@last_name}}`) {
if (string === undefined) {
throw "parameter 'string' was not defined"
}
const result = string.toLowerCase();
callback(result);
}別のコンテキストでスニペットを再利用するには、パラメータの値を上書きしてください。
スニペット編集者は、常にパラメータ値を文字列として渡します。たとえば、APIステップから返されたJSONレスポンスボディをパラメータとして渡した場合、オブジェクトではなく文字列になります。
パラメータ化されたスニペットがフロー内にある場合、スニペットのパラメータ値への更新はフローのすべてのインスタンスに自動的に適用されます。フローの各インスタンスにパラメータ値をローカルにスコープしたい場合は、フローパラメータを作成し、それらをスニペットのパラメータ値として使用してください。
mablInputs
mablInputsは、テストで利用可能な変数を格納する読み取り専用のオブジェクトです。以前は、スニペットでパラメーターがサポートされていなかったため、mablInputsオブジェクトが、テストの変数にアクセスする唯一の方法でした。
以下に、mablInputsオブジェクトを使ってアクセスできる変数の例を示します。
| 変数 |
mablInputs パス |
|---|---|
| テスト生成変数、データ駆動変数、および環境変数 | mablInputs.variables.user.variable_name |
| ループインデックス | mablInputs.variables.web.runtime.flow_run_ordinal_index |
| テスト実行ID | mablInputs.variables.web.test_run_id |
| mabl クレデンシャル |
mablInputs.variables.web.defaults.credentials.username および mablInputs.variables.web.defaults.credentials.password
|
常に文字列に変換されるパラメーター値と異なり、mablInputsを使ってアクセスする変数値では元のタイプが維持されます。たとえば、変数値がAPI呼び出しからのレスポンスボディである場合、この変数はオブジェクトのままになります。
callback
callback関数はスニペットステップを完了します。callbackから返される値は、スニペットステップの出力として提供されます。callbackが実行された後、mablはテストの次のステップに進みます。
JavaScriptスニペットの最大実行時間
すべてのJavaScriptステップは、callback()が呼び出されると完了します。スニペットの最大実行時間は5分で、その時間内にcallback()が呼び出されない場合は失敗します。
スニペットに実行に5分以上かかるコードが含まれている場合は、setTimeout()関数の使用をお試しください。setTimeout()はcallback()の呼び出しをブロックしないため、JavaScriptステップの完了後に実行されるアクションをスケジュールできます。
スニペットでサポートされている戻り値の型は、以下のとおりです。
- ブール値
- 文字列
- 数値
- オブジェクト*
*戻り値が成功の場合、プレーンオブジェクトのみがサポートされます。失敗シナリオでは、コールバックはErrorオブジェクトを返してステップを失敗させ、ログを提供することができます。new Date()やカスタムクラスのインスタンスなど、その他のオブジェクト型は、スニペットコールバックの戻り値としてサポートされていません。
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));
}この例では、callAppium 関数が拒否された Promise を返した場合、スニペットは error オブジェクトを返します。コールバックで error を返すと、ステップが失敗し、テスト結果にエラーログが表示されます。スニペットによってステップを失敗させたくない場合は、スクリプト内でエラーをキャッチして処理できます。
コンソールパネル
コンソールパネルを使用して、複雑なスクリプトをデバッグします。
保存オプション
[保存] ボタンの横にある下矢印をクリックすると、すべての保存オプションが表示されます。
保存
既存のスニペットのデフォルトのオプションです。
1 回限りのスニペットとして保存
スニペットを再利用する予定がない場合、ワンタイムスニペットとして保存すると便利です。後で考えが変わった場合は、[新しい再利用可能なスニペットとして保存] をクリックして、ワンタイムスニペットを再利用可能なスニペットにいつでも変換できます。
ワンタイムスニペットは [スニペット] ページには表示されず、他のテストステップと同様にバージョン管理されます。
新しい再利用可能なスニペットとして保存
同一のJavaScriptステップを複数のテストで使用する必要がある場合、あるいは同一のテスト内で複数回使用する必要がある場合に、再利用可能なスニペットとして保存します。後でJavaScriptの更新が必要になった場合、1か所で更新を行うことができます。このスニペットを含むすべてのテストで、更新されたバージョンが使用されます。
スニペットとブランチ
再利用可能なスニペットはブランチに準拠していません。再利用可能なスニペットに対する変更は、すべてのスニペットに同期されます。ブランチのスニペットを管理するには、ワンタイムスニペットとして保存し、再利用可能なフローに配置します。
スニペットページ(Tests > Snippets)に表示されるすべてのスニペットは、再利用可能なスニペットです。スニペットページでスニペットを使用する際は、以下の点に注意してください。
- 新しいスニペットは、常に再利用可能なスニペットとして保存されます。
- 既存のスニペットを更新することはできますが、mablトレーナーの外部で既存のスニペットから新しいスニペットを作成することはできません。
- ブラウザーテストまたはモバイルテストでスニペットの結果を確認するには、mablトレーナーでスニペットを開く必要があります。
バージョンドロップダウン
スニペットへの変更を保存するたびに、新しいバージョンが作成されます。バージョンドロップダウンを使うと、スニペットへの変更を追跡し、以前のバージョンに戻すことができます。
古いバージョンのスニペットへのアクセス
スニペットの変更履歴は、スニペットページ(テスト > スニペット)から編集されたスニペットに対してのみアクセスできます。
mablトレーナー内からスニペットを保存すると新しいスニペットバージョンが作成されますが、mablトレーナーのスニペット編集者にはバージョンのドロップダウンが含まれていません。