7
votes

Erreur de sélénium "L'élément n'est plus attaché à la DOM" tout en raclant des données

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

0 commentaires

3 Réponses :


1
votes

sélénium tente d'effectuer des actions (telles que cliquer sur un bouton ou un lien) avant de vérifier que l'élément cible a rendu sur la page. Le sélénium peut être plus patient, mais il faut lui demander explicitement d'être.

Par exemple, si vous testez quelque chose qui fait une demande Ajax, vous pouvez essayer quelque chose comme ceci (en rubis): P>

# timeout is in seconds
def wait_for_ajax(timeout=x)
 time_limit, interval = (Time.now + timeout), 0.5
 loop do
   break if @driver.execute_script "return jQuery.active == 0"
   sleep interval
   raise "Wait for AJAX timed out after waiting for #{timeout} seconds" if Time.now > time_limit
 end
end


1 commentaires

Si vous voyez attentivement, j'ai déjà utilisé l'attente dans mon code - elem = webdiverwait (pilote, 100). JUNTIL (EC.PRESENCE_OF_ELEMENT_LOCATED ((BY.CLASS_NAME, "Fenêtre de dialogue"))) Mais ça ne fait pas de l'aide.



1
votes

J'avais fait face à un problème similaire et j'ai essayé de rafraîchir la page avant de trouver cet élément, et cela a fonctionné ... XXX

Bien que je ne pouvais pas raisonner comment cela a fonctionné. < P> Si cela fonctionne pour vous aussi, s'il vous plaît faites le moi savoir. Je veux juste en apprendre davantage sur cette exception.

Vous pouvez renvoyer cette page pour en savoir plus sur un numéro similaire


1 commentaires

Merci pour l'aide, mais la popup dans laquelle je travaille disparaît lorsque la page est rafraîchie, cela ne m'aidera donc pas. La popup est générée ici en cliquant sur le nombre d'endosseurs d'un utilisateur particulier pour une compétence particulière. Je veux travailler sur cette popup, par conséquent - src = elem.get_attribute ("innerhtml") - je prends HTML pour cela.



0
votes

J'ai eu un problème similaire lors de la tentative d'exécution de JavaScript (ijavascripexecutor). J'ai créé un iwebelement et j'ai passé ça à la JSE et qui a échoué pour moi. Quand j'ai déplacé le pilote.findellement (bySelector) dans mon appel JSE, alors cela a fonctionné. (C # code à venir.)

au lieu de: p> xxx pré>

je devais faire: p>

src = driver.find_element_by_class_name("dialog-window").get_attribute("innerHTML")


0 commentaires