本記事では、テスト実行時に「strict mode violation」エラーが発生した場合の原因と解決手順について説明します。
概要
Autify Nexusでテストを実行した際、ステップが失敗し、エラー詳細に以下のようなメッセージが表示されることがあります。
strict mode violation: getByText('要素名', { exact: true }) resolved to 2 elements原因
このエラーは、操作対象として指定したロケーター(要素を見つけるための条件)が、画面上の 複数の要素に一致してしまった ことを意味します。
意図しない要素への誤操作を防ぐための仕様(strict mode)により、1つの要素に特定できない場合はエラーとして扱われます。
主な発生条件
画面内に同じテキストを持つ要素が複数存在する(例:表の見出しと行データ、同名のメニュー項目など)
前回のテスト実行が途中で失敗し、作成されたデータが削除されないまま画面に残っている
解決手順
エラーを解消するには、以下のいずれかの方法で対応します。
対処法1:テスト環境のデータをクリーンアップする
前回のテストで作成したデータが残っていることが原因の場合は、環境を整理します。
テスト対象の画面を開き、対象データが重複して表示されていないか目視で確認します。
重複している場合は、手動でデータを削除してからテストを再実行します。
今後の対策として、シナリオの冒頭に「対象データが残っていたら削除する」という前処理のステップを追加することをおすすめします。
対処法2:より一意なロケーターに変更する(通常のステップの場合)
同じテキストを持つ要素が複数存在しうる画面では、テキストだけに依存しない一意なロケーターに変更します。
シナリオ編集画面で、エラーが発生した対象ステップを開きます。
詳細設定を開き、ロケーターの変更 をクリックします。
ロケーター フィールドに、新しいロケーターを入力します。
完了 をクリックして保存します。
対処法3:コード側で一意化する(「Playwrightコード」ステップの場合)
getByTextやgetByRoleなどが複数一致する可能性がある場合、コードを修正して要素を1件に特定します。
親要素やコンテナで絞り込む
filter({ hasText: '...' })を使用して絞り込むgetByTestIdなどの安定した属性を活用する
解決しない場合
上記の手順を試してもエラーが解消しない場合は、サポート窓口までお問い合わせください。