Comment puis-je obtenir Sélénium Web Chauffeur d'attendre pour qu'un élément soit accessible, et pas seulement présent?

Je suis en train d'écrire des tests pour une application web. Certaines commandes de traction, les boîtes de dialogue qui ont des contrôles qui sont visibles, mais n'est pas disponible pendant quelques instants. (Ils sont grisés, mais webdriver voit encore visible).

Comment puis-je savoir que le Sélénium pour attendre l'élément à fait accessible, et non pas seulement visible?

    try:
        print "about to look for element"
        element = WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_id("createFolderCreateBtn"))
        print "still looking?"
    finally: print 'yowp'

Voici le code que j'ai essayé, mais il "voit" le bouton avant qu'il soit utilisable et essentiellement les frais à droite après la supposée "attendre".

Remarque que je peux farcir une dizaine de seconde de sommeil dans le code au lieu de cela, et le code fonctionne correctement, mais que c'est moche, peu fiables, et inefficace. Mais il n'prouver que le problème est juste que le "clic" de la commande est la course en avant de la disponibilité des contrôles.

  • Pas de doute, il fonctionne correctement. Je suis en train de définir correctement ce qu'il devrait être en attente pour les. Dans ce cas, un élément spécifique, lorsqu'il est disponible, non seulement visible.
  • Ouais, manque de précision de ma part. Je voulais dire mon test chargée la droite passé, lorsque j'ai voulu faire une pause. Faute couché avec moi en tant que programmeur, pas de sélénium comme l'outil.
  • Cette question a sauvé mon travail.
  • Juste une précision: je crois que le comportement par défaut de findElement en Sélénium est également à vérifier pour la visibilité. C'est différent que de vérifier pour la "présence" sur le DOM, ce qui peut renvoyer vrai même lorsque quelque chose n'est pas visible.
InformationsquelleAutor Skip Huffman | 2012-02-06