java - Posible problema con Chromedriver 78, Selenium no puede encontrar el elemento web de PDF abierto en Chrome
selenium-webdriver selenium-chromedriver (8)
Hasta que mi Google Chrome no se actualizó a la versión 78, mi código funcionó bien. También actualicé el chromedriver 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.
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);
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
NoSuchElement
o
TimeoutException
respectivamente.
Proporcioné al equipo de 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 marcos 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.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.
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.
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
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.
Por ejemplo: ¡Puede intentar usar estas palabras clave !.
1. implicit_wait=10
2. Sleep 10
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.
Resultó ser un problema con Google Chrome, no con chromedriver: bugs.chromium.org/p/chromedriver/issues/detail?id=3211