Hasta que mi Google Chrome no se actualizó a la versión 78, mi código funcionó bien. También actualicé el controlador de cromo a la versión 78.0.3904.70. Así que ya no puedo encontrar WebElement con id = 'plugin' usando Selenium WebDriver y Java:
<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&reanudar=&>
</div>
</html>
Aparte de esa parte, mis pruebas están funcionando bien. Nunca tuve un problema similar antes. También intenté encontrar WebElement id = 'content' pero recibo el mismo error.
WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));
scrollvalid.sendKeys(Keys.PAGE_DOWN); scrollvalid.sendKeys(Keys.PAGE_DOWN);
Mi script de automatización debería encontrar el elemento PDF y desplazar la página hacia abajo. En cambio, recibo este error: org.openqa.selenium.TimeoutException: Tiempo de espera agotado después de 90 segundos esperando la visibilidad del elemento ubicado por By.id: plugin
¿Alguien se enfrenta a un problema similar? Gracias por adelantado.
Thread.sleep
lugares donde tuve esperas implícitas o explícitas antes de esta actualización.Respuestas:
Me he encontrado con el mismo problema.
Aparentemente, Chrome se actualiza automáticamente. Ayer (29 de octubre de 19) Mi ChromeDriver comenzó a quejarse de que no era compatible con Chrome 78. Actualicé el controlador a la versión 78. Comencé a recibir excepciones org.openqa.selenium.NoSuchElementException al intentar encontrar elementos que confirmé que estaban allí. FindElement [s] también funciona cuando utilizo puntos de interrupción. También probé esperas implícitas, con un éxito limitado.
Probé la solución ChromeOption de zsbappa pero no me gustó.
Google dificulta obtener versiones antiguas de Chrome, pero encontré la versión 76 en https://www.neowin.net/news/google-chrome-76-offline-installer/ . Cuidado, el instalador en línea instala la última versión. Volví al conductor por 76 y todo está bien. Todas mis pruebas de selenio están funcionando nuevamente.
Mi conclusión es que el Chrome 78 y su controlador asociado tienen una condición de carrera en la que Selenium intenta interrogar a la página web antes de que se complete.
fuente
Nos hemos enfrentado a un problema similar con Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.
En nuestras pruebas automatizadas de Python Selenium, hemos visto múltiples fallas donde parece que no se han producido clics en los elementos. Aún más extraño, parece que el elemento se ha activado (como si fuera a hacer clic), pero el evento de clic real nunca ocurrió. Como resultado, los cambios de página, etc. no ocurren, lo que resulta en varias fallas posteriores.
Mediante un proceso de seguimiento y error, descubrimos que el uso de la función estándar .click () ahora no es confiable:
Pero usar Action Chains parece ser confiable:
No está claro por qué este es el caso. Las fallas comenzaron tan pronto como actualizamos a Chrome 78.0.3904.7. Estamos usando Chromedriver 77.0.3865.90 pero las mismas pruebas pasan de manera confiable en las versiones de Chrome 77.x, por lo tanto, parece que algo está mal o ha cambiado en Chrome 78.
fuente
Al agregar el siguiente argumento, he resuelto mi problema.
fuente
Me he enfrentado al mismo problema al intentar acceder a una pestaña dentro de un iframe, solía funcionar bien en la versión 76. Ahora que se ha actualizado a 78, está fallando. He intentado esperas, esperas implícitas, dormir, localizar los elementos usando xpath, CSS, id, cambiar contexto, desplazarse hasta la vista, etc., sin suerte. Estoy usando Windows 10, 1809. No sé si esto está sucediendo en otro sistema operativo.
Aquí está la pregunta que planteé:
Problema al usar los localizadores chromedriver 78.0.3904.70
fuente
Confirmé ayer que este problema parece manifestarse solo cuando un elemento está contenido en un iframe. En esos casos, el iframe se encuentra bien. Sin embargo, intentar localizar un elemento web utilizando el controlador o los objetos de espera del controlador web dará como resultado un
NoSuchElement
oTimeoutException
respectivamente.Proporcioné al equipo chromedriver un registro detallado del controlador de Chrome y están trabajando en ello.
ACTUALIZACIÓN : del problema 3223 de chromedriver
Básicamente, este error se introdujo en v.77. Muchos de nosotros acabamos de notar este problema porque actualizamos de v.76 a .v78. Se dice que apuntan a una solución para .v80 (no v. 79). Como solución alternativa, estoy usando
Thread.sleep
entre el momento en que cambio al iframe y cuando intento localizar el componente. Esta solución funciona bien. De hecho, puede verificar esto por su cuenta simplemente ejecutando su aplicación en modo DEPURACIÓN. Cuando detenga la ejecución (utilizando un punto de interrupción), notará que su código original (sin la suspensión) funciona bien.fuente
Por ejemplo: ¡Puede intentar usar estas palabras clave !.
fuente
Resultó ser un problema con Google Chrome, no con chromedriver: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211
fuente
Tuve el mismo problema.
Después de actualizar automáticamente Chrome con la versión 78.0, mis scripts de prueba automatizados fallaban. Así que actualicé chromedriver a la versión 78, pero el controlador todavía no pudo encontrar ningún elemento web. Después de eso probé con varias versiones de chromedriver y finalmente mi problema se resolvió con la versión 2.44 de chromedriver .
Esta versión se puede encontrar en https://chromedriver.storage.googleapis.com/index.html?path=2.44/
fuente
Puede usar el administrador de paquetes Nuget , eliminar la unidad de Chrome y buscar Chrome, descargar la nueva versión selenium.web.driver.ChromeDriver >> para jsaKamoto
Allí encontrarás la versión 78 de Chrome.
fuente