[google-chrome] “요소를 클릭 할 수 없음”오류 디버깅

Chrome에서만 볼 수 있습니다.

전체 오류 메시지는 다음과 같습니다.

“org.openqa.selenium.WebDriverException : 지점 (411, 675)에서 요소를 클릭 할 수 없습니다. 다른 요소는 클릭을받습니다 : …”

‘클릭을받을 수있는’요소는 해당 요소의 윗면이 아니라 겹치지 않고 페이지 주위를 이동하지 않는 요소의 측면입니다.

오프셋을 추가하려고 시도했지만 작동하지 않습니다. 항목은 스크롤 할 필요없이 표시된 창에 있습니다.



답변

다음 세 가지 유형이 있습니다.

1. 요소가 클릭되어 보이지 않습니다.

클릭하도록 Actions 또는 JavascriptExecutor 를 사용 하십시오.

행동 별 :

WebElement element = driver.findElement(By("element_path"));

Actions actions = new Actions(driver);

actions.moveToElement(element).click().perform();

JavascriptExecutor로 :

JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("scroll(250, 0)"); // if the element is on top.

jse.executeScript("scroll(0, 250)"); // if the element is on bottom.

또는

JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("arguments[0].scrollIntoView()", Webelement); 

그런 다음 요소를 클릭하십시오.

2. 요소를 클릭하기 전에 페이지가 새로 고쳐집니다.

이를 위해 페이지를 몇 초 동안 기다리십시오.

3. 요소를 클릭 할 수 있지만 그 위에 회 전자 / 오버레이가 있습니다.

아래 코드는 오버레이가 사라질 때까지 기다립니다.

By loadingImage = By.id("loading image ID");

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);

wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));

그런 다음 요소를 클릭하십시오.


답변

JavaScript 클릭을 사용할 수도 있으며 스크롤이 필요하지 않습니다.

IJavaScriptExecutor ex = (IJavaScriptExecutor)Driver;
ex.ExecuteScript("arguments[0].click();", elementToClick);


답변

chromedriver에 버그가있는 것 같습니다 (문제는 수정되지 않은 것으로 표시되어 있음)-> GitHub Link

( 아마도 FreedomSponsors에 현상금을 배치 하시겠습니까?)

의견 # 27에서 제안 된 해결 방법이 있습니다. 어쩌면 그것은 당신을 위해 일할 것입니다-


답변

나는 같은 문제가 있었고, 제공된 모든 솔루션을 시도했지만 그들은 나를 위해 작동하지 않았다. 결국 나는 이것을 사용했다 :

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("var evt = document.createEvent('MouseEvents');" + "evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);" + "arguments[0].dispatchEvent(evt);", findElement(element));

도움이 되었기를 바랍니다


답변

셀레늄 구동 크롬 창이 너무 작게 열린 상황에서 이것을 보았습니다. 클릭 할 요소가 뷰포트에서 벗어 났으므로 실패했습니다.

그것은 논리적으로 들립니다 … 실제 사용자는 요소를보고 실제로 클릭 할 수 있도록 창 크기를 조정하거나 스크롤해야합니다.

창 크기를 적절하게 설정하도록 셀레늄 드라이버에 지시 한 후이 문제는 사라졌습니다. 웹 드라이버 API는 여기 에 설명되어 있습니다 .


답변

와우, 여기에 많은 답변과 많은 좋은 답변이 있습니다.

나는 내 경험에서 이것에 무언가를 추가하기를 바랍니다.

글쎄, 내 경우에는 때때로 요소를 숨기는 쿠키 오버레이가있었습니다. 요소로 스크롤해도 작동합니다. 그러나 내 겸손한 의견 (제 경우에는 모든 사람을위한 만병 통치약이 아님)에서 가장 간단한 해결책은 전체 화면으로 이동하는 것입니다 (화면 창의 3/4에서 스크립트를 실행 중이었습니다)! 그래서 우리는 간다 :

driver.manage().window().maximize();

희망이 도움이됩니다!


답변

루비 / watir-webdriver / chrome

다음 트릭을 사용하고 작동하는 것 같습니다.

#scroll to myelement
@browser.execute_script "window.scrollTo(#{myelement.element.wd.location[0]},#{myelement.element.wd.location[1]})"

# click myelement
myelement.when_present.fire_event("click")