python - support - El controlador Phantom JS no puede ubicar elementos a veces
selenium support for phantomjs has been deprecated, please use headless (3)
Soy nuevo en PhantomJS y estoy intentando ejecutar mis pruebas de selenio (python) usando el controlador phantomjs pero no los elementos web.
Registros de Ghostdriver:
[INFO - 2015-02-27T15:24:40.236Z] GhostDriver - Main - running on port 52653
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1","webSecurityEnabled":true}
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.customHeaders: - {}
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.0.0","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"mac-10.9 (Mavericks)-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
[INFO - 2015-02-27T15:24:41.075Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: bfd397f0-be94-11e4-ad03-b711254501c8
[ERROR - 2015-02-27T15:24:47.242Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1425050687190
:262 in error
La parte intrigante es que, después de instalar con éxito phantomjs, ejecuté mi prueba de inicio de sesión y se aprobó sin problemas. Luego ejecuté otra prueba que falló por la misma razón mencionada anteriormente. Intenté volver a ejecutar la prueba de inicio de sesión que pasó, pero el controlador phantomjs ya no encontró los elementos.
¿Alguna idea que está causando esto?
Por cierto, estas pruebas funcionan bien con Chrome y FF
Es posible que su prueba de selenio intente encontrar el elemento antes de que se cargue. Después del primer intento fallido, debe intentarlo una y otra vez y continuar hasta que encuentre el elemento o el tiempo de espera excedido.
Mira splinter https://splinter.readthedocs.org/en/latest/index.html Funciona con selenio e implementa la lógica de esperar elementos.
Me he dado cuenta de que esos elementos no se encuentran en casos de prueba utilizando los métodos find_element del controlador phantomJS, que se puede acceder mediante JavaScript utilizando JavascriptExecutor. Use el script java para acceder al elemento y para la acción en un elemento. Espero que eso resuelva su problema.
Entonces ... parece que cualquier elemento que use Selenium WebDriver Wait está usando un esquema de votación. Recuerde que una espera explícita de Selenium es un código que usted define para esperar a que ocurra una determinada condición antes de seguir adelante en el código. WebDriverWait llama por defecto a ExpectedCondition cada 500 milisegundos hasta que vuelva a funcionar correctamente. ( referencia. ) Lo que eso significa es que cada 500 mSecs, el selenio prueba la condición de espera. Si es verdadero, proceda. Si aún no es cierto, espere otro ciclo de frecuencia de sondeo, luego intente de nuevo.
Y a partir de mis pruebas, mi creencia es que una prueba de sondeo y no listo todavía así que lo llamo un error definitivamente genera un error en mi ghostdriver.log
[ERROR - 2016-08-14T08:50:12.896Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1471164612878
Estoy trabajando en un proyecto que destruye un sitio complejo de una sola página de AJAX. Debido a que el sitio reutiliza elementos div comunes, tengo que hacer un montón de llamadas (borrar, pegar valor, hacer clic, esperar, ir a una tabla diferente en la página, copiar datos de interés, repetir ...) para obtener el datos que necesito Y como el sitio es un poco lento, aplico elementos de espera a través de:
driver.wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id=''special_content_id'']//td[contains(.,''" + info.unitId + "'')]")))
Resulta que la frecuencia de sondeo se establece en la clase selenium.webdriver.support.wait.WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
Tenía curiosidad sobre el comportamiento. Cuando mi poll_frequency se estableció en 0.5 segundos, recibí 98 errores de WebElementLocator. Cuando driver.wait = WebDriverWait(driver, 60, 7.5)
eso a 7.5 segundos, driver.wait = WebDriverWait(driver, 60, 7.5)
, recibí solo 36 errores. Los tiempos de encuesta más pequeños generan más errores.
Lo que realmente encuentro extraño es que no esperaría un comportamiento de sondeo normal (Selenio) para establecer un error de registro en cualquier lugar (PhantomJS). Ojalá hubiera una entrada de registro diferente para una encuesta, elemento aún no listo ...