アプリケーションのテスト時には、エレメントがページに存在しないことをアサートすることが必要になる場合があります。たとえば、ログアウトした後に、ナビゲーションバーにログインしたユーザーのプロファイルが存在しないことを検証したい場合があります。また、削除アクションを行った後に、削除した項目がページ上に存在しなくなっていることを確認したい場合もあります。
検証したい内容に応じて、mablトレーナーで要素が存在しないことをアサーションする方法がいくつかあります:
非表示の要素
「is not present」アサーションは、要素が画面上に表示されているかどうかではなく、DOM内に存在するかどうかをチェックします。
対象の要素がHTMLには存在するものの、display、visibility、opacityなどの属性を使用して非表示になっている場合、「存在しない」アサーションは失敗します。ブラウザテストの場合は、CSSアサーションを使用して、要素の表示プロパティを確認することができます。
ステップを順不同で記録する
異なるクレデンシャルを使用して、別のページで、または削除アクションの前に、存在しないはずの要素にアクセスできる場合は、要素が表示されている間にアサーションを記録してから、テスト内で位置を変更してみてください。
この戦略の例については、次のアニメーションを参照してください。
「存在しない」アサーションを作成するための逆方向の作業
たとえば、制限されたユーザーロールに対して「Admin settings」要素が存在しないことを検証するには、次のようにします:
- 記録を一時停止し、「Admin settings」要素を表示できるユーザーとしてログインしてください。
- 記録中に、その要素に対して「存在しない」アサーションステップを作成します。要素が存在している間は、アサーションが実行され、すぐに失敗することに注意してください。
- そのアサーションステップを、制限付きユーザーがログインしているテストの部分に移動してください。
制限されたユーザーとしてテストを実行すると、「Admin settings」要素が存在しないため、アサーションは成功します。
検索の設定を使用する
最良の結果を得るには、検索の設定を「存在しない」アサーションに追加してください:
- 変更される可能性が低いエレメント属性を選択します。
- 自動修復が無効になっていることを確認してください。「存在しない」アサーションが検索の設定に一致する別の要素に自動修復された場合、アサーションは失敗します。
要素の検索を使用する
テスト中に要素を表示できないが、そのCSSまたはXPathがわかっている場合は、要素の検索アサーションを記録できます:
- 要素の検索ステップを追加します:+ (ステップを追加) > 要素を検索。
-
検索タイプを選択してください:
- 「First element」 - ターゲット要素が存在しないことをアサートする場合 - または -
- 「Number of elements」 - CSSまたはXPathに一致する要素が存在しないことをアサートします
- CSSまたはXPathを入力し、「Make assertion」を選択します。
- 次のページで、アサーションの詳細を設定します
- 「First element」 - アサーションタイプを「is not present」に設定します
- 「Number of elements」 - 期待値を0に設定します。
エレメント数のカウントでのアサーションは、変更の前後のエレメント数でアサートする場合にも便利です。たとえば、テーブルからレコードを1つ削除する場合に、この変更の前後でエレメント数のカウントに対するカスタム検索アサーションを使用して、テーブルに表示されるレコードが1つ少なくなっていることをアサートすることができます。
制限事項
- 要素の検索アサーションはモバイルテストでは使用できません。
- 対象の要素がShadow DOM内にある場合は、XPathの代わりにCSSクエリーを使用してください。詳細については、Shadow DOMでのテストを参照してください。
whileループを使用してエレメントが表示されなくなるまで待機する
テストケースでページにエレメントが表示されなくなるまで待機する必要がある場合は、エレメントが存在しなくなったら終了するループを作成できます。このワークフローを実装するには、次の手順を実行します。
- 変数を作成し、その変数に数字を値として割り当てます。
- 作成した変数を使ってループするフローを作成します。
- フロー内に、エレメントが存在しないことをアサートするIFステップを追加します。
- IFステップで、ループ変数と同じ名前で新しい変数を作成する変数ステップを追加し、その値を0に設定します。
- ELSEステップを追加します。
- ELSEステップで、静的な待機ステップを追加します。
次の例では、変数loop_totalの初期値は50に設定されます。繰り返しループで、トーストタブが存在する場合、このテストはELSEシナリオを実行し、10秒間待機します。トーストタブが存在しない場合、このテストはIFシナリオを実行し、loop_totalの値を0に更新してループを終了します。
エレメントが表示されなくなるまで待機する