StaleElementReferenceError avec le Sélénium avec le contenu déjà chargé
Je suis en utilisant le Capybara avec Ruby 1.9.3 en utilisant le sélénium pilote afin d'obtenir les informations d'un site web. Après avoir cliqué sur un couple de pages que je visite la page, je veux et j'ai mis:
all(:css, 'td').each { |td| a_info << td }
a_info.each {|t| puts t.text }
L'erreur que j'ai ensuite après environ 10 secondes d'attente:
[remote server] resource://fxdriver/modules/web_element_cache.js:5628:in `unknown': Element not found in the cache - perhaps the page has changed since it was looked up (Selenium::WebDriver::Error::StaleElementReferenceError)
Suivi beaucoup plus éloignées des erreurs de serveur. Je vous ai donné la page 10 et 30 secondes de temps de sommeil et c'est encore de ne pas charger et quand je fais imprimer page.html je vois un script javascript et puis tous les td que je vais essayer d'obtenir des infos. Je sais que l'erreur signifie qu'un élément soit trouvée n'est pas l'actuel, mais il semble que tous les éléments ont été chargées déjà donc je ne sais pas pourquoi ils n'existent plus. J'ai parcouru l'internet pendant des heures à la recherche, et l'amour de l'aide de solutions possibles pour tenter et les prochaines étapes pour essayer de le comprendre. Je peux fournir toute information supplémentaire nécessaire, faites le moi savoir.
OriginalL'auteur Anoel | 2012-08-31
Vous devez vous connecter pour publier un commentaire.
Il se passe quand vous faites une portée et que vous changez de page, par exemple, mais continue à faire des affirmations à l'intérieur, comme suit:
Vient de réouvrir vous portée encore plus pour continuer à travailler sur l'ancien.
within
.C'est exactement mon cas. Les tests essayé d'attendre pour un modal à fermer dans la modale de la portée. L'affirmation a été fondamentalement pas de sens (toujours faux), mais si le modal fermé trop vite, cette assertion a déclenché cette exception. Doit avoir été introduit par le remaniement.
J'ai eu le même problème sans sélénium, juste à l'aide de capybara: toujours obtenu un Capybara::RackTest::Erreurs::StaleElementReferenceError. la fermeture de la portée résolu.
OriginalL'auteur Washington Botelho
C'est ma préférée au moins d'erreur. Je vais vous référer à cette question exacte sur un débordement de pile demandé environ un an avant le Au hasard "Élément est plus attaché à la DOM" StaleElementReferenceException
re-lire le débordement de la pile d'erreur que je vous ai envoyé; qui va vous donner la raison pour laquelle vous avez votre problèmes. Voici la définition de l'erreur de vous arriver: Erreur. En attente de 30 secondes wont vous aider. Peut-être essayer un implicite d'attente, ou de modifier votre code pour trouver un td élément de mettre son texte vers le bas, puis déplacer vers le prochain td. Ou si vous le souhaitez utiliser une sorte d'analyseur html pour retrouver vos informations. Le sélénium n'est pas le meilleur outil pour ce que vous essayez de faire.
OriginalL'auteur Greg
Présenté dans le code de l'impression de texte sur la console, mais peut-être dans votre code réel vous êtes en cliquant sur ces liens à l'intérieur de
each
boucle qui est faux.Solution
Essayez d'abord d'extraire des attributs href et ensuite passer en boucle.
Code:
Je ne suis pas sûr si cela correspond à votre situation, donner plus d'info dans les commentaires.
Peut-être un peu de javascript est exécuté et il n'y a pas tous la td, vous avez recueillies à l'étape précédente. Pourquoi vous n'essayez pas de collecter td.texte dans les premiers de chaque méthode?
OriginalL'auteur Иван Бишевац