Lección 1 de 6 · 2 min
Tu primer script con WebDriver
Setup en 3 comandos
python -m venv .venv && source .venv/bin/activate
pip install selenium pytest
python -c "from selenium import webdriver; webdriver.Chrome().quit()"
Desde Selenium 4.6, Selenium Manager descarga el driver automáticamente — ya no necesitas bajar chromedriver a mano ni pelear con versiones.
El modelo mental
Selenium no "ve" la página: conversa con el navegador por el protocolo WebDriver. Cada find_element es una pregunta al navegador en ese instante. Esto explica el 90% de los errores de novato: preguntar por un elemento antes de que exista.
Primer test real
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_busqueda_en_duckduckgo():
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
try:
driver.get("https://duckduckgo.com")
buscador = wait.until(EC.element_to_be_clickable((By.NAME, "q")))
buscador.send_keys("selenium python")
buscador.submit()
resultados = wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "article"))
)
assert len(resultados) > 0, "La búsqueda no devolvió resultados"
finally:
driver.quit()
Tres cosas para notar desde el día uno:
WebDriverWaitdesde el primer script. No aprendas contime.sleep()"mientras tanto" — los malos hábitos del día 1 son los bugs del mes 6.finally: driver.quit()— si el test falla sin cerrar el navegador, acumulas procesos zombie. (En la lección 3 esto lo resolverá una fixture.)- El assert con mensaje.
assert x, "mensaje"hace que el fallo se explique solo.
Ejecutarlo
pytest test_busqueda.py -v
Ejercicio
Modifica el test para verificar que el primer resultado contiene la palabra "Selenium" en su título. Vas a necesitar resultados[0].text — y descubrirás por qué a veces está vacío (pista: visibilidad vs presencia, lo vemos en la lección 2).