es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Selenium send keys envía el texto dos veces incluso después de limpiar.

Estoy intentando iniciar sesión en una aplicación y por lo tanto tratando de enviar el nombre de usuario y la contraseña. Pasos que estoy siguiendo:
1. Identifico el campo/ espero a que el elemento se pueda hacer clic
2. Elimino cualquier valor existente en el campo
3. enviar_claves (texto)
4. esperar 1 segundo para volver a hacer la operación para el siguiente campo

Resultado actual:
1. El campo está identificado
2. El nombre de usuario se ingresa completamente (asumamos que es ‘abc@gmail.com’)
3. En una fracción de segundo, el valor se borra y solo se vuelve a ingresar el primer carácter del texto (‘a’) y pasa al siguiente campo de la contraseña. Esto solo sucede en el campo del nombre de usuario.

Mi código:

“`python
intento:
WebDriverWait(self.driver, 5).hasta(EC.element<em>ser<em>hacer clic(locator))
elemento = self.driver.find</em>elemento(*locator)

except NoSuchElementException:
log.error("Elemento no encontrado {0}".format(locator))
pytest.fail(
"No se puede encontrar el elemento. Por favor, verifique el localizador {0}".format(locator))

except Exception como error:
log.error("error de excepción desconocida {0}".format(error))
raise

si el texto es nulo o texto == "":
log.error("La función Type no puede aceptar valores NULL para ingresar para el elemento {0}".format(
locator))
raise TypeError(
"La función Type no puede aceptar valores NULL para ingresar para el elemento {0}".format(
locator))
de lo contrario:
elemento.clear()
elemento.send_keys(texto)
tiempo.sleep(1)
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que está experimentando un problema al enviar el nombre de usuario al formulario de inicio de sesión. Aquí hay algunas cosas que puede intentar para resolver este problema:

    1. Usando Esperas Explícitas – Como ya está utilizando WebDriverWait, puede intentar aumentar el tiempo de espera para ver si ayuda. También puede agregar una Condición Esperada de visibility_of_element_located antes de element_to_be_clickable para asegurarse de que el elemento esté completamente cargado antes de intentar hacer clic en él.

    2. Desactivando JavaScript – A veces, JavaScript en el sitio web puede interferir con el envío de texto al formulario de inicio de sesión. Puede intentar desactivar JavaScript y ver si resuelve el problema.

    3. Usando diferentes métodos de entrada – También puede intentar utilizar diferentes métodos de entrada como ActionChains para simular pulsaciones de teclas en lugar de utilizar send_keys. Esto puede ayudar en casos en los que send_keys no esté funcionando como se espera.

    4. Verificando los atributos del campo – Es posible que los atributos del campo cambien dinámicamente, lo que cause problemas para identificar el elemento correcto. Puede intentar imprimir los atributos del elemento antes de enviar las teclas para asegurarse de que está enviando texto al campo correcto.

    Aquí hay una versión actualizada de su código que incorpora algunas de estas sugerencias:

    try:
        WebDriverWait(self.driver, 5).until(EC.visibility_of_element_located(locator))
        element = self.driver.find_element(*locator)
    
    except NoSuchElementException:
        log.error("Elemento no encontrado {0}".format(locator))
        pytest.fail(
            "No se pudo encontrar el elemento. Por favor, compruebe el localizador {0}".format(locator))
    
    except Exception as error:
        log.error("Error de excepción desconocido {0}".format(error))
        raise
    
    if text is None or text == "":
        log.error(
            "La función Type no puede aceptar valor NULL para ingresar en el elemento {0}".format(
                locator))
        raise TypeError(
            "La función Type no puede aceptar valor NULL para ingresar en el elemento {0}".format(
                locator))
    else:
        element.clear()
        element.send_keys(text)
    
        # Método alternativo: descomente las líneas a continuación para probarlo
        # action = ActionChains(self.driver)
        # action.send_keys(text).perform()
    
        time.sleep(1)
    

    ¡Espero que esto ayude! Avíseme si tiene alguna pregunta adicional.

Comments are closed.