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:
Intenta usar Actions
Class:
WebElement element = driver.findElement(By.id("id1")); Actions actions = new Actions(driver); actions.moveToElement(element).click().build().perform();
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);
En este caso, induce un poco de wait
.
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")));
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")));
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(); } }