2012-01-12 25 views
5

Tengo un div con una identificación única. Debajo de eso div hay un grupo de span elementos que tienen className=foo. Hay varios elementos span con className=foo pero son únicos para cada div (si es claro). Así que mi código de selenio se pone por primera vez la única div como un elemento web a continuación, trata de tomar ese elemento y obtener el nombre de la clase del span al igual queSelenium WebDriver acceder a un elemento secundario

element = sDriver.findElement(By.id("c_"+cID)); 
String sTest = element.findElement(By.className("actions")).getText(); 

En la segunda línea se lanza una excepción cada vez que

org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up 
Command duration or timeout: 22 milliseconds 

¿Entiendo mal cómo obtener ese span bajo un único div?

Respuesta

7

Nop you'right acceder a la duración, pero el problema es que el Dom ha cambiado desde StaleReferenceException se acerca (ver StaleReferenceException)

Esto puede ser causado debido a que la página no se carga completamente cuando el código se inicia o cambios cuando el código se ejecuta. Puede intentar esperar un poco más para el elemento o atrapar la excepción StaleReferenceException e intentar nuevamente encontrar el div y el span.

+0

También puede consultar aquí [una posible solución] (http://stackoverflow.com/a/7474518/1077279). – shamp00

+0

Esto parece ser que si me pongo a dormir y espero unos segundos, funciona bien. Sin una buena forma de saber si la página se ha cargado por completo, creo que, lamentablemente, necesito usar un sueño – ducati1212

+0

, puede combinar tanto un sueño como atrapar la excepción. Intente acceder a ambos elementos sin dormir en primer lugar y, cuando falle, utilice un modo de suspensión e intente de nuevo después. – chaosr

1

Mi solución no es elegante, pero funciona como un reloj suizo (en mi situación, por supuesto). Entonces, mi código llama al elemento padre en un bucle buscando diferentes elementos secundarios en él. Nada se modificó en absoluto, solo consultas simples y la excepción comenzó a ocurrir. ¡Asi que! He agregado el comando Thread.Sleep (2000) antes de cada búsqueda del elemento principal y resuelve el problema. No es elegante pero funciona siempre con un código mínimo para depurar después.

Cuestiones relacionadas