クリックに関する問題

「要素がクリック可能ではありません」エラー

ChromeDriver のクリックは、要素の最初のクライアント長方形(最初のクライアント長方形がない場合は境界クライアント長方形)の途中でマウスクリックをシミュレートすることで機能します。ChromeDriver がクリックしようとしている場所を確認する最も簡単な方法は、Chrome DevTools を開き、クリック オペレーションが呼び出される直前にクリックする要素を調べることです。インスペクタで要素を選択すると、次の図に示すように、要素のクライアント四角形を表す青いボックスが表示されます。ChromeDriver は最初の中央のクリックを試みます。

ChromeDriver が「要素がクリック可能ではありません」というエラーをスローする場合は、その場所をユーザーが実際にクリックできないことが原因である可能性があります。テストするには、最初のクライアントの長方形の中央にカーソルを置き、その位置がクリック可能かどうかを確認します。

上記の例では、テストはアンカー要素をクリックしようとしていました。この場合、アンカーはクリック可能ではなく、子画像のみがクリック可能です。画像要素に margin-bottom スタイルが設定されているため、アンカー要素の中央がクリック可能な画像境界の外側にあり、ChromeDriver はエラーをスローします。 配置やサイズの決定方法について詳しくは、w3 の仕様をご覧ください。上記のケースを解決するには、アンカーではなく画像をクリックします。

「要素がクリック可能ではありません」というエラーは、テスト中に次のような状況でよく発生します。

  • クリック可能な子要素がアンカー境界内にないアンカーをクリックする(上述)
  • 別の要素の全体または一部をクリック
  • 固定オーバーレイが存在する場合、画面外にある要素をクリック(要素はスクロールされて表示されますが、固定オーバーレイの下にスクロールされる場合があります)
  • 中央でクリックできない要素(たとえば、一部のタイプの凸 SVG 要素)をクリック

こうした問題は多くの場合、特定の要素の子をクリックする、ブロックする要素をプログラムで削除または非表示にする、Advanced Interaction API を使用して要素の左上からのオフセットでクリックする、または JavaScript でマウスクリック イベントをシミュレートすることで解決できます。

「要素がクリック可能ではありません」エラー

この問題は、ChromeDriver が要素の場所を決定してから、ChromeDriver が実際にその場所でクリックを発行する前に、要素の場所が変更されたことが原因である可能性があります。

これが原因かどうかを判断するには、クリックから例外をキャッチして、すぐに要素の現在の位置とサイズをログに記録します。これを、ChromeDriver が例外でクリックしようとしたことを報告した場所と比較し、異なるかどうかを確認します。その場合は、要素の移動が停止するのを待つか、もう一度クリックする必要があります。そうでない場合は、問題を再現するために使用できる小さなテストページでバグを報告します(たとえまれに問題が発生する場合であっても)。

ChromeDriver が移動する要素をクリックできない

これは ChromeDriver の機能ではありません。要素が最終的に停止する場合は、停止するまで待ちます。要素の動きが止まらない場合、ChromeDriver はクリックの成功を保証しません。