Este equipo de trabajo ha estado mucho tiempo buscando para darle soluciones a tus dudas, te brindamos la resolución por eso nuestro objetivo es serte de mucha ayuda.
Solución:
a)
from selenium.common.exceptions import NoSuchElementException
def check_exists_by_xpath(xpath):
try:
webdriver.find_element_by_xpath(xpath)
except NoSuchElementException:
return False
return True
b) use xpath – el más confiable. Además, puede tomar el xpath como estándar en todos sus scripts y crear funciones como las mencionadas anteriormente para uso universal.
ACTUALIZAR: Escribí la respuesta inicial hace más de 4 años y en ese momento pensé que xpath sería la mejor opción. Ahora recomiendo usar selectores css. Todavía recomiendo no mezclar/usar “por id”, “por nombre”, etc. y usar un solo enfoque en su lugar.
Ninguna de las soluciones proporcionadas me pareció la más fácil, por lo que me gustaría agregarlas a mi manera.
Básicamente, obtiene la lista de elementos en lugar de solo el elemento y luego cuenta los resultados; si es cero, entonces no existe. Ejemplo:
if driver.find_elements_by_css_selector('#element'):
print "Element exists"
Observe la “s” en find_elements_by_css_selector
para asegurarse de que puede ser contable.
EDITAR: Estaba revisando el len(
de la lista, pero recientemente aprendí que una lista vacía es falsa, por lo que no necesita obtener la longitud de la lista en absoluto, dejando un código aún más simple.
Además, otra respuesta dice que usar xpath es más confiable, lo cual simplemente no es true. Consulte ¿Cuál es la diferencia entre css-selector y Xpath? ¿Cuál es mejor (según el rendimiento y para las pruebas de navegador cruzado)?
R) Sí. La forma más fácil de comprobar si existe un elemento es simplemente llamar find_element
dentro de una try/catch
.
B) Sí, siempre trato de identificar elementos sin usar su texto por 2 razones:
- es más probable que el texto cambie y;
- si es importante para usted, no podrá ejecutar sus pruebas en compilaciones localizadas.
solución ya sea:
- Puede usar xpath para encontrar un elemento padre o antepasado que tenga una ID o algún otro identificador único y luego encontrar su hijo/descendiente que coincida con o;
- puede solicitar una identificación o nombre o algún otro identificador único para el enlace en sí.
Para las preguntas de seguimiento, usando try/catch
es cómo puede saber si un elemento existe o no y aquí se pueden encontrar buenos ejemplos de esperas: http://seleniumhq.org/docs/04_webdriver_advanced.html
Te mostramos las comentarios y valoraciones de los lectores
Si haces scroll puedes encontrar las ilustraciones de otros programadores, tú igualmente eres capaz mostrar el tuyo si te apetece.