search
CursosEmpresasBlogLiveConfPrecios
Curso de Introducción a Selenium con Python

Manejar alert y pop-up

Curso de Introducción a Selenium con Python

Contenido del curso

Conocer el ecosistema de Selenium

  • 1
    Por qué aprender Selenium y qué verás

    Por qué aprender Selenium y qué verás

    03:15 min
  • 2
    Historia de Selenium

    Historia de Selenium

    09:05 min
  • 3
    Otras herramientas de testing y automatización

    Otras herramientas de testing y automatización

    03:40 min

Preparar entorno de trabajo

  • 4
    Configurar entorno de trabajo

    Configurar entorno de trabajo

    01:43 min
  • 5
    Compatibilidad con Python 3.9 y aprendiendo a utilizar múltiples versiones

    Compatibilidad con Python 3.9 y aprendiendo a utilizar múltiples versiones

    01:44 min
  • 6
    ¡Hola, mundo!

    ¡Hola, mundo!

    11:51 min

Utilizar comandos básicos

  • 7
    Encontrar elementos con find_element

    Encontrar elementos con find_element

    15:23 min
  • 8
    Preparar assertions y test suites

    Preparar assertions y test suites

    13:50 min
  • 9
    Entender las clases WebDriver y WebElement

    Entender las clases WebDriver y WebElement

    01:18 min

Interactuar con elementos

  • 10
    Manejar form, textbox, checkbox y radio button

    Manejar form, textbox, checkbox y radio button

    13:37 min
  • 11
    Manejar dropdown y listas

    Manejar dropdown y listas

    07:42 min
  • 12
    Manejar alert y pop-up

    Manejar alert y pop-up

    Viendo ahora
  • 13
    Automatizar navegación

    Automatizar navegación

    03:54 min

Sincronizar pruebas

  • 14
    Demora implícita y explícita

    Demora implícita y explícita

    08:38 min
  • 15
    Condicionales esperadas

    Condicionales esperadas

    00:44 min

Retos

  • 16
    Agregar y eliminar elementos

    Agregar y eliminar elementos

    09:16 min
  • 17
    Elementos dinámicos

    Elementos dinámicos

    06:46 min
  • 18
    Controles dinámicos

    Controles dinámicos

    08:01 min
  • 19
    Typos

    Typos

    05:43 min
  • 20
    Ordenar tablas

    Ordenar tablas

    07:12 min

Metodologías de Trabajo

  • 21
    Data Driven Testing (DDT)

    Data Driven Testing (DDT)

    13:35 min
  • 22
    Page Object Model (POM)

    Page Object Model (POM)

    10:35 min

Cierre del curso

  • 23
    Realizar una prueba técnica

    Realizar una prueba técnica

    11:33 min
  • 24
    Conclusiones

    Conclusiones

    01:43 min
schoolTomar examen

Manejar alert y pop-up

Platzi DayPlatzi Day

Todos los cursos GRATIS

Se acaba en:
02díasd:09hrsh:40minm:02segs

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

Comentarios49

Enrique Uzcategui

Enrique Uzcategui

Estudiante
Hace 5 años
    Ismael Danilo Herrera Sánchez

    Ismael Danilo Herrera Sánchez

    Estudiante
    Hace 5 años
    estefany Liza

    estefany Liza

    Estudiante
    Hace 5 años
Korpi delfin

Korpi delfin

Estudiante
Hace 6 años
    Fredy Mendoza Vargas

    Fredy Mendoza Vargas

    Estudiante
    Hace 6 años
    Cristian David Restrepo Marin

    Cristian David Restrepo Marin

    Estudiante
    Hace 5 años
Steven Moreno

Steven Moreno

Estudiante
Hace 6 años
    Victor Luis Landaeta Jimenez

    Victor Luis Landaeta Jimenez

    Estudiante
    Hace 6 años
    Junior Erny Aguayo Cuadros

    Junior Erny Aguayo Cuadros

    Estudiante
    Hace 6 años
Alan German Gutiérrez

Alan German Gutiérrez

Estudiante
Hace 5 años
    Daniel Ignacio González Cañete

    Daniel Ignacio González Cañete

    Estudiante
    Hace 4 años
estefany Liza

estefany Liza

Estudiante
Hace 5 años
    Jesús Enrique Morocoima Marcano

    Jesús Enrique Morocoima Marcano

    Estudiante
    Hace 4 años
    Jesús Enrique Morocoima Marcano

    Jesús Enrique Morocoima Marcano

    Estudiante
    Hace 4 años
David Diaz

David Diaz

Estudiante
Hace 4 años
    Humberto Adrián Hernández Maldonado

    Humberto Adrián Hernández Maldonado

    Estudiante
    Hace 4 años
    David Diaz

    David Diaz

    Estudiante
    Hace 4 años
Royer Guerrero Pinilla

Royer Guerrero Pinilla

Estudiante
Hace 6 años
    Héctor Daniel Vega Quiñones

    Héctor Daniel Vega Quiñones

    Profesor
    Hace 6 años
Matias Gabriel Pierri

Matias Gabriel Pierri

Estudiante
Hace 6 años
    Alberto Coronado

    Alberto Coronado

    Estudiante
    Hace 5 años
Randhal Smith Ramirez Orozco

Randhal Smith Ramirez Orozco

Estudiante
Hace 4 años
Jesús Velázquez Jiménez

Jesús Velázquez Jiménez

Estudiante
Hace 5 años
Flavio Abat Carrola Reta

Flavio Abat Carrola Reta

Estudiante
Hace 4 años
Jose Antonio Rojas Ollarves

Jose Antonio Rojas Ollarves

Estudiante
Hace 5 años
Edward Chapula Alcaraz

Edward Chapula Alcaraz

Estudiante
Hace 5 años
    Jorge Salinas

    Jorge Salinas

    Estudiante
    Hace 5 años
David Andrés Valero Vanegas

David Andrés Valero Vanegas

Estudiante
Hace 6 años
    Jose Antonio Rojas Ollarves

    Jose Antonio Rojas Ollarves

    Estudiante
    Hace 5 años
    Jose Gabriel Zaragoza

    Jose Gabriel Zaragoza

    Estudiante
    Hace 5 años
Carlos Andres Ocampo Pabon

Carlos Andres Ocampo Pabon

Estudiante
Hace 6 años
    Julio César Zaravia Paredes

    Julio César Zaravia Paredes

    Estudiante
    Hace 6 años
Jhonatan David Ibarra Lavado

Jhonatan David Ibarra Lavado

Estudiante
Hace 6 años
Marlon Ramirez

Marlon Ramirez

Estudiante
Hace 4 años
Wilson Gustavo Chango Sailema

Wilson Gustavo Chango Sailema

Estudiante
Hace 4 años
Eduardo Jimenez

Eduardo Jimenez

Estudiante
Hace 4 años
    Angel Hernandez

    Angel Hernandez

    Estudiante
    Hace 4 años
Bruno Marcelo Lara Sainz

Bruno Marcelo Lara Sainz

Estudiante
Hace 5 años

Si a alguno le sale este error "AttributeError: 'WebDriver' object has no attribute 'switch_to_alert" como a mí, la solución es esta:

#Reemplazar esto alert = driver.switch_to_alert() #Por esto alert = driver.switch_to.alert

Gracias bro

Gracias Enrique me funciono tu solución! Gran dato

import unittest from selenium import webdriver class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path = r'.\chromedriver.exe') driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("http://demo-store.seleniumacademy.com/") def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element_by_name('q') #como buena práctica se recomienda limpiar los campos search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element_by_class_name('link-compare').click() driver.find_element_by_link_text('Clear All').click() #creamos una variable para interactuar con el pop-up alert = driver.switch_to_alert() #vamos a extraer el texto que muestra alert_text = alert.text #vamos a verificar el texto de la alerta self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alert.accept() def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2)

Muchas gracias!

gracias por el aporte

Hola mi IDE (PyCharm) Me muestra que la función 'switch_to_alert()' está deprecada. Como alternativa, me dice que use 'switch_to.alert'. Es una advertencia funciona aún de las dos formas.

Adicionalmente, estoy usando el driver para firefox y me salía un error en la línea 21. 'could not be scrolled into view'. Busqué en stackoverflow y tuve que hacer un cambio, agregando librerías adicionales para hacer funcionar dicha línea. Línea 21:

WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, "link-compare"))).click()

Librerias:

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

Hola, a mi también me apareció el mismo warning. Pero cambie a driver.switch_to.alert tal como indica y todo me funcionó perfectamente, sin necesidad de importar más librerias.

Saludos!!

Hola que raro, a mi me salió el mismo error en el pycharm pero solo cambie la función a switch_to.alert y trabajo sin problemas

Al ejecutar el código del ejemplo me arrojaba el error:

AttributeError: 'WebDriver' object has no attribute 'switch_to_alert'

Lo solucioné reemplazando

alert = driver.switch_to_alert() por alert = driver.switch_to.alert

Saludos.

gracias, tuve el mismo error!

Codigo fuenre

Cambie este codigo #alert = driver.switch_to_alert() Por alert = driver.switch_to.alert
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.support import select from selenium.webdriver.support.ui import Select class Alerts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome("D:\webdriver-chrome/chromedriver.exe") driver = self.driver driver.implicitly_wait(50) driver.maximize_window() driver.get('http://demo-store.seleniumacademy.com/') def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element_by_class_name('link-compare').click() driver.find_element_by_link_text('Clear All').click() #alert = driver.switch_to_alert() alert = driver.switch_to.alert alert_text = alert.text self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alert.accept def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity=2,testRunner=HTMLTestRunner(output="reportes", report_name="prueba_asssert"))

Super Me Sirvio Mucho... Gracias

Super.. Gracias Por este nuevo aporte

Las cosas han cambiado un poquito para el día de hoy 8 de Agosto, 2022. Así que les comparto mi código por si les sirve de guía:

import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("NoAceptaElWebsite") def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element(By.NAME, 'q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element(By.CLASS_NAME, 'link-compare').click() driver.find_element(By.LINK_TEXT, 'Clear All').click() alert = driver.switch_to.alert alert_text = alert.text self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alert.accept() def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2)

#HappyCoding

Hola David, esta incorrecto tu script, debes respetar la estructura del nombre de las variables (mayúsculas y minúsculas) para que no te mande errores Te comparto tu ejercicio corregido.

import unittest import time from selenium import webdriver class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path = r'C:/Users/Humberto Hernandez M/Dropbox/A Mi carpeta HH/2 Desarrollos Cursos/29 Selenium/chromedriver.exe') driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("demo-store.seleniumacademy.com/") def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element_by_class_name('link-compare').click() driver.find_element_by_link_text('Clear All').click() # Cambio de focus al alert alert = driver.switch_to.alert #extraer el texto del alert alert_text = alert.text #verificar si el texto del alert es el que esperamos time.sleep(15) self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) # dar clic e el noton aceptar alert.accept() time.sleep(15) def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2)

no está mal, amigo o.o pero si te funciona tu método, bienvenido sea 😅

No conocía la funcionalidad de swich_to_alert en fin selemiun tiene infinidad de cosas super útiles, un buen debug para ver que es lo que hace o en donde falla es import pdb; pdb.set_trace(), ¿se puede hacer swich al sistema de ficheros para seccionar un archivo?

Sí, es posible hacer referencia a archivos para guardarlos o directorios para descargas. Estas ya son funcionalidades avanzadas de Selenium y merecen la pena otro curso ;)

Estoy teniendo un problema y no termino de entender el error que me da

def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_elements_by_class_name('link-compare').click() driver.find_elements_by_link_text('Clear All').click() alert = driver.switch_to_alert() alert_text = alert.text self.assertEqual('Are you sure you would like to remove all products from your comparison?',alert_text) alert.accept()

Traceback (most recent call last): File "alerts.py", line 21, in test_compare_products_removal_alert driver.find_elements_by_class_name("link-compare").click() AttributeError: 'list' object has no attribute 'click'

Me asegure de copiar exactamente igual la linea de driver.find_elements_by_class_name('link-compare').click() pero sigue dandome ese error. Que significa ¿AttributeError: 'list' object has no attribute 'click'?

me paso casi el mismo error, fue por typo

Para los que quieran elaborar reportes en Python 3.9.13 con Selenium 4.4.3 aqui el codigo.

import unittest from selenium import webdriver from pyunitreport import HTMLTestRunner from selenium.webdriver.common.by import By class Popups(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome(executable_path = 'chromedriver.exe') cls.driver.get('http://demo-store.seleniumacademy.com/') cls.driver.maximize_window() cls.driver.implicitly_wait(15) def test_compare_products_removal_alert(self): search_field = self.driver.find_element(By.NAME, 'q') search_field.clear() search_field.send_keys('tee') search_field.submit() self.driver.find_element(By.CLASS_NAME, 'link-compare').click() self.driver.find_element(By.LINK_TEXT, 'Clear All').click() alert = self.driver.switch_to.alert alert_text = alert.text self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alert.accept() @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reportes', report_name = 'popup-report'))

Son muy interesantes estas funcionalidades

import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(service=Service('./chromedriver')) driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get('http://demo-store.seleniumacademy.com/') def test_compare(self): driver = self.driver search_field = driver.find_element(By.NAME, 'q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element(By.CLASS_NAME, 'link-compare').click() driver.find_element(By.LINK_TEXT, 'Clear All').click() # Change Focus of browser to alert alert = driver.switch_to.alert alert_text = alert.text self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alert.accept() def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == '__main__': unittest.main(verbosity = 2)

Un saludo a todos comparto como solucione el error de; alert = driver.switch_to_alert() alert_text = alert.text()

< # ALERTA # Para interactuar con el alert, haremos un cambio asignado dentro de una variable # con lo cual el cursor dentro del navegador se centrará en el 'alert' : alert = driver.switch_to.alert # Extraeremos el texto de la alerta y lo almacenaremos dentro de un variable: alert_text = alert.text print('ALERTA !!!:', '/n', alert_text)>

Amigos les dejo el codigo, de la clase estoy utilizando "FireFox" por que en Google chrome aveces me bloquea el acceso la pagina, aqui esta el codigo de la clase con comentarios explicados.

import unittest from selenium import webdriver class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox(executable_path= r'./geckodriver.exe') driver = self.driver driver.implicitly_wait(3) driver.maximize_window() driver.get('https://demo-store.seleniumacademy.com/') def test_compare_products_with_alert(self): driver = self.driver search_field = driver.find_element_by_name('q') #Buscar cuadro de busqueda search_field.clear() #Limpiar texto #Ingresar la busqueda search_field.send_keys('tee') #search_field = driver.find_elements_by_class_name('button').click() search_field = driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[4]/form/div[1]/button').click() #search_field.submit()#Enviar #Buscar elemento agregar a lista de comparacion driver.find_element_by_class_name('link-compare').click() #Buscar elemento para eliminar el enlace de la lista driver.find_element_by_link_text('Clear All').click() #Interaccion con elemento alert alert = driver.switch_to_alert() #Cambiar el foco o el cursor al elemento alert alert_text = alert.text#Extraer el texto, para compararlo #assert de comparacion del texto para decidir la accion self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) #Comparacion #Click en el boton aceptar alert.accept() def tearDown(self): driver = self.driver driver.close() if __name__ == "__main__": unittest.main(verbosity= 2)

Hay un problema al usar el alert asi:

alert = driver.switch_to_alert()

solo hay que cambiarlo por

alert = driver.switch_to.alert

Gracias crack. Llevaba rato pesando que pasaba con esa parte.

A mi me funcionó sin los paréntesis del alert():

def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element_by_class_name('link-compare').click() driver.find_element_by_link_text('Clear All').click() alerta = driver.switch_to.alert alert_text = alerta.text self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alerta.accept() time.sleep(5) def tearDown(self): self.driver.quit()

te hace falta el entry point para poder correr la prueba

Me sucedión lo mismo, a mi me salìa ´Alert´ object is not callable, le quité los paréntesis y funcionó perfecto :)

Ya que la clase 'link-compare' se repite en todos los items resultados de 'tee', ¿cómo hace Selenium para reconocer que queríamos seleccionar el primero? o al usar la función 'find_element_by_class_name()' siempre se trae el primer elemento que se encuentre en el HTML y tenga este nombre de clase?

¡Hola!

Efectivamente, el método find_element_by_class_name trae el primer elemento cuya clase coincida con la cadena de texto que has ingresado.

Puedes revisar la lógica de estos métodos en la documentación.

¡Saludos!

esto cada vez me sorprende

Unos de los cambios mas importantes:

alert = driver.switch_to_alert() #Antes alert = driver.switch_to.alert #Ahora
import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from pyunitreport import HTMLTestRunner class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("Link URL") def test_compare_products_removal_alert(self): driver = self.driver search_field = driver.find_element(By.NAME, 'q') search_field.clear() search_field.send_keys('tee') search_field.submit() driver.find_element(By.CLASS_NAME, 'link-compare').click() driver.find_element(By.LINK_TEXT, 'Clear All').click() alert = driver.switch_to.alert alert_text = alert.text self.assertEqual('Are you sure you would like to remove all products from your comparison?', alert_text) alert.accept() def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reports', report_name = 'report_alerts'))

Hola a toda la comunidad de platzi. En mi caso tuve un error muy repetido en lo que seria |

alert = driver.switch_to_alert() #Esto me mostraba un error y decia "object is not callable"
alert = driver.switch_to.alert #El cambio que realice

Sin embargo la pueba se realizaba muy rapido y no supe como integrar los tiempos de espera.

La solucion a esto ultimo fue agregar un paso extra (ejemplo ir al landing page) de esta forma me pude dar cuenta que la accion de acerptar el pop up se realizaba correctamente.

Hola, le metodo que hay que usar es este:

alert = driver._switch_to.alert

los funciones que uno puede realizar con selenium y Python son sorprendentes