セレクタ
WebDriver Protocolは、要素を照会するためのいくつかのセレクタ戦略を提供しています。WebdriverIOはこれらを簡素化して、要素の選択を簡単に保ちます。要素を照会するコマンドは$
と$$
と呼ばれていますが、これらはjQueryやSizzle Selector Engineとは関係がないことに注意してください。
多くの異なるセレクタが利用可能ですが、そのうちのいくつかだけが適切な要素を見つけるための堅牢な方法を提供します。例えば、次のようなボタンがある場合:
<button
id="main"
class="btn btn-large"
name="submission"
role="button"
data-testid="submit"
>
Submit
</button>
以下のセレクタを__推奨__および__推奨しない__:
セレクタ | 推奨 | 注釈 |
---|---|---|
$('button') | 🚨 絶対に使用しない | 最悪 - 一般的すぎて、コンテキストがない。 |
$('.btn.btn-large') | 🚨 絶対に使用しない | 悪い。スタイリングに依存。変更される可能性が高い。 |
$('#main') | ⚠️ 控えめに | より良い。しかしスタイリングやJSイベントリスナーに依存している。 |
$(() => document.queryElement('button')) | ⚠️ 控えめに | 効果的な照会だが、記述が複雑。 |
$('button[name="submission"]') | ⚠️ 控えめに | name 属性に依存しており、HTML的な意味がある。 |
$('button[data-testid="submit"]') | ✅ 良い | 追加の属性が必要だが、アクセシビリティとは接続されていない。 |
$('aria/Submit') または $('button=Submit') | ✅ 常に | 最良。ユーザーがページとどのように相互作用するかを反 映している。フロントエンドの翻訳ファイルを使用して、翻訳が更新されてもテストが失敗しないようにすることをお勧めします |
CSS クエリセレクタ
特に指定がない限り、WebdriverIOはCSSセレクタパターンを使用して要素を照会します。例:
loading...
リンクテキスト
特定のテキストを含むアンカー要素を取得するには、等号(=
)で始まるテキストを照会します。
例えば:
loading...
このように要素を照会できます:
loading...
部分的なリンクテキスト
表示されているテキストが検索値と部分的に一致するアンカー要素を見つけるには、
クエリ文字列の前に *=
を使用して照会します(例:*=driver
)。
上記の例の要素も次のように呼び出すことで照会できます:
loading...
注意: 1つのセレクタ内で複数のセレクタ戦略を混在させることはできません 。代わりに、複数の連鎖した要素クエリを使って同じ目標に到達してください。例:
const elem = await $('header h1*=Welcome') // これは動作しません!!!
// 代わりに次のようにしてください
const elem = await $('header').$('*=driver')
特定のテキストを持つ要素
同じ手法を要素にも適用できます。さらに、クエリ内で.=
や.*=
を使用して大文字小文字を区別しないマッチングを行うこともできます。
例えば、「Welcome to my Page」というテキストを持つレベル1の見出しに対するクエリは次のとおりです:
loading...
このように要素を照会できます:
loading...
または部分テキストを使用して照会:
loading...
同様にid
やclass
名でも機能します:
loading...
このように要素を照会できます:
loading...
注意: 1つのセレクタ内で複数のセレクタ戦略を混在させることはできません。代わりに、複数の連鎖した要素クエリを使って同じ目標に到達してください。例:
const elem = await $('header h1*=Welcome') // これは動作しません!!!
// 代わりに次のようにしてください
const elem = await $('header').$('h1*=Welcome')
タグ名
特定のタグ名を持つ要素を照会するには、<tag>
または<tag />
を使用します。
loading...
このように要素を照会できます:
loading...
name属性
特定のname属性を持つ要素を照会するには、通常のCSS3セレクタを使用するか、[name="some-name"]のようなセレクタパラメータを渡すことで、JSONWireProtocolから提供されているname戦略を使用できます:
loading...
loading...
注意: このセレクタ戦略は非推奨であり、JSONWireProtocolプロトコルで実行される古いブラウザやAppiumを使用する場合にのみ機能します。