「要素がクリック可能ではありません」エラー
ChromeDriver のクリックは、要素の最初のクライアント長方形(最初のクライアント長方形がない場合は境界クライアント長方形)の途中でマウスクリックをシミュレートすることで機能します。ChromeDriver がクリックしようとしている場所を確認する最も簡単な方法は、Chrome DevTools を開き、クリック オペレーションが呼び出される直前にクリックする要素を調べることです。インスペクタで要素を選択すると、次の図に示すように、要素のクライアント四角形を表す青いボックスが表示されます。ChromeDriver は最初の中央のクリックを試みます。
ChromeDriver が「要素がクリック可能ではありません」というエラーをスローする場合は、その場所をユーザーが実際にクリックできないことが原因である可能性があります。テストするには、最初のクライアントの長方形の中央にカーソルを置き、その位置がクリック可能かどうかを確認します。
上記の例では、テストはアンカー要素をクリックしようとしていました。この場合、アンカーはクリック可能ではなく、子画像のみがクリック可能です。画像要素に margin-bottom
スタイルが設定されているため、アンカー要素の中央がクリック可能な画像境界の外側にあり、ChromeDriver はエラーをスローします。
配置やサイズの決定方法について詳しくは、w3 の仕様をご覧ください。上記のケースを解決するには、アンカーではなく画像をクリックします。
「要素がクリック可能ではありません」というエラーは、テスト中に次のような状況でよく発生します。
- クリック可能な子要素がアンカー境界内にないアンカーをクリックする(上述)
- 別の要素の全体または一部をクリック
- 固定オーバーレイが存在する場合、画面外にある要素をクリック(要素はスクロールされて表示されますが、固定オーバーレイの下にスクロールされる場合があります)
- 中央でクリックできない要素(たとえば、一部のタイプの凸 SVG 要素)をクリック
こうした問題は多くの場合、特定の要素の子をクリックする、ブロックする要素をプログラムで削除または非表示にする、Advanced Interaction API を使用して要素の左上からのオフセットでクリックする、または JavaScript でマウスクリック イベントをシミュレートすることで解決できます。
「要素がクリック可能ではありません」エラー
この問題は、ChromeDriver が要素の場所を決定してから、ChromeDriver が実際にその場所でクリックを発行する前に、要素の場所が変更されたことが原因である可能性があります。
これが原因かどうかを判断するには、クリックから例外をキャッチして、すぐに要素の現在の位置とサイズをログに記録します。これを、ChromeDriver が例外でクリックしようとしたことを報告した場所と比較し、異なるかどうかを確認します。その場合は、要素の移動が停止するのを待つか、もう一度クリックする必要があります。そうでない場合は、問題を再現するために使用できる小さなテストページでバグを報告します(たとえまれに問題が発生する場合であっても)。
ChromeDriver が移動する要素をクリックできない
これは ChromeDriver の機能ではありません。要素が最終的に停止する場合は、停止するまで待ちます。要素の動きが止まらない場合、ChromeDriver はクリックの成功を保証しません。