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.

El elemento no se puede alcanzar mediante el teclado – Campo de entrada bajo ShadowRoot.

Utilizo el último Chrome y Chromedriver. Tengo un sitio web con elementos DOM y escribiré cualquier texto en un campo de entrada.

Código HTML (disculpas por la captura de pantalla):

<a href="https://i.stack.imgur.com/2aLjh.png"><img src="https://i.stack.imgur.com/2aLjh.png" alt="enter image description here"></a>

Código Python:

“`
def expand_shadow_element(element):
shadow_root = driver.execute_script(‘return arguments[0].shadowRoot.children’, element)
return shadow_root

root1 = driver.find_element_by_id(“UI-tfVorgangsname”)
shadow_root1 = expand_shadow_element(root1)
root2 = shadow_root11.find_element_by_xpath(“//input[@part=’value’]”)
time.sleep(2)
root2.click()
time.sleep(2)
root2.send_keys(‘testssdfs’)

Recibo estos mensajes:

selenium.common.exceptions.ElementNotInteractableException: Message: Element is not reachable by keyboard

Veo que el clic funciona, el cursor está activo en el campo de entrada, pero send_keys no funciona. ¿Tienes alguna idea?

¡Muchas gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en las capturas de pantalla del código HTML y el código Python proporcionados, parece que el problema radica en que la función send_keys no funciona, aunque la función click lo hace y el cursor está activo en el campo de entrada.

    Una posible solución podría ser utilizar la clase ActionChains del módulo selenium.webdriver.common.action_chains para mover primero el cursor al campo de entrada y luego enviar las teclas. Aquí hay un ejemplo de cómo modificar el código Python para usar ActionChains:

    from selenium.webdriver.common.action_chains import ActionChains
    
    #Expandir sombra
    def expand_shadow_element(element):
        shadow_root = driver.execute_script('return arguments[0].shadowRoot.children', element)
        return shadow_root
    
    ...
    
    root1 = driver.find_element_by_id("UI-tf_Vorgangsname")
    shadow_root1 = expand_shadow_element(root1)
    root2 = shadow_root1[1].find_element_by_xpath("//input[@part='value']")
    time.sleep(2)
    ActionChains(driver).move_to_element(root2).click().send_keys('testssdfs').perform()
    

    Este código crea un nuevo objeto ActionChains, mueve el cursor al elemento root2, lo hace clic y luego envía el texto deseado usando send_keys.

    Esperamos que esta solución resuelva el problema con send_keys que no funciona.

Comments are closed.