Saltar al contenido

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

Indagamos por todo el mundo on line y así darte la solución para tu duda, si continúas con alguna duda deja tu inquietud y contestaremos sin falta.

Solución:

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 la presencia de llamadas JavaScript o AJAX

Tratar de usar Actions Clase:

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

Tratar de 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 inducir wait.

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

En este caso agregue algunos 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 una superposición temporal.

En este caso inducir ExplicitWait con ExpectedConditions ajustado a invisibilityOfElementLocated para que la superposición sea invisible.

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

Usar JavascriptExecutor para enviar el clic directamente sobre 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í (publicidad transparente-iframes o algún otro componente del DOM => visto con bastante frecuencia tales cosas en los elementos de entrada / campo de texto) y, cuando se avanza manualmente (lentamente) su código, está funcionando sin problemas, entonces las llamadas ajax pueden causar este comportamiento.

Para evitar thread.sleep, intente seguir con EventFiringWebDriver y registre un identificador. (Dependiendo de la pila de tecnología de su aplicación, puede trabajar para Angular, JQuery o wicket en el controlador, por lo que requiere diferentes implementaciones) (Por cierto: este enfoque también me libró de las cosas “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 hacer frente a las 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();
    

Aquí tienes las reseñas y puntuaciones

Al final de todo puedes encontrar las aclaraciones de otros usuarios, tú además eres capaz insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *