Comment puis-je créer un Selenium Webdriver test pour vérifier un élément n'est pas présent?
Je suis entrain de créer des tests unitaires pour mon Django app dans Selenium Webdriver.
J'ai un AJAX méthode qui supprime un Sujet à partir de la base de données.
Je suis à essayer de comprendre comment faire pour vérifier que la Rubrique supprimée n'est plus présent sur la page.
Je suis en train d'essayer d'attraper l'Exception qui devrait être généré lorsque Webdriver ne pouvez pas trouver un élément:
le sélénium.commun.des exceptions.NoSuchAttributeException
Au lieu de cela, je vois une erreur:
*** URLError: <urlopen error timed out>
Voici comment j'ai configurer le tests:
from selenium import webdriver
from django.utils import unittest
class TestAuthentication(unittest.TestCase):
scheme = 'http'
host = 'localhost'
port = '4444'
def setUp(self):
self._driver = webdriver.Firefox()
self._driver.implicitly_wait(10)
def login_as_Kallie(self):
# Kallie has manual login
self._driver.get('http://localhost:8000/account/signin/')
user = self._driver.find_element_by_id('id_username')
user.send_keys("Kallie")
password = self._driver.find_element_by_id('id_password')
password.send_keys('*********')
submit = self._driver.find_element_by_id('blogin')
submit.click()
def test_Kallie_can_delete_topic(self):
self.login_as_Kallie()
self._driver.find_element_by_link_text("Topic to delete").click()
self._driver.find_element_by_xpath("/html/body/div/div[4]/div/div/div[2]/div/table/tbody/tr/td[2]/div/div[3]/span[5]/a").click()
self._driver.find_element_by_class_name('dialog-yes').click()
self._driver.get("http://localhost:8000/questions/")
# this is the Python exception to catch: selenium.common.exceptions.NoSuchAttributeException
self.assertRaises('selenium.common.exceptions.NoSuchAttributeException', self._driver.find_element_by_link_text("Topic to delete"))
def tearDown(self):
self._driver.quit()
Comment puis-je vérifier qu'un Élément de la page est absent?
OriginalL'auteur BryanWheelock | 2012-02-01
Vous devez vous connecter pour publier un commentaire.
Sauf que ne fonctionne pas, car si rien n'est trouvé,
sera de retour une NoSuchElementException qui est probablement le Java équivalent de l'exception que vous voyez.
Pas sûr à propos de Python, mais en Java, ce serait mieux
ou dans le sens inverse
http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElement(org.openqa.selenium.By)
OriginalL'auteur el roso
OriginalL'auteur mynameistechno
Vous êtes capture incorrect exception. Lorsque l'élément n'est pas trouvé, il soulève
NoSuchElementException
OriginalL'auteur p0deje
puisque l'élément est supprimé par un appel AJAX, je voudrais vérifier qu'il sorte:
Cela fera webdriver attendre 10 secondes jusqu'à ce que l'élément n'est PAS là. Vous pouvez augmenter le délai d'attente de plus de 10 secondes, si vous le souhaitez.
OriginalL'auteur Rafael
En Java ce qui a fonctionné pour moi a été:
OriginalL'auteur Piotr Kuczynski
ou vous pouvez simplement faire
Cela fonctionne parce que si vous find_elementSSSSSSSSS_by_XXXX (les éléments de S, et xxxx = nom de,nom de balise,xpath,association) et il n'y a rien, elle retourne une liste vide.
OriginalL'auteur TehTris
En Java que vous allez faire:
OriginalL'auteur Max
Votre code ressemble à cela pourrait être Python. Depuis votre sujet semble être de type LINK_TEXT, quelque chose comme cela devrait fonctionner:
Si c'est d'un autre type (XPATH), vous pouvez utiliser la même méthode, mais en remplaçant le nom de le texte du lien avec l'emplacement de l'élément sur la page.
OriginalL'auteur rwbyrd
Je pense que ce qu'on peut définir pour détecter l'élément visible pour django seulement
OriginalL'auteur Aditya Kresna Permana
Ajout très tard parce que la plupart des réponses déjà ici semblent être pour java. La question est pour python. De nombreux python réponses sont syntaxiquement incorrect. La forme correcte impliquerait:
Cette dernière ligne est fondamentalement la OPs code original, mais ré-écrite de manière à s'assurer que l'affirmation serait exécuté sans lancer une exception.
OriginalL'auteur e4c5