web-dev-qa-db-fra.com

Assert/VerifyElementPresent avec Python et WebDriver?

Le changement de Selenium à WebDriver et de leur documentation respective me rend perplexe. Dans une section sur la conception des tests dans la documentation, il est question d'utiliser Assert vs Verify tel que AssertElementPresent. Cependant, en parcourant le didacticiel WebDriver et en commençant à configurer des tests, cela ne semble pas être disponible à partir de Python. Est-ce que je néglige quelque chose dans la documentation? N'est-ce pas applicable à WebDriver, à l'utilisation de python, dois-je utiliser les fonctionnalités de python et ne pas assert/verify une commande de Selenium, etc.

19
Dan Roberts

webdriver est une bibliothèque pour piloter les navigateurs. Ce que vous voulez utiliser, ce sont les méthodes * find_element * pour localiser les éléments, puis leur imposer des conditions.

par exemple, ce code fait une assertion sur le contenu d'un élément:

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.example.com')
element = browser.find_element_by_tag_name('h1')
assert element.text == 'Example Domains'
browser.quit()
  • notez que cet exemple est du pur python avec une assertion nue. Il est préférable d’utiliser un framework de test comme python's unittest, qui contient des assertions plus puissantes.
20
Corey Goldberg

Dans Selenium RC, il existe des méthodes de vérification/affirmation. Dans WebDriver, ils ne le font pas. En outre, il est important de noter ce que vérifient et affirment et leur rôle dans vos tests. Dans Selenium RC, verify est utilisé pour vérifier votre test, que ce soit sur du texte, des éléments ou quoi encore. Assert, par contre, fera échouer et arrêter un test. Les avantages et avantages sont décrits dans le lien que vous avez mentionné. 

WebDriver n'a pas de méthode de vérification/affirmation à proprement parler. Les assertions sont effectuées dans le test lui-même. Si vous examinez la réponse de Corey, il effectue une "affirmation" sur le texte d'un élément. Si le texte de l'élément n'est pas "Exemple de domaines", une erreur AssertionError sera générée, ce qui échouera votre test. Mais qu'en est-il d'une vérification? Comme mentionné, WebDriver n'en a pas. Mais vous pouvez toujours effectuer quelque chose d'équivalent en faisant une comparaison.

if element.text != u'Example Domains':
    print "Verify Failed: element text is not %r" % element.text

Donc, dans ce cas, votre test n'échouera pas. Mais une vérification aura toujours lieu et sera imprimée sur stdout.

Donc, au bout du compte, tout dépend de ce que vous voulez échouer. C'est plus une conception de test. J'espère que cela t'aides.

6
kenneth koontz

Vous devriez utiliser la fonction suivante pour vérifier cela:

def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException as e: return False
    return True

Qui est généré par défaut par Selenium IDE lors de l’exportation en code Python.

Ensuite, vous pouvez affirmer l'élément comme ci-dessous:

self.assertTrue(self.is_element_present(By.ID, "footer"))
self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "header.global-header"))

Notez que l'importation suivante est requise pour utiliser By:

from Selenium.webdriver.common.by import By
5
kenorb

Une autre façon est la suivante:

from Selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.testing.com')
element = driver.find_element_by_xpath('xpath of the element').text
assert element == 'Sample Text'
driver.quit()
0
Vipin