Borrar texto de textarea con selenium

5 minutos de lectura

avatar de usuario
isaac

Tengo algunas pruebas en las que verifico que aparezca el mensaje de error correcto cuando el texto en ciertos campos no es válido. Una verificación de validez es que cierto elemento de área de texto no esté vacío.

Si esta área de texto ya tiene texto, ¿cómo puedo decirle a Selenium que borre el campo?

algo como:

driver.get_element_by_id('foo').clear_field()

  • Lo encontré driver.get_element_by_id(‘foo’).clear()

    – isaac

    11/10/2011 a las 20:35


  • 9 años después, y todavía es sorprendentemente común usar lo obvio input_field.clear y tenerlo… no clear la input_field. Sin una buena razón. San Isidoro ayúdanos.

    – phtrivier

    17 de febrero de 2021 a las 17:24


avatar de usuario
isaac

driver.find_element_by_id('foo').clear()

  • Esto no me funciona en la versión más reciente de Selenium.

    – Unión de encontrar

    29 de septiembre de 2014 a las 0:51

  • youp chromedriver también se rompe en este. La respuesta de Fenix ​​funciona en todas partes

    – norbertas.gaulia

    08/09/2015 a las 18:10

  • Puede ser un problema con las versiones conflictivas de selenium y chromedriver. Parece poco probable que los desarrolladores eliminen esta funcionalidad de Chromedriver deliberadamente.

    – isaac

    12/09/2015 a las 15:25

  • Por el momento, esta respuesta no funciona correctamente en las aplicaciones React, ya que está claro que no hará que se active la función React onChange. Por lo tanto, su entrada se borrará y las pruebas continuarán y el estado de su componente permanecerá como estaba antes. problema de reacción, problema de selenio

    – ncrmro

    24 de abril de 2017 a las 12:49


  • @ncrmro 3 años después, parece que esto todavía no funciona

    – huella

    3 abr 2020 a las 15:44

avatar de usuario
Fénix

Opción a)

Si desea asegurarse de que se activen los eventos del teclado, considere usar sendKeys(CharSequence).

Ejemplo 1:

 from selenium.webdriver.common.keys import Keys
 # ...
 webElement.sendKeys(Keys.CONTROL + "a")
 webElement.sendKeys(Keys.DELETE)

Ejemplo 2:

 from selenium.webdriver.common.keys import Keys
 # ...
 webElement.sendKeys(Keys.BACK_SPACE)  //do repeatedly, e.g. in while loop

elemento web

Hay muchas formas de obtener el WebElement requerido, por ejemplo:

  • controlador.find_element_by_id
  • controlador.find_element_by_xpath
  • conductor.find_element

Opción b)

 webElement.clear()

Si este elemento es un elemento de entrada de texto, esto borrará el valor.

Tenga en cuenta que los eventos activados por este evento pueden no ser los esperados. En particular, no disparamos ningún evento de teclado o mouse.

  • Cuando use CTRL+’a’, considere la situación en la que la prueba se ejecutará en MacOS (otros métodos abreviados de teclado). Por cierto, buena sugerencia, resolvió mi problema.

    – Caja_fuera

    15 de enero de 2018 a las 11:17


  • Mi problema resuelto por “Keys.BACK_SPACE”. Solo capturo el campo de prueba de búsqueda, ejecuto .click() y luego dentro de un ciclo for ejecuto el código. elimina todos los fletadores que tenía el campo de búsqueda anteriormente. luego envíe un nuevo valor al campo de búsqueda. Simplemente la función .clear() no funcionaba para mí.

    – Noman_ibrahim

    20 de junio de 2019 a las 7:45

  • solo ayudó webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop en mi extraño caso

    – Chaki_Black

    27 sep 2019 a las 16:20

  • from selenium.webdriver.common.keys import Keys solo para facilitar las cosas a los recién llegados.

    – Burak Kaymakci

    9 sep 2020 a las 15:27

  • Enviando Keys.CONTROL + 'a' funcionó para mí hasta ahora, parece que algo ha cambiado en Chrome o en Selenium, por lo que ahora solo envía un carácter ‘a’ a mi text_field que no es deseado. Cambiado a element.clear() y ahora funciona perfectamente con una línea de código en lugar de 2, ¡gracias!

    – Rodikno

    24 de febrero de 2021 a las 14:09

avatar de usuario
Jortega

Me encontré con un campo donde .clear() no funcionó. Usar una combinación de las dos primeras respuestas funcionó para este campo.

from selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a")
driver.find_element_by_id('foo').send_keys(Keys.DELETE)

  • Cuál es el ; para otra vez?

    – huella

    3 abr 2020 a las 15:23

  • @surfer190 ; no es necesario en python. Lo agregué por accidente. Buena atrapada.

    – Jortega

    3 abr 2020 a las 22:53

  • driver.find_element_by_id('foo').send_keys(...) es la misma solución como webElement.send_keys(...) Que driver.find_element_by_id() es una forma de devolver WebElement. Puede usar otra forma de ubicar un elemento.

    – Fénix

    30 de diciembre de 2020 a las 17:50

En la versión más reciente de Selenium, use:

driver.find_element_by_id('foo').clear()

avatar de usuario
m0h17

En mi experiencia, este resultó ser el más eficiente

driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')

Estamos enviando Ctrl + Retroceso para eliminar todos los caracteres de la entrada, también puede reemplazar el retroceso con eliminar.

EDITAR: dependencia de claves eliminada

  • Esto funciona con Python 3.9, la última versión de los navegadores y el último selenio.

    – Arun

    10 de junio a las 12:13

avatar de usuario
gitaoh

Entretenido selenio==3.141.0 y no se porque

WebElement.clear()

no está trabajando.

solía

WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)

Lo cual funcionó perfectamente para mí.

  • Esto funciona con Python 3.9, la última versión de los navegadores y el último selenio.

    – Arun

    10 de junio a las 12:13

avatar de usuario
vaibhavcool20

para Java

driver.findelement(By.id('foo').clear();

o

webElement.clear();

Si este elemento es un elemento de entrada de texto, esto borrará el valor.

¿Ha sido útil esta solución?