Posible problema con Chromedriver 78, Selenium no puede encontrar el elemento web de PDF abierto en Chrome

17

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&amp;reanudar=&amp;>
</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.

Mezcla
fuente
Hoy eliminé la versión 78 de Google Chrome e instalé la versión 76 y mi prueba de automatización funciona nuevamente. Todo funciona a la perfección. Espero que este problema con la versión 78 se solucione. Así que estaba usando chromedriver (versión 78) y en mi archivo .pom tengo la siguiente dependencia: <dependency> <groupId> org.seleniumhq.selenium </groupId> <artifactId> selenium-chrome-driver </artifactId> <version> 3.141.59 </version> </dependency>
Mezcle el
Tengo el mismo problema. El código que funcionaba antes, ahora falla porque el controlador web no puede localizar el elemento web que estoy tratando de localizar. Las esperas implícitas y explícitas fallan igual. Lo que no he podido identificar es el tipo de elementos con los que tiene problemas o si son solo componentes ubicados dentro de un iframe. Como solución alternativa, he estado agregando Thread.sleeplugares donde tuve esperas implícitas o explícitas antes de esta actualización.
hfontanez
Chrome 78 con chromedriver 77 me funciona.
Yun

Respuestas:

5

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.

wdtj
fuente
Abrí el número 3198 con los desarrolladores de ChromeDriver.
wdtj
1
Recibí la siguiente respuesta a mi problema: Gracias por informar este problema. A partir de la versión 77, Chromedriver no espera a que se carguen marcos o iframes al navegar a una nueva página o al cambiar de ventana. Esto introduce la necesidad de esperar el código para que los recursos estén disponibles. La mayoría de los enlaces tienen una espera explícita, así como la configuración de espera implícita. Busque WebDriverWait en la documentación de Selenium para obtener más información.
wdtj
Pero estamos usando esperas explícitas y eso no ayuda. Ayuda a cambiar los iframes, pero las etiquetas HTML ya no son visibles para el PDF incrustado.
Mezcle el
Abrí un nuevo número en el grupo chromedriver
Mezcle el
El cromo puede utilizar para las pruebas, que es una versión básica de Chrome sin los servicios de Google, no se actualizará y funciona bien con Chromedriver: chromium.org/getting-involved/download-chromium
Blaise
3

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:

webdriver_element.click()

Pero usar Action Chains parece ser confiable:

ActionChains(context.browser).click(webdriver_element).perform()

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.

Oli Boorman-Humphrey
fuente
Esto me ayudó bastante, gracias.
Piedone
1

Al agregar el siguiente argumento, he resuelto mi problema.

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);
zsbappa
fuente
Hola @zsbappa! Gracias por su respuesta. Sin embargo, esto no resuelve mi problema. El problema es que chromedriver (versión 78) no puede encontrar ningún elemento web en pdf incrustado. Esta funcionalidad funcionó bien hasta que Google Chrome no se actualizó a la versión 78. PD: NO estoy ejecutando mis pruebas en modo sin cabeza
mezclar el
No está claro cómo estas opciones resuelven el problema de los OP.
Cal Corbin el
Esto no resuelve el problema. Lo más probable es que esté ejecutando escenarios en los que el elemento web no se encuentra dentro de un iframe.
hfontanez
1

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

DavidRYV
fuente
1

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 NoSuchElemento TimeoutExceptionrespectivamente.

Proporcioné al equipo chromedriver un registro detallado del controlador de Chrome y están trabajando en ello.

ACTUALIZACIÓN : del problema 3223 de chromedriver

Los registros muestran que la ejecución finalContextCreated para el marco no se completa hasta después de que FindElement devuelve nulo. A partir de la versión 77, ChromeDriver dejó de esperar a que se carguen todos los cuadros antes de continuar la navegación. Desafortunadamente, ese cambio evitó una espera para que se cargue el marco actual. 3164 esperará a que se cargue la trama actual; esto debería evitar que FindElement busque hasta que el marco haya dejado de cargarse y se haya creado el contexto de ejecución.

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.sleepentre 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.

hfontanez
fuente
0

Por ejemplo: ¡Puede intentar usar estas palabras clave !.

1. implicit_wait=10
2. Sleep  10
Narasimhamurthy GN
fuente
Hola @Narasimhamurthy GN, gracias por tu respuesta. La espera explícita no es un problema, estoy usando esperas explícitas en todas mis pruebas y no estoy enfrentando un problema similar. El problema es que chromedriver (versión 78) no puede encontrar ningún elemento web en pdf incrustado.
Mezcle el
Para mí, algunos casos de prueba también me he enfrentado al mismo problema por el que usé "geckodriver" (Firefox).
Narasimhamurthy GN
de lo contrario, use una palabra clave diferente del localizador de la biblioteca de selenio para encontrar WebElement.
Narasimhamurthy GN
Desafortunadamente, se recomienda que los usuarios de nuestra aplicación web utilicen Chrome o Internet Explorer, Firefox no se recomienda por alguna razón. Es por eso que no puedo usar Firefox para automatizar las pruebas. Traté de usar todas las formas posibles para encontrar cualquier elemento web en pdf usando selenio, pero no funciona. También intenté usar diferentes dependencias y controladores de cromo y nada funciona.
Mezcle el
0

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/

Sagar Bhavsar
fuente
-1

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.

Thiago
fuente
Gracias por la respuesta, pero en realidad no responde el problema de las excepciones NoSuchElement en la versión 78 de Chrome.
wdtj