Selenium WebDriver accéder à un sous-élément
J'ai un div
avec un ID unique. En vertu de cette div
sont un tas de span
éléments qui ont className=foo
. Il y a plusieurs span
éléments avec className=foo
mais ils sont uniques à chaque div
(si c'est clair). Donc, mon Sélénium code obtient d'abord l'unique div
web élément essaie ensuite de prendre cet élément et obtenir par le nom de classe de la span
comme
element = sDriver.findElement(By.id("c_"+cID));
String sTest = element.findElement(By.className("actions")).getText();
Sur la deuxième ligne, il déclenche une exception à chaque fois
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
Faire j'ai mal compris la façon d'obtenir que span
de la vertu d'une unique div
?
OriginalL'auteur ducati1212 | 2012-01-12
Vous devez vous connecter pour publier un commentaire.
Nan vous'right accès à la plage, mais le problème est que le Dom a changé depuis StaleReferenceException (voir StaleReferenceException )
Cela peut être causé parce que la page n'est pas complètement chargé lorsque le code commence ou des changements lorsque le code est exécuté. Vous pouvez essayer d'attendre un peu plus de temps de l'élément ou attraper le StaleReferenceException et essayez à nouveau de trouver la div et span.
Cela semble être si je mets en veille et attendez quelques secondes, il fonctionne très bien. Avec pas de bonne façon de savoir si la page est entièrement chargée, je pense que, malheureusement, je dois utiliser un sommeil
vous pouvez combiner à la fois le sommeil et la capture de l'exception. Essayez d'accéder à la fois à des éléments sans sommeil, en premier lieu, et quand il échoue, utilisez un sommeil et essayez à nouveau par la suite
Fonctionne très bien avec la capture de l'exception. J'ai un getText() et cliquez sur(). Il lève l'exception à getText (), même si elle peut encore cliquez sur. J'ai attrapé l'exception car rien de ce qui n'allait pas avec mon code.
OriginalL'auteur chaosr
Ma solution n'est pas de fantaisie, mais il fonctionne comme une montre Suisse (dans mon cas bien sûr). Donc mon code est l'appel de l'élément parent dans une boucle à la recherche de différents éléments enfants. Rien n'a été changé à tous - simple interrogation et l'exception a commencé à se produire. Afin de! J'ai ajouté le Fil.Sleep(2000) de commande avant chaque recherche de l'élément parent et le solveur le problème. Pas très élégant, mais qui fonctionne à chaque fois avec un minimum de code de debug par la suite.
OriginalL'auteur user1922804