Selenium面接の質問
文責 Aaron Cao · 更新

Selenium面接では待機、ロケーター、Page Object Model、そしてテストがなぜ不安定になるのかが中心になります。暗黙的待機と明示的待機の違いを説明し、XPathではなくCSSを選ぶ理由を述べて擁護し、古い要素参照エラーを解決し、フレームワークがどのように並列実行されるかを説明できるようにしておきましょう。
面接官は待機とロケーターについて何を聞きますか?
ローカルでは通るのにパイプラインでは失敗するテストを書いたことがあり、原因は待機に関係していると感じつつも、うまく言葉にできない。面接官はそれを知っているからこそ、待機はほとんどのSelenium面接の冒頭で扱われます。このセクションでは、完全な回答がどのようなものかを示します。
- 暗黙的待機と明示的待機。 暗黙的待機はグローバル設定で、要素を探すたびに存在をポーリングします。明示的待機は一つの要素と一つの条件(クリック可能や表示状態など)を対象にします。明示的待機の方が好まれるのは、何を待っているのかを明確に示せるからです。
- なぜ両者を混在させてはいけないのですか? 両方を組み合わせると予測しにくい形でタイムアウトが重なることがあるため、多くのチームは暗黙的待機をゼロに設定し、明示的待機だけを使います。
- fluent waitとは何ですか? ポーリング間隔を設定でき、特定の例外型を無視できる明示的待機です。
- なぜ
Thread.sleepは間違っているのですか? 無条件だからです。通過するはずのテストを遅くし、それでも遅いテストを救うことはできません。 - CSSセレクタとXPath、どちらを使うべきですか? 安定したテスト専用の識別属性を優先し、次に可読性の高いCSSを使います。親要素まで遡ったりテキストで一致させたりする必要があるときにXPathが役立ちます。
- 何がロケーターを壊れやすくしますか? 自動生成されたクラス名、絶対パスのXPath、インデックスによる選択です。代わりに開発者に何を追加してほしいかを言えるようにしておきましょう。
面接官が聞いているのは、それぞれの選択の理由です。コストを示さずに好みだけを述べると、暗記した回答のように聞こえてしまいます。
例外とテストの不安定さに関する質問にはどう答えますか?
テストの不安定さこそ、シニア向け自動化面接の本当のテーマです。誰も信頼しないスイートは、スイートが存在しないよりも悪いからです。
StaleElementReferenceExceptionの原因は何ですか? 要素の参照が、もはやアタッチされていないノードを指している状態で、通常はフレームワークがページのその部分を再レンダリングしたことが原因です。保存済みの参照を再利用せず、要素を再取得してください。ElementNotInteractableExceptionはどうですか? 要素は存在するものの操作できない状態です。非表示、無効化、オーバーレイに覆われている、または画面外にあるといった場合です。NoSuchElementExceptionはどう扱いますか? タイミングの問題なのか、要素が本当に存在しないのかを見分け、長いsleepで問題を覆い隠さないようにします。- なぜテストはパイプラインでだけ失敗するのですか? ビューポートサイズの違い、環境が遅いこと、テストデータの不足、アニメーションの完了が遅れること、並列テストが共有状態を奪い合うことなどが原因です。
- 不安定なテストはどう修正しますか? まずカテゴリーを診断し、それから原因を修正します。自動リトライは失敗を覆い隠すだけなので、最後の手段として扱うべきだと明言してください。
- フレーム、新しいウィンドウ、アラートはどう扱いますか? コンテキストを明示的に切り替え、その後元に戻します。
中堅の自動化職に応募したQAエンジニアが、コードを一切変更していないのになぜあるスイートが週に二回失敗するのかと聞かれました。評価された答えはSelenium APIの細かな話ではなく、テストが同じ一つの初期設定済みアカウントを共有し、互いに競合していたという点でした。面接官はその診断の順序を評価します。まず環境とデータ、次にAPIです。
職種やツール別のより多くの問題集は 職種別の面接質問 にあります。
フレームワークとアーキテクチャに関する質問には何が出ますか?
APIの知識に加えて、面接パネルはあなたがスイート全体を任せられる人物かどうかを知りたがっています。これらの質問はシニア職において最も重視されます。
- Page Object Modelを説明してください。 Pageクラスはアクションを公開しロケーターを隠すため、UIの変更が一つのファイルだけに影響します。それがどんな問題を解決するのかを説明することが重要で、フォルダ構成だけを説明しても要点を外します。
- Page Objectの何が問題になりますか? 数千行のクラスに肥大化し、ページメソッド内でアサーションを始めてしまうことです。アサーションはテストの中にあるべきです。
- フレームワークはどのようにテストを並列実行しますか? スレッドセーフなドライバー管理でインスタンスがスレッド間で共有されないようにし、さらにテストごとに独立したテストデータを用意します。
- Selenium Gridは何のためのものですか? テストを複数のマシンやブラウザバージョンに分散させるためのもので、hubとnodeの構成、あるいはクラウドプロバイダーが同じ役割を担うこともあります。
- Selenium 4で何が変わりましたか? W3C WebDriverプロトコルが標準になり、旧JSON wire protocolが削除され、相対ロケーターが追加され、Chrome DevTools Protocolへのアクセスが公開されました。
- Seleniumを使うべきでないのはどんなときですか? APIレベルの検証、単体テスト可能なロジック、ブラウザ外のあらゆるものです。その境界を知っていることがシニアであることのシグナルになります。
- 何を自動化するかはどう判断しますか? 安定していて、価値が高く、繰り返し実行される経路です。すべてを自動化するわけではなく、まだ再設計中の画面も対象にしません。
面接前にどう練習すべきですか?
Seleniumの回答は、知っているのに口に出すのが難しいという珍しいタイプです。特に待機の質問は定義と理由という二つの部分から成り立っており、資料を読んだだけの候補者は前半だけを話して尻すぼみになりがちです。
ここで挙げた質問のうち、最も答えたくないものを五つ選び、エディタを開かずに九十秒以内で声に出して答えてみましょう。次に誰かに「なぜ」と突っ込んでもらいます。この追加質問はほぼ毎回来ます。反論してくるAI面接官を相手に同じ質問を繰り返し練習する方が、リストを読み返すよりも本番の面接に近づきます。それこそが 模擬面接 モードの存在理由です。
SubcueAIの創業者Aaron Caoは、より多くの問題を用意することではなく、この「話す力の差」を埋めることを中心に練習を設計しました。実際の面接では、デスクトップアプリとブラウザ拡張機能のサイドパネルが、面接官が話している間に構造を表示でき、それはすでに練習済みの内容において最も役立ちます。この製品が何をするのか、そして決して越えない範囲については セキュリティ ページに記載されています。