2012-01-12 16 views
5

Ho un div con un ID univoco. Sotto che div sono un gruppo di elementi span che hanno className=foo. Esistono diversi elementi span con className=foo ma sono univoci per ogni div (se questo è chiaro). Quindi il mio codice Selenio prima ottiene l'unico div come elemento web poi cerca di prendere tale elemento e ottenere dal nome della classe del span in questo modoSelenium WebDriver accede a un elemento secondario

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

Sulla seconda riga viene generata un'eccezione ogni volta

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 

Ho frainteso come ottenere che span da un unico div?

risposta

7

No you'right accesso al arco, ma il problema è che il Dom è cambiato da quando StaleReferenceException è di circa (vedi StaleReferenceException)

Ciò può essere causato perché la pagina non viene caricata completamente quando il codice inizia o modifiche quando il codice viene eseguito. Puoi provare ad aspettare un po 'di più per l'elemento o prendere lo StaleReferenceException e riprovare a cercare il div e lo span.

+0

È anche possibile controllare qui [una possibile soluzione] (http://stackoverflow.com/a/7474518/1077279). – shamp00

+0

Questo sembra essere se metto un sonno e aspetto qualche secondo che funzioni bene. Senza un buon modo per capire se la pagina è stata caricata completamente, penso che, sfortunatamente, ho bisogno di usare solo il sonno – ducati1212

+0

, è possibile combinare sia il sonno che l'eccezione. Prova ad accedere a entrambi gli elementi senza dormire in primo luogo e quando fallisce, usa una sospensione e riprova in seguito – chaosr

1

La mia soluzione non è lussuosa ma funziona come un orologio svizzero (nella mia situazione ovviamente). Quindi il mio codice chiama l'elemento genitore in un ciclo alla ricerca di diversi elementi figlio in esso. Nulla è stato cambiato affatto - solo una semplice ricerca e l'eccezione ha iniziato a verificarsi. Così! Ho aggiunto il comando Thread.Sleep (2000) prima di ogni ricerca dell'elemento genitore e risolve il problema. Non elegante ma funziona sempre con il codice minimo per eseguire il debug in seguito.

Problemi correlati