SeleniumでElementを取得する際、慣れていないとよくNot found elementのエラーに遭遇します。
その際、個人的に確認することをまとめました。
使用環境
- デバッガ : Eclipse
- ブラウザ : Chrome
- 言語 : java
1. デバッグを行い、Element変数の中身を確認してみる
Eclipseの場合、画像のようにElement変数内のcriteriaとparentの両方の内容を確認します。
2. ブラウザの開発ツールを開き、ElementsタブでAND検索してみる
上記のデバッグで取得した変数の中身を使用します。AND検索の方法は以下です。
- CSSセレクタを使用した場合: [parent変数の中身]//[criteriaの中身]
- XPathを使用した場合: [parent変数の中身] (半角スペース)[criteria変数の中身]
上記の検索方法で以下を確認します。
- 取りたいElementが検索に引っ掛かるかどうか
- Elementが複数取れていないか
だいたいここでElementの指定方法の間違いに気づいたりします。
3. 開発ツール上からCSSセレクタやXPathを取得してみる
開発ツール上で、対象のElement右クリック > Copy > Copy selector/Xpath
上記の指定方法でElementが取得できるか試してみます。
また、自分が記載した指定方法と見比べて、どこが違うか確認します。
※自動的に生成されるCSSセレクタやXPathはメンテナンス性が低いことがあるので注意してください。
4. iframeでないか疑ってみる
取得したいElementがiframeの中の要素である場合、ドライバーをスイッチする必要があります。
iframeへ切り替える方法は以下です。
Selenide.switchTo().frame(iframe)
5. 別windowsでないか疑ってみる
取得したい要素が別のウィンドウや別のタブの場合も、ドライバーをスイッチする必要があります。
セレナイドを使っている場合は以下で別ウィンドウへ切り替えられます。
Selenide.switchTo().window(window)
6. 最後に
もし記述に間違いがあったり、他に何かいい方法あったら教えてください。