Selenium Web Driver e Java. Elemento não é clicável no ponto (36, 72). Outro elemento receberia o clique:

Eu usei esperas explícitas e tenho aviso:

org.openqa.selenium.WebDriverException: O elemento não pode ser clicado no ponto (36, 72). Outro elemento receberia o clique: … Duração do comando ou tempo limite: 393 milissegundos

Se eu usei Thread.sleep(2000) , não receberei nenhum aviso.

 @Test(dataProvider = "menuData") public void Main(String btnMenu, String TitleResultPage, String Text) throws InterruptedException { WebDriverWait wait = new WebDriverWait(driver, 10); driver.findElement(By.id("navigationPageButton")).click(); try { wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(btnMenu))); } catch (Exception e) { System.out.println("Oh"); } driver.findElement(By.cssSelector(btnMenu)).click(); Assert.assertEquals(driver.findElement(By.cssSelector(TitleResultPage)).getText(), Text); } 

WebDriverException: elemento não é clicável no ponto (x, y)

Este é um org.openqa.selenium.WebDriverException típico que estende java.lang.RuntimeException .

Os campos dessa exceção são:

  • BASE_SUPPORT_URL : protected static final java.lang.String BASE_SUPPORT_URL
  • DRIVER_INFO : public static final java.lang.String DRIVER_INFO
  • SESSION_ID : public static final java.lang.String SESSION_ID

Sobre o seu usecase individual, o erro informa tudo:

 WebDriverException: Element is not clickable at point (x, y). Other element would receive the click 

É claro a partir do seu bloco de código que você definiu a wait como WebDriverWait wait = new WebDriverWait(driver, 10); mas você está chamando o método click() no elemento antes do ExplicitWait entrar em jogo como em until(ExpectedConditions.elementToBeClickable) .

Solução

O Element is not clickable at point (x, y) erro Element is not clickable at point (x, y) pode surgir de diferentes fatores. Você pode endereçá-los por um dos seguintes procedimentos:

1. Elemento não foi clicado devido a chamadas de JavaScript ou AJAX presentes

Tente usar a class de Actions :

 WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().build().perform(); 

2. Elemento não sendo clicado, pois não está dentro do Viewport

Tente usar o JavascriptExecutor para trazer o elemento dentro do Viewport:

 WebElement myelement = driver.findElement(By.id("navigationPageButton")); JavascriptExecutor jse2 = (JavascriptExecutor)driver; jse2.executeScript("arguments[0].scrollIntoView()", myelement); 

3. A página está sendo atualizada antes que o elemento seja clicável.

Neste caso, induza o ExplicitWait isto é, o WebDriverWait como mencionado no ponto 4.

4. Elemento está presente no DOM, mas não é clicável.

Nesse caso, induza ExplicitWait com ExpectedConditions definido como elementToBeClickable para o elemento ser clicável:

 WebDriverWait wait2 = new WebDriverWait(driver, 10); wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton"))); 

5. O elemento está presente, mas tem uma sobreposição temporária.

Nesse caso, induza ExplicitWait com ExpectedConditions definido como invisibilityOfElementLocated para que a Overlay fique invisível.

 WebDriverWait wait3 = new WebDriverWait(driver, 10); wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv"))); 

6. O elemento está presente, mas com uma sobreposição permanente.

Use JavascriptExecutor para enviar o clique diretamente no elemento.

 WebElement ele = driver.findElement(By.xpath("element_xpath")); JavascriptExecutor executor = (JavascriptExecutor)driver; executor.executeScript("arguments[0].click();", ele); 

Caso você precise usá-lo com Javascript

Podemos usar argumentos [0] .click () para simular a operação de cliques.

 var element = element(by.linkText('webdriverjs')); browser.executeScript("arguments[0].click()",element); 

Podes tentar

 WebElement navigationPageButton = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton"))); navigationPageButton.click(); 

Eu corri para este erro ao tentar clicar em algum elemento (ou sua sobreposição, eu não me importei), e as outras respostas não funcionaram para mim. Eu elementFromPoint usando a API DOM elementFromPoint para encontrar o elemento que o Selenium queria que eu elementFromPoint :

element_i_care_about = something() loc = element_i_care_about.location element_to_click = driver.execute_script( "return document.elementFromPoint(arguments[0], arguments[1]);", loc['x'], loc['y']) element_to_click.click()

Espero que isso ajude alguém!

Rolando a página para o próximo ponto mencionado na exceção fez o truque para mim. Abaixo está o trecho de código:

 $wd_host = 'http://localhost:4444/wd/hub'; $capabilities = [ \WebDriverCapabilityType::BROWSER_NAME => 'chrome', \WebDriverCapabilityType::PROXY => [ 'proxyType' => 'manual', 'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT, 'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT, 'noProxy' => PROXY_EXCEPTION // to run locally ], ]; $webDriver = \RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000); ........... ........... // Wait for 3 seconds $webDriver->wait(3); // Scrolls the page vertically by 70 pixels $webDriver->executeScript("window.scrollTo(0, 70);"); 

NOTA: eu uso o Facebook php webdriver