클릭 문제

'요소를 클릭할 수 없음' 오류

ChromeDriver 클릭은 요소의 첫 번째 클라이언트 rect (또는 첫 번째 클라이언트 rect가 없는 경우 경계 클라이언트 rect) 중간에 마우스 클릭을 시뮬레이션하는 방식으로 작동합니다. ChromeDriver가 클릭하는 위치를 알아내는 가장 쉬운 방법은 Chrome devtools를 열고 클릭 작업이 호출되기 직전에 클릭할 요소를 검사하는 것입니다. 검사기에서 요소를 선택하고 아래 그림과 같이 요소의 클라이언트 rect를 나타내는 파란색 상자를 확인합니다. ChromeDriver가 첫 번째 항목의 중간을 클릭하려고 합니다.

ChromeDriver에서 '요소를 클릭할 수 없음' 오류를 표시하는 경우 사용자가 해당 위치를 실제로 클릭할 수 없기 때문일 가능성이 높습니다. 테스트하려면 첫 번째 클라이언트 직사각형 중앙에 커서를 놓고 해당 위치를 클릭할 수 있는지 확인하세요.

위의 사례에서는 테스트에서 앵커 요소를 클릭하려고 했습니다. 이 경우 앵커는 클릭할 수 없고 하위 이미지만 클릭할 수 있습니다. 이미지 요소의 margin-bottom 스타일로 인해 앵커 요소의 중간이 클릭 가능한 이미지 경계를 벗어나므로 ChromeDriver에서 오류가 발생합니다. 위치 또는 크기 결정 방법에 관한 자세한 내용은 W3 사양을 참고하세요. 위의 사례를 해결하려면 앵커 대신 이미지를 클릭하세요.

'요소를 클릭할 수 없음' 오류는 테스트에서 다음과 같은 경우에 종종 발생합니다.

  • 클릭 가능한 하위 요소가 앵커 경계 내에 있지 않은 앵커를 클릭합니다 (위와 같음).
  • 다른 요소 아래에서 전체 또는 부분적으로 클릭
  • 고정 오버레이가 있는 경우 화면 밖에 요소를 클릭합니다 (요소는 스크롤되어 보이지만 고정 오버레이 아래로 스크롤될 수 있음).
  • 가운데를 클릭할 수 없는 요소 (예: 볼록 SVG 요소 유형)를 클릭합니다.

이러한 문제는 특정 요소의 하위 요소를 클릭하거나, 프로그래매틱 방식으로 차단 요소를 삭제하거나 숨기거나, 고급 상호작용 API를 사용하여 요소의 왼쪽 상단에서 오프셋을 클릭하거나, 자바스크립트에서 마우스 클릭 이벤트를 시뮬레이션하여 해결할 수 있습니다.

'요소를 클릭할 수 없음' 오류

ChromeDriver가 요소의 위치를 확인한 후 ChromeDriver가 실제로 해당 위치에서 클릭을 실행하기 전에 요소의 위치가 변경되었기 때문일 가능성이 높습니다.

이것이 문제인지 확인하려면 클릭에서 예외를 포착하고 요소의 현재 위치와 크기를 즉시 로깅합니다. ChromeDriver가 예외에서 클릭을 시도했다고 보고한 위치와 비교해 보고 서로 다른지 확인합니다. 이 경우 요소의 이동이 멈출 때까지 기다리거나 다시 클릭해야 합니다. 그렇지 않은 경우 문제를 재현하는 데 사용할 수 있는 작은 테스트 페이지에 버그를 신고합니다. 간혹 문제가 발생하는 경우도 있습니다.

ChromeDriver가 움직이는 요소를 클릭할 수 없음

이는 ChromeDriver에서 지원되는 기능이 아닙니다. 요소가 결국 중지되면 중지될 때까지 기다립니다. 요소 이동이 멈추지 않으면 ChromeDriver는 클릭의 성공을 보장하지 않습니다.