4 votes

Affirmer qu'un élément n'est PAS présent python Selenium

J'utilise selenium python et je cherche un moyen d'affirmer qu'un élément n'est pas présent, quelque chose comme :

assert not driver.find_element_by_xpath("locator").text== "Element Text"

5voto

Andersson Points 31774

Vous pouvez l'utiliser ci-dessous :

assert not len(driver.find_elements_by_xpath("locator"))

L'assertion devrait être acceptée si aucun des éléments correspondant à votre locator ont été trouvés ou AssertionError si au moins 1 trouvé

Notez que si l'élément est généré dynamiquement par un certain JavaScript il pourrait apparaître dans DOM après est exécutée. Dans ce cas, vous pouvez implémenter Attente explicite :

from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC

try:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "locator")))
    not_found = False
except:
    not_found = True

assert not_found

Dans ce cas, nous obtiendrons AssertionError si l'élément est apparu dans le DOM dans les 10 secondes

4voto

andpei Points 400

En supposant que vous utilisiez py.test pour votre vérification assert et vous voulez vérifier le message d'une exception attendue :

import pytest

def test_foo():
    with pytest.raises(Exception) as excinfo:
        x = driver.find_element_by_xpath("locator").text
    assert excinfo.value.message == 'Unable to locate element'

3voto

Carl Brubaker Points 660

Si vous essayez de vérifier qu'un élément n'existe pas, le moyen le plus simple est d'utiliser une instruction with.

from selenium.common.exceptions import NoSuchElementException

def test_element_does_not_exist(self):
    with self.assertRaises(NoSuchElementException):
        browser.find_element_by_xpath("locator")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X