Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Manejar form, textbox, checkbox y radio button

10/24
Recursos

Aportes 43

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Hola a todos,
Teniendo en cuenta que es importante que los datos de prueba sean datos “No Reales” quiero compartirles un generador de datos ficticios aleatorios llamado ‘mockaroo’ (https://www.mockaroo.com/) permite quenerar un esquema personalizado de datos y tambien permite crear una API muy facil de consumir para obtener dichos datos, por otro lado algo que hice tambien fue evitar los pasos de los click en la pagina de inicio yendo directamente al form de crear cuenta. Les comparto la API que pude generar y la forma como lo implementé

api_data_mock.py :

import requests
import random


class ApiDataMock:

    response = requests.get(
        'https://my.api.mockaroo.com/create_account_form_selenium_seleniumacademy_platzi.json?key=cbb86130')
    data = response.json()

    i = random.randint(0, 99)

    first_name = data[i]['first_name']
    middle_name = data[i]['middle_name']
    last_name = data[i]['last_name']
    email_address = data[i]['email_address']
    password = data[i]['password']

register_new_user.py:

import unittest
from selenium import webdriver
from api_data_mock import ApiDataMock


class RegisterNewUser(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome(executable_path=r'D:\Selenium\Proyectos\Curso Selenium Platzi\chromedriver.exe')
        driver = self.driver
        driver.implicitly_wait(10)
        driver.maximize_window()
        driver.get('http://demo-store.seleniumacademy.com/customer/account/create/')

    def test_new_user(self):
        driver = self.driver

        self.assertEqual('Create New Customer Account', driver.title)

        first_name = driver.find_element_by_id('firstname')
        middle_name = driver.find_element_by_id('middlename')
        last_name = driver.find_element_by_id('lastname')
        email_address = driver.find_element_by_id('email_address')
        password = driver.find_element_by_id('password')
        confirm_password = driver.find_element_by_id('confirmation')
        news_letter_subscription = driver.find_element_by_id('is_subscribed')
        submit_button = driver.find_element_by_xpath('//*[@id="form-validate"]/div[2]/button/span/span')

        self.assertTrue(first_name.is_enabled()
                        and middle_name.is_enabled()
                        and last_name.is_enabled()
                        and email_address.is_enabled()
                        and password.is_enabled()
                        and confirm_password.is_enabled()
                        and news_letter_subscription.is_enabled()
                        and submit_button.is_enabled())

        first_name.send_keys(ApiDataMock.first_name)
        middle_name.send_keys(ApiDataMock.middle_name)
        last_name.send_keys(ApiDataMock.last_name)
        email_address.send_keys(ApiDataMock.email_address)
        password.send_keys(ApiDataMock.password)
        confirm_password.send_keys(ApiDataMock.password)
        submit_button.click()

    def tearDown(self):
        self.driver.implicitly_wait(5)
        self.driver.close()


if __name__ == '__main__':
    unittest.main(verbosity=2)

Les comparto el código de la clase ya con documentación

import unittest
from selenium import webdriver

class RegisterNewUser(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.onestepcheckout.com/")
	
	def test_new_user(self):
		driver = self.driver
		#le decimos al driver que encuentre la opción de cuenta por su Xpath y le haga click para desplegar el menu
		driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[2]/div/a/span[2]').click()
		#el driver va a buscar el enlace por su texto y haga click
		driver.find_element_by_link_text('Log In').click()
		#creo una variable asociada al botón de crear cuenta
		create_account_button = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div/div[2]/form/div/div[1]/div[2]/a/span/span')
		
		#validamos que el botón esté visible y habilitado
		self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
		create_account_button.click()

		#comprueba que estamos en el sitio de crear cuenta
		self.assertEqual('Create New Customer Account', driver.title)

		#creación de variables con el nombre del selector correspondiente
		first_name = driver.find_element_by_id('firstname')
		last_name = driver.find_element_by_id('lastname')
		email_address = driver.find_element_by_id('email_address')
		password = driver.find_element_by_id('password')
		confirm_password = driver.find_element_by_id('confirmation')
		news_letter_subscription = driver.find_element_by_id('is_subscribed')
		submit_button = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div/div[2]/form/div[2]/button')

		#veremos si los elementos están habilitados
		self.assertTrue(first_name.is_enabled() 
		and last_name.is_enabled()
		and email_address.is_enabled()
		and password.is_enabled()
		and confirm_password.is_enabled()
		and news_letter_subscription.is_enabled()
		and submit_button.is_enabled())

		#mandamos los datos al formulario
		first_name.send_keys('Test')
		last_name.send_keys('Test')
		email_address.send_keys('[email protected]') #sacado de 10-minute mail
		password.send_keys('Test')
		confirm_password.send_keys('Test')
		submit_button.click()

	def tearDown(self):
		self.driver.implicitly_wait(3)
		self.driver.close()

if __name__ == "__main__":
	unittest.main(verbosity = 2)

Esta clase me pareció muy útil y me resulto mas fácil de seguir que la anterior.

Cometí algunos errores, por ejemplo al auto-completar se me fue find_elements y al ejecutar me decía que las listas no contaban con esa opción. Fue bueno porque me sirvió para recordar lo que el profesor ha mencionado de que es distinto element de elements.

Hola,
Me encanta el curso, quiero hacer enfasis en que hay que tener mucho cuidado al momento de llama run elemento con el driver.find_element ya que, en mi caso, ponía driver.find_element[s] y esto me ocasinaba que buscara elementos dentro d euna lista, lo cual no es así para los campos inputs dentro de un formulario.

Me parece interesante esto, ya que me ahorraría mucho tiempo haciendo las pruebas que hago cuando estoy testeando un formulario de creación o modificación.

Tengo una duda, ¿por qué a pesar de que se le pusiera la espera el programa siguió como si nada? digo parece que la espera no se hubiera realizado. O cómo es que funciona ese método?

Hola compas,

Les dejo el link de una libreria para generar datos fake y que puedan usarlos para pruebas:

https://www.kabytes.com/programacion/generador-de-datos-falsos-python/

Buena clase; personalmente estoy realizando las prácticas en docker sin la interfaz del navegador para mantener el entorno aislado del host, y tambien para afianzar los conocimientos en python hice algunos cambios: a las variables las almacené en un diccionario, para luego iterar y realizar las validaciones y envios de valores a cada una de las variables.


import unittest
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

class RegisterNewUser(unittest.TestCase):

    def setUp(self):
        options = webdriver.ChromeOptions()
        options.add_argument('--no-sandbox')
        options.add_argument('--headless')
        options.add_argument('--disable-gpu')
        self.driver = webdriver.Chrome(options=options)
        self.driver.get('http://demo-store.seleniumacademy.com/')

    def tearDow(self):
        self.driver.quit()

    def test_new_user(self):
        driver = self.driver

        try:
             driver.find_element_by_xpath('//*[@id="header"]/div/div[2]/div/a/span[2]').click()
             driver.find_element_by_link_text('Log In').click()

             create_account_button = driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/a')
             self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
             create_account_button.click()
             self.assertEqual('Create New Customer Account', driver.title)

             variables = {
                     "first_name": driver.find_element_by_id('firstname'),
                     "middle_name": driver.find_element_by_id('middlename'),
                     "last_name": driver.find_element_by_id('lastname'),
                     "email_address": driver.find_element_by_id('email_address'),
                     "password": driver.find_element_by_id('password'),
                     "confirm_password": driver.find_element_by_id('confirmation'),
                     "is_subscribed": driver.find_element_by_id('is_subscribed'),
                     "submit_button": driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div/div[2]/form/div[2]/button/span/span')
                     }

             for key, val in variables.items():
                 self.assertTrue(val.is_enabled())

             for key, val in variables.items():
                 if key == 'email_address':
                     val.send_keys('[email protected]')
                     continue
                 if key == 'is_subscribed':
                     continue
                 if key == 'submit_button':
                     val.click()
                     break
                 val.send_keys('Test')

        except NoSuchElementException as ex:
            self.fail(ex.msg)

if __name__ == "__main__":
    unittest.main(verbosity = 2)

Me gusto mucho la clase, esto ya es un poco más práctico en fines de testing

en lugar de usar

driver.explicitly_wait()

yo usé

time.sleep()

Ya que driver.explicitly_wait() no pausa el programa

No entiendo la razon por la cual estas clases tienen tan pocos aportes. Es un tema muy interesante para realizar el curso

Hola a todos, quisiera decirles que el xpath es muy importante en el área del testing y que es una muy buena practica seguir métodos para la construcción de este, ya que si nos basamos unicamente en copiar el que brinda la página por defecto estamos expuestos a cambios y actualizaciones que nos dejan obsoletos nuestros xpath. Si quieren aprender algunas técnica les recomiendo https://www.guru99.com/xpath-selenium.html

😄

Comparto mi código fuente.
Espero pueda ayudar.

import unittest
from pyunitreport import HTMLTestRunner
from selenium import webdriver

class SearchTest(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('https://demo-store.seleniumacademy.com/')

    def test_new_user(self):
        driver = self.driver
        driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[2]/div/a/span[2]').click()
        driver.find_element_by_link_text('Log In').click()

        create_account_buttom = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div/div[2]/form/div/div[1]/div[2]/a')
        self.assertTrue(create_account_buttom.is_displayed() and create_account_buttom.is_enabled())
        create_account_buttom.click()

        self.assertEqual('Create New Customer Account', driver.title)

        first_name = driver.find_element_by_id('firstname')
        middle_name = driver.find_element_by_id('middlename')
        last_name = driver.find_element_by_id('lastname')
        email_address = driver.find_element_by_id('email_address')
        new_letter_suscription = driver.find_element_by_id('is_subscribed')
        password = driver.find_element_by_id('password')
        confirm_password = driver.find_element_by_id('confirmation')
        submit_button = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div/div[2]/form/div[2]/button')

        #Valida que este habilitado
        self.assertTrue(
            first_name.is_enabled()
            and middle_name.is_enabled()
            and last_name.is_enabled()
            and email_address.is_enabled()
            and password.is_enabled()
            and confirm_password.is_enabled()
            and new_letter_suscription.is_enabled()
            and submit_button.is_enabled()
        )

        #Envia datos
        first_name.send_keys('Test')
        middle_name.send_keys('Test')
        last_name.send_keys('Test')
        email_address.send_keys('[email protected]')
        password.send_keys('Test')
        confirm_password.send_keys('Test')
        new_letter_suscription.send_keys('Test')
        submit_button.send_keys('Test')

    def tearDown(self):
        self.driver.quit()


if __name__ == "__main__":
    unittest.main(verbosity=2,testRunner=HTMLTestRunner(output="reportes", report_name="prueba_asssert"))


Uy esto es una maravilla!, voy a programar una rutina para que se diligencia la encuesta de salud por si misma, jajajaja

¿Con solo selenium y python, puedo crear un bots para un juego de navegador?

Hola puede que tengan varios WARNING y para que no se asusten solo actualicen esta version de find_element
(https://stackoverflow.com/a/69875984/11954295)

Me temo que el método implicitly_wait(time_to_wait) no hace pausas en la ejecución, sino que establece un timeout. En la documentación dice lo siguiente: Sets a sticky timeout to implicitly wait for an element to be found,
or a command to complete. This method only needs to be called one time per session. To set the timeout for calls to execute_async_script, see set_script_timeout.

Hola les comparto mis anotaciones 😄

Selenium Notion

este curso se esta poniendo realmente interesante , muchas gracias crei que no me iba a gustar pero me equivoque

Estoy teniendo un problema que no estoy entendiendo porque motivo me lo hace, cuando quiero ingresar a la creación de cuenta con el create_account_button.is_displayed(), me marca un error en la terminal:
Traceback (most recent call last):
File “register_new_user.py”, line 21, in test_new_user
self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
AttributeError: ‘NoneType’ object has no attribute ‘is_displayed’

El código es el siguiente:

import unittest
from selenium import webdriver


class RegisterNewUser(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='./chromedriver')
        driver = self.driver
        driver.implicitly_wait(30)
        driver.maximize_window()
        driver.get('http://demo-store.seleniumacademy.com')

    def test_new_user(self):
        driver = self.driver
        driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[2]/div/a/span[2]').click()
        driver.find_element_by_link_text('Log In').click()

        create_account_button = driver.find_element_by_xpath(
            '//*[@id="login-form"]/div/div[1]/div[2]/a/span/span').click()
        self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
        create_account_button.click()

        self.assertEqual('Create New Customer Account', driver.title)

        first_name = driver.find_element_by_id('firstname')
        middle_name = driver.find_element_by_id('middlename')
        last_name = driver.find_element_by_id('lastname')
        email_address = driver.find_element_by_id('email_address')
        news_letter_subscription = driver.find_element_by_id('is_subscription')
        password = driver.find_element_by_id('password')
        confirm_password = driver.find_element_by_id('confirmation')
        submit_button = driver.find_element_by_xpath('//*[@id="form-validate"]/div[2]/button/span/span')

        self.assertTrue(first_name.is_enabled()
                        and middle_name.is_enabled()
                        and last_name.is_enabled()
                        and email_address.is_enabled()
                        and news_letter_subscription.is_enabled()
                        and password.is_enabled()
                        and confirm_password.is_enabled()
                        and submit_button.is_enabled()
                        )
        first_name.send_keys('Test')
        middle_name.send_keys('Test')
        last_name.send_keys('Test')
        email_address.send_keys('[email protected]')
        password.send_keys('Test')
        confirm_password.send_keys('Test')
        submit_button.click()

    def tearDown(self):
        self.driver.quit()


if __name__ == "__main__":
    unittest.main(verbosity=2)

Pudimos simular un registro de un usuario en la página con el siguiente código:

register_new_user.py:

import unittest
from pyunitreport import HTMLTestRunner
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

class RegisterNewUser(unittest.TestCase):

  @classmethod
  def setUpClass(cls):
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    cls.driver = webdriver.Chrome(executable_path = '/usr/bin/chromedriver' , options=options)
    driver = cls.driver
    driver.get('URLDELAWEB')


  def test_new_user(self):
    driver = self.driver
    driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[2]/div/a/span[2]').click() #Hacemos click en el elemento
    driver.find_element_by_link_text('Log In').click()

    create_account_button = driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/a/span/span')
    self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
    create_account_button.click()

    self.assertEqual('Create New Customer Account' , driver.title) #¿El título de la página web es igual al título del driver?

    #Creamos las variables para encontrar los elementos
    first_name = driver.find_element_by_id('firstname')
    middle_name = driver.find_element_by_id('middlename')
    last_name = driver.find_element_by_id('lastname')
    email_address = driver.find_element_by_id('email_address')
    news_letter_suscription = driver.find_element_by_id('is_subscribed')
    password = driver.find_element_by_id('password') #! No utilizar datos reales por la sensibilidad de los datos
    confirm_password = driver.find_element_by_id('confirmation')
    submit_button = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div/div[2]/form/div[2]/button/span/span')

    #Verificamos que los elementos estén habilitados
    self.assertTrue(first_name.is_enabled()
    and middle_name.is_enabled()
    and last_name.is_enabled()
    and email_address.is_enabled()
    and news_letter_suscription.is_enabled()
    and password.is_enabled()
    and confirm_password.is_enabled()
    and submit_button.is_enabled())

    #Pretendemos llenar los campos
    first_name.send_keys('Test')
    middle_name.send_keys('Test')
    last_name.send_keys('Test')
    email_address.send_keys('[email protected]')
    password.send_keys('Test')
    confirm_password.send_keys('Test')
    news_letter_suscription.click()
    submit_button.click()


  @classmethod
  def tearDownClass(cls):
    cls.driver.quit()


if __name__ == '__main__':
  unittest.main(verbosity = 2)

Les comparto mi codigo con un for para validar que los campos esten habilitados

# Unittest
import unittest

# Selenium
from selenium import webdriver


class RegisterNewUser(unittest.TestCase):
    """Caso de prueba de registrar nuevo usuario"""

    def setUp(self):
        self.driver = webdriver.Chrome(r'C:\Users\santi\Downloads\Descargas Basura\chromedriver.exe')
        driver = self.driver
        driver.implicitly_wait(30)
        driver.maximize_window()
        driver.get('http://magento-demo.lexiconn.com')

    def test_new_user(self):
        driver = self.driver
        driver.find_element_by_xpath('//*[@id="header"]/div/div[2]/a[3]').click()
        driver.find_element_by_link_text('Log In').click()

        create_account_button = driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/a')
        self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
        create_account_button.click()

        self.assertEqual('Create New Customer Account', driver.title)

        first_name = driver.find_element_by_id('firstname')
        last_name = driver.find_element_by_id('lastname')
        email_address = driver.find_element_by_id('email_address')
        password = driver.find_element_by_id('password')
        confirm_password = driver.find_element_by_id('confirmation')
        new_letter_subscription = driver.find_element_by_id('is_subscribed')
        submit_button = driver.find_element_by_xpath('//*[@id="form-validate"]/div[2]/button')
        fields = [
            first_name,
            last_name,
            email_address,
            password,
            confirm_password,
            submit_button,
            new_letter_subscription
        ]
        enabled = []
        for field in fields:
            if field.is_enabled():
                enabled.append(field)
        self.assertEqual(fields, enabled)

        first_name.send_keys('test')
        last_name.send_keys('test')
        email_address.send_keys('[email protected]testingmail.com')
        password.send_keys('Test')
        confirm_password.send_keys('Test')
        submit_button.click()

    def tearDown(self):
        self.driver.implicitly_wait(3)
        self.driver.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)

Tip Puedes utilizar " \ " para hacer un salto de linea en la misma linea de codigo de esta forma:

        self.assertTrue(first_name.is_enabled() and middle_name.is_enabled() and last_name.is_enabled()\
            and email_address.is_enabled() and news_letter_suscription.is_enabled() and password.is_enabled()\
                and confirm_password.is_enabled() and button_register.is_displayed())

Tengo una duda como se cuando utilizar el xpath y el xpahtfull, cual es la diferencia en los datos que voy a recabar y cuando debería o no usarlos?? Saludos y gracias muy interesante el curso y el profesor explica de forma muy clara.

Hola comunidad para los que estan usando: https://demo.onestepcheckout.com/

Tuvé algunos detalles pero lo solucioné así. Espero les sirva 😃

import unittest
from pyunitreport import HTMLTestRunner
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By

class SearchTest(unittest.TestCase):
    #Prepara entorno de la prueba. 
    def setUp(self):
        self.driver = webdriver.Chrome('chromedriver')
        driver = self.driver
        driver.implicitly_wait(30)#Para esperar
        driver.maximize_window()
        driver.get("http://demo.onestepcheckout.com/")

    #Casos de prueba
    def test_new_user(self):
        driver = self.driver
        driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[2]/div/a/span[2]').click()
        driver.find_element_by_xpath('//*[@id="header-account"]/div/ul/li[6]/a').click()


        create_account_button = driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/a/span/span')
        self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled)
        create_account_button.click()

        self.assertEqual('Create New Customer Account', driver.title)

        firstname = driver.find_element_by_id('firstname')
        lastname = driver.find_element_by_id('lastname')
        email_address = driver.find_element_by_id('email_address')
        password = driver.find_element_by_id('password')
        confirm_password = driver.find_element_by_id('confirmation')
        newsletterSuscription = driver.find_element_by_id('is_subscribed')
        submit_buttom = driver.find_element_by_xpath('//*[@id="form-validate"]/div[2]/button/span/span')

        self.assertTrue(firstname.is_enabled() and lastname.is_enabled() and email_address.is_enabled()
        and password.is_enabled() and confirm_password.is_enabled() and newsletterSuscription.is_enabled() and submit_buttom.is_enabled())

        firstname.send_keys('Test')
        lastname.send_keys('Test name')
        email_address.send_keys('[email protected]')
        password.send_keys('Contraseñita123')
        confirm_password.send_keys('Contraseñita123')
        submit_buttom.click()

    #Finalizar
    def tearDow(self):
        self.driver.quit()


if __name__ == "__main__":
    unittest.main(verbosity=2)

me enfrente a un problema con respecto a las practicas y es la rapidez con la que realiza el proceso.

el método, no me funciona.

implicitly_wait

tuve que utilizar el modulo time. y su metodo

time.sleep()

donde este, hace un deley en segundos, un ejemplo claro es entre cada vez que mandas un send_keys, metes un time.sleep(1) y hace el delay de 1 segundo para que inicie el siguiente send_key.

espero que sea de ayuda.

Podemos aplicar en la misma línea en que tratamos de encontrar un elemento, el método click.

esta clase me parece muy util y mejor explicada

profe, en la próxima podrimos ir testeando el código cada vez que damos un paso. por favor.

Para poder seleccionar el Log In, tuve que agregar el método click(), antes al localizar el menú Account, para que se desplegara la lista

codigo de la leccion

import unittest
from selenium import webdriver
from pyunitreport import HTMLTestRunner

class RegiserNewUser(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='./chromedriver')
        driver = self.driver
        driver.implicitly_wait(30)
        driver.maximize_window()
        driver.get('https://demo-store.seleniumacademy.com/')
    
    def test_new_user(self):
        driver = self.driver
        driver.find_element_by_xpath('//*[@id="header"]/div/div[2]/div/a/span[2]').click()
        driver.find_element_by_link_text('Log in').click()

        create_account_button = driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/a/span/span')
        self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
        create_account_button.click()

        self.assertEqual('Create New Customer Account', driver.title)

        first_name = driver.find_element_by_id('firstname')
        middle_name = driver.find_element_by_id('middlename')
        last_name = driver.find_element_by_id('lastname')
        email_address = driver.find_element_by_id('email_address')
        news_letter_subscription = driver.find_element_by_id('is_subscribed')
        password = driver.find_element_by_id('password')
        confirm_password = driver.find_element_by_id('confirmation')
        submit_button = driver.find_element_by_id('//*[@id="form-validate"]/div[2]/button/span/span')

        self.assertTrue(
        first_name.is_enabled()
        and middle_name.is_enabled()
        and last_name.is_enabled()
        and email_address.is_enabled()
        and news_letter_subscription.is_enabled()
        and password.is_enabled()
        and confirm_password.is_enabled()
        and submit_button.is_enabled()
        )

        first_name.send_keys('Test')
        middle_name.send_keys('Test')
        last_name.send_keys('Test')
        email_address.send_keys('Test')
        news_letter_subscription.send_keys('Test')
        password.send_keys('Test')
        confirm_password.send_keys('Test')
        submit_button.click()

    def tearDown(self):
        self.driver.implicitly_wait(30).quit()


if __name__ == '__main__':
    unittest.main(verbosity=2, testRunner= HTMLTestRunner(output= 'reports', report_name= 'hello-world-report'))

Algunas páginas de prueba para prácticar Selenium

https://www.federico-toledo.com/sitios-de-prueba-para-practicar/

para hacer assertions y confirmar si un elemento está habilitado o tiene el valor esperado, es adecuado instanciar nuestros comandos con el navegador, luego si solo necesitamos hacer algo diferente, es simplemente dar la orden y sha.

Siempre nuestros métodos deben indicar que son un test para que el test runner los detecte.

tengo un problema el cual no consigo resolver a ver leo mi codigo una y otra vez y no consigo el porque no me funciona
de hecho mi consola corre el programa mas sin embargo no se ejecuta ningun codigo he verificado todo y no consigo el error 😦 quien me ayuda thx

ojo con copiar tal cual el codigo porque middle name, ya no se encuentra para crear la cuenta somo first y last , excelente clase genial 😄

entendido

saludos, aqui dejo mi aporte, queeria practicar el uso de list y dicts comprehensivos: asi que his un código un tanto mas corto

import unittest
from pyunitreport import HTMLTestRunner
from selenium import webdriver

class RegisterNestedw(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='./chromedriver')
        driver = self.driver
        driver.implicitly_wait(30)
        driver.maximize_window()
        driver.get("https://demo-store.seleniumacademy.com/") #quiten la s en 'https', la coloque porque no me dejaba gacer la publicacion 

    def test_new_user(self):
        driver = self.driver
        account_button = driver.find_element_by_xpath('//*[@id="header"]/div/div[2]/div/a/span[2]')
        account_button.click()

        register_button = driver.find_element_by_xpath('//*[@id="header-account"]/div/ul/li[5]/a')
        self.assertTrue(register_button.is_displayed() and register_button.is_enabled())
        register_button.click()

        self.assertEqual('Create New Customer Account', driver.title)

        form_list = driver.find_element_by_class_name('form-list')
        text_fields=form_list.find_elements_by_tag_name('input')
        field_names = [element.get_attribute('id') for element in text_fields]
        input_elements = {field_name:driver.find_element_by_id(field_name) for field_name in field_names}

        for field_name, element in input_elements.items():
            self.assertTrue(element.is_enabled())

        new_user = {'firstname':'Jhon',
                    'middlename':'Doe',
                    'lastname':'Jhonson',
                    'email_address':'[email protected]gmail.com',
                    'password':'fetch123',
                    'confirmation':'fetch123'}

        for keys, values in new_user.items():
            if keys == 'is_subscribed':
                input_elements[keys].click()
            else:
                input_elements[keys].send_keys(values)

        button = driver.find_element_by_xpath('//*[@id="form-validate"]/div[2]/button')
        button.click()

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

para hacer la prueba mas lenta pueden importar el siguiente código

import unittest, time, re
from time import sleep

y la entre cada linea colocan
sleep(3) # cantidad de segundos

Hola.

Encontré una extensión para VSCode que nos puede facilitar la generación de datos aleatorios. Me pareció muy útil. Espero les pueda ser de ayuda.

Random Everything

Saludos

bueno ya lo implemente en la vida real, con una encuesta diaria de mi empresa ajjaja, genial

Buenas, tengo un problema con las sugerencias.

Empecé codificando y al principio mi IDE, Visual estudio, me ayudaba bastante dado que me colocaba las sugerencias de los métodos que podía realizar. Pero por alguna razón que desconozco dejo de hacer y no he podido hacer que vuelva a funcionar.

Si alguien me pudiera ayudar se lo agradecería mucho:)

En un momento cometí un error al algregar un “.click()” al final de la línea 18 y eso me rompía todo el código dando el siguiente error en la terminal:

======================================================================
ERROR: test_new_user (__main__.RegisterNewUser)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "register_new_user.py", line 19, in test_new_user
    self.assertTrue(create_account_button.is_displayed() and create_account_button.is_enabled())
AttributeError: 'NoneType' object has no attribute 'is_displayed'

----------------------------------------------------------------------
Ran 1 test in 15.885s

FAILED (errors=1)

.Una vez eliminado ese “.click()” se solucionó todo y corrio de 10.

tremenda clase