chrome - Cómo puedo evitar que "Element no esté visible actualmente y no se pueda interactuar con" Selenium Webdriver
selenium webdriver ruby (10)
No estoy seguro, pero cada elemento de watir-webdriver tiene el método - (Object) wait_until_present (timeout = 30).
si este paso es opcional, debe verificar la visibilidad:
element = driver.findElement(By.xpath("//div[@class = ''T-Jo-auh'']"));
if (element.isDisplayed()) {
element.click();
}
Tenga en cuenta que no soy un gurú de Java, y el código anterior no fue probado. Darle una oportunidad.
Estoy usando selenium webdriver 2.210 + JAVA para probar. Tengo un código de muestra para seleccionar todos los correos en gmail. Pero el código arroja un error "El elemento no está visible actualmente y por lo tanto no se puede interactuar con" cuando trato de poner un retraso de 5 segundos después de obtener la URL a través de webdriver. ¿Es posible hacer que este código funcione con retraso?
driver.get("https://mail.google.com/mail/u/0/?shva=1#all");
delay(5); ////*......Working fine without this...........*////
driver.switchTo().frame(driver.findElement(By.id("canvas_frame")));
driver.findElement(By.xpath("//div[@class = ''T-Jo-auh'']")).click();
Gracias por adelantado
Selenium no interactuará con WebElements que están ocultos o que no se muestran al usuario. En este caso, no es inusual que los clics de los usuarios interactúen con un elemento div o algo similar que a su vez activa el botón real, que está oculto para fines visuales. Te sugiero que corras por los pasos del IDE de selenio en Firefox en tu página. Vea si se activan múltiples eventos cuando hace clic en su elemento "oculto". En el caso de que de hecho se activen varios eventos, haga lo mismo en su código WebDriver.
Si su aplicación usa jQuery, puede hacer los clics usando Javascript. Creé este sencillo asistente para hacer clic en elementos que WebDriver se niega a encontrar:
public static void jqClick(String selector, JavascriptExecutor driver) {
driver.executeScript("$(''" + selector + "'').click()");
}
Como el "controlador", puede usar, por ejemplo, un org.openqa.selenium.firefox.FirefoxDriver
.
Esta fue la única solución que funcionó para mí.
Alternativamente, puede usar la clase JavascriptExecutor proporcionada en Selenium. Después de hacer eso, puede ejecutar cualquier JavaScript para manipular el DOM en una página web.
Ref :: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html
¿Estás seguro de que estás buscando el elemento correcto? Tuve un problema similar y resultó que había dos elementos similares en la página, uno visible y el otro no. La función FindElement devolvía la que no era visible.
Lo resolví usando FindElements en lugar de FindElement y luego usando Linq para extraer el que estaba visible.
En mi caso (PhantomJSDriver llamado desde Selenium WebDriver en c #) tuve que configurar el tamaño de la ventana para que sea lo suficientemente grande para que el elemento sea visible:
driver.Manage().Window.Size = new Size(1000, 800);
Descubrí esa solución leyendo los problemas aquí: https://github.com/ariya/phantomjs/issues/11637
Intenta degradar Selenium webdriver a 2.20.0.
Obtuve un error similar con ruby gem versión 2.21.0 y 2.21.2.
En mi caso, el controlador web siempre devuelve button.visible? = false
button.visible? = false
en caso de que el botón se agregue a la página mediante la llamada. Ajax.
Mis pruebas funcionan anteriormente durante más tiempo y nada relacionado ha cambiado. Así que supongo que esto es un error en la versión actual de webdriver.
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.getElementById(''id'').setAttribute(''visibility'', ''true'');");
driver.findElement(By.id("id")).click();
cambiando la visibilidad del elemento puede realizar su acción. puedes hacer clic con selenio o con JavascriptExecutor
Los usuarios de PhantomJS deberían estar atentos a la respuesta de maximizar la ventana . Existe una buena posibilidad de que un cuadro de diálogo javascripted se encuentre fuera de la ventana gráfica incluso cuando una captura de pantalla muestra que es completamente visible. Dado que es claramente visible, algunas acciones de desplazamiento a la vista no cambian nada, y todas las otras acciones también son inútiles. (Lo mismo para otros navegadores basados en el motor WebKit, por ejemplo, en MacOS Safari y Chrome anterior)
Aquí hay un resumen de las cosas que puede hacer para abordar el problema (ejemplos en Protractor / Javascript):
maximice la ventana del navegador (en Chrome + Mac, actualmente debe hacerlo de manera diferente ):
browser.driver.manage().window().maximize();
verifique que no haya otros elementos que coincidan con el localizador . Puede obtener este error si hay otro elemento que coincida con el localizador que es realmente invisible.
espere a que se pueda hacer clic en el elemento :
var EC = protractor.ExpectedConditions, elm = element(by.id("myid")); browser.wait(EC.elementToBeClickable(elm), 5000);
desplácese hacia la vista del elemento:
var elm = element(by.id("myid")); browser.executeScript("arguments[0].scrollIntoView();", elm);
haga clic a través de javascript :
var elm = element(by.id("myid")); browser.executeScript("arguments[0].click();", elm);
mover al elemento y hacer clic en "acciones del navegador":
var elm = element(by.id("myid")); browser.actions() .mouseMove(elm) .click() .perform();