変更に強いE2Eテストにするためにカスタムデータ属性を使う

概要

壊れやすいE2Eテストとは

E2Eテストのテストシナリオを書くときに、下記のようなセレクタの使い方をすると壊れやすくなる。

例:同じclass属性を持つ要素が増えたときにテストが通らなくなる。

例:ある要素の子の要素の子の要素のフォームにxxxを入力するなど
操作するセレクタに一つでも変更があるとテストが通らなくなる。

表示するテキストが変更されたときテストが通らなくなる。

例: <button>Sign in</button><button>Login</button>に変更されたときテストが通らなくなる。

カスタムデータ属性

それらを防ぐためにカスタムデータ属性を使う。
テスト用の属性を付与し、HTML、CSS、JSの変更から分離されたテストを書くことができる。
属性について画面と意味とユーザの行動を考えた名称をつける。
これにより、どのようなテストを実施しているかテストシナリオで表明できる。

まとめ

  • カスタムデータ属性を使って変更に強いE2Eテストを書く
  • テストシナリオはユーザの行動に即したシナリオを書いて仕様を表明する

参考

Making your UI tests resilient to change

Best Practices | Cypress Documentation

Element selectors | Playwright

data-* - HTML: HyperText Markup Language | MDN