Elemento MyElement no se puede hacer clic en el punto (x, y) … Otro elemento recibiría el clic

Estoy tratando de hacer algunas pruebas usando el Katalon Studio basado en selenium. En una de mis pruebas tengo que escribir dentro de un área de texto. El problema es que me sale el siguiente error:

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

De hecho, mi elemento se ubica dentro de otra diva que podría ocultarlo, pero ¿cómo puedo hacer que el evento de clic golpee mi área de texto?

Element ... is not clickable at point (x, y). Other element would receive the click" Element ... is not clickable at point (x, y). Other element would receive the click" puede ser causado por diferentes factores. Puede abordarlos mediante cualquiera de los siguientes procedimientos:

  1. No se hace clic en el elemento debido a las llamadas JavaScript o AJAX presentes

Intenta usar Actions Class:

 WebElement element = driver.findElement(By.id("id1")); Actions actions = new Actions(driver); actions.moveToElement(element).click().build().perform(); 
  1. No se hace clic en Elemento ya que no está dentro de la ventana gráfica

Intenta usar JavascriptExecutor para traer el elemento dentro de Viewport:

 JavascriptExecutor jse1 = (JavascriptExecutor)driver; jse1.executeScript("scroll(250, 0)"); // if the element is on top. jse1.executeScript("scroll(0, 250)"); // if the element is at bottom. 

O

 WebElement myelement = driver.findElement(By.id("id1")); JavascriptExecutor jse2 = (JavascriptExecutor)driver; jse2.executeScript("arguments[0].scrollIntoView()", myelement); 
  1. La página se actualiza antes de que se pueda hacer clic en el elemento.

En este caso, induce un poco de wait .

  1. El elemento está presente en el DOM pero no se puede hacer clic.

En este caso, agregue algo de ExplicitWait para que se pueda hacer clic en el elemento.

 WebDriverWait wait2 = new WebDriverWait(driver, 10); wait2.until(ExpectedConditions.elementToBeClickable(By.id("id1"))); 
  1. El elemento está presente pero tiene superposición temporal.

En este caso, induzca ExplicitWait con ExpectedConditions establecido en invisibilityOfElementLocated para que Overlay sea invisible.

 WebDriverWait wait3 = new WebDriverWait(driver, 10); wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv"))); 
  1. El elemento está presente pero tiene superposición permanente.

Utilice JavascriptExecutor para enviar el clic directamente en el elemento.

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

Supongo que ya ha comprobado que no hay ningún otro componente superpuesto aquí (anuncios transparentes-iframes o algún otro componente del DOM => visto con frecuencia tales elementos en los elementos de entrada / campo de texto) y, cuando se avanza (lentamente) manualmente su código, está funcionando sin problemas, entonces las llamadas ajax pueden causar este comportamiento.

Para evitar thread.sleep, intente quedarse con EventFiringWebDriver y registre un manejador en él. (Dependiendo del techstack de su aplicación, puede trabajarlo para Angular, JQuery o wicket en el manejador, requiriendo diferentes implementaciones) (Por cierto: este enfoque también me libró de cosas como “StaleElementException” muchas veces)

ver: org.openqa.selenium.support.events.EventFiringWebDriver org.openqa.selenium.support.events.WebDriverEventListener

 driveme = new ChromeDriver(); driver = new EventFiringWebDriver(driveme); ActivityCapture handle=new ActivityCapture(); driver.register(handle); 

=> ActivityCapture implementa WebDriverEventListener, por ejemplo javascriptExecutor para tratar llamadas Ajax en un wicket / dojo techstack

  @Override public void beforeClickOn(WebElement arg0, WebDriver event1) { try { System.out.println("After click "+arg0.toString()); //System.out.println("Start afterClickOn - timestamp: System.currentTimeMillis(): " + System.currentTimeMillis()); JavascriptExecutor executor = (JavascriptExecutor) event1; StringBuffer javaScript = new StringBuffer(); javaScript.append("for (var c in Wicket.channelManager.channels) {"); javaScript.append(" if (Wicket.channelManager.channels[c].busy) {"); javaScript.append(" return true;"); javaScript.append(" }"); ; ; ; javaScript.append("}"); javaScript.append("return false;"); //Boolean result = (Boolean) executor.executeScript(javaScript.toString()); WebDriverWait wait = new WebDriverWait(event1, 20); wait.until(new ExpectedCondition() { public Boolean apply(WebDriver driver) { return !(Boolean) executor.executeScript(javaScript.toString()); } }); //System.out.println("End afterClickOn - timestamp: System.currentTimeMillis(): " + System.currentTimeMillis()); } catch (Exception ex) { //ex.printStackTrace(); } }