Todos, necesito algunos ejemplos serios “tontos” de cómo escribir código en Python que hará algo si hay un elemento allí o no. Soy nuevo en progtwigción y he revisado un día de publicaciones y parece que no puedo resolverlo …
Esto es lo que estoy tratando de hacer.
from selenium.common.exceptions import NoSuchElementException, staleElementReferenceException elem = driver.find_element_by_partial_link_text('Create Activity') print("Searching for Create Activity.") if elem.is_displayed(): elem.click() # this will click the element if it is there print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") else: print ("NO LINK FOUND")
Por lo tanto, siempre que exista un ENLACE presente que sea element_by_partial_link_text (‘Crear actividad’)
Obtengo la respuesta correcta … Buscando Crear actividad. ENCONTRADO EL ENLACE CREAR ACTIVIDAD! ¡Y lo pinché!
Mi problema es cuando NO hay un enlace que element_by_partial_link_text('Create Activity')
No entiendo lo que esperaría que estuviera en mi otra statement. print ("NO LINK FOUND")
Yo obtengo …
Seguimiento (última llamada más reciente): Archivo “”, línea 1, en Archivo “C: \ Archivos de progtwig (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, línea 341 , en find_element_by_partial_link_text devuelva self.find_element (by = By.PARTIAL_LINK_TEXT, value = link_text) Archivo “C: \ Program Files (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, línea 745, en find_element {‘using’: by, ‘value’: value}) [‘value’] Archivo “C: \ Archivos de progtwig (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py “, línea 236, ejecute self.error_handler.check_response (respuesta) Archivo” C: \ Archivos de progtwig (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py ” , línea 194, en check_response raise exception_class (message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Mensaje: no hay tal elemento: No se puede ubicar el elemento: {“method”: “texto de enlace parcial”, “selector parcial”: ” Crear actividad “}
¿Cómo obtengo selenium dentro de Python
para activar esta excepción o error para no detener mi script y simplemente procesar la statement ELSE
?
Gracias,
Puedes atrapar la excepción y actuar en consecuencia:
try: elem = driver.find_element_by_partial_link_text('Create Activity') if elem.is_displayed(): elem.click() # this will click the element if it is there print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") except NoSuchElementException: print("...")
Además, probablemente modificaría la prueba para asegurarme de que el elemento sea realmente “seleccionable”:
if elem.is_displayed() and elem.is_enabled():
find_element
devuelve un elemento o lanza NoSuchElementException
, así que para determinar la mejor forma de determinar si el elemento está presente con una condición, debe intentar usar find_elements
lugar de capturar una excepción porque devuelve una lista de WebElement
o una lista vacía, así que simplemente verifique su longitud como sigue: –
elems = driver.find_elements_by_partial_link_text('Create Activity') if len(elems) > 0 and elems[0].is_displayed(): elems[0].click() print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") else: print ("NO LINK FOUND")
Incluso más simple que try / except es simplemente usar find_elements (). Si no está presente, devolverá la lista vacía. Si no está vacío, tintineo de primero encontrado: encontrado [0] .click ()