type - Selenium WebDriver: quiero sobrescribir el valor en el campo en lugar de anexarlo con sendKeys usando Java
sendkeys java (10)
En WebDriver, si uso sendKeys agregará mi cadena al valor que ya existe en el campo. No puedo borrarlo usando el método clear () porque en el momento en que lo hago, la página web arroja un error que dice que debe estar entre 10 y 100. Por lo tanto, no puedo borrarlo o se lanzará un error antes Puedo poner el nuevo valor usando sendKeys, y si sendKeys solo lo agrega al valor que ya existe.
¿Hay algo en WebDriver que te permita sobrescribir el valor en el campo?
Creo que puedes intentar seleccionar primero todo el texto en el campo y luego enviar la nueva secuencia:
from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
De acuerdo, es una opinión hace días ... En mi caso actual, la respuesta de ZloiAdun no me funciona, pero me acerca mucho a mi solución ...
En lugar de:
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
el siguiente código me hace feliz:
element.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),"55");
¡Así que espero que eso ayude a alguien!
En caso de que ayude a alguien, el equivalente de C # de la respuesta de ZloiAdun es:
element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
Esto funcionó para mí.
mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
Esto resolvió mi problema cuando tuve que lidiar con una página HTML con JavaScript incorporado
WebElement empSalary = driver.findElement(By.xpath(PayComponentAmount));
Actions mouse2 = new Actions(driver);
mouse2.clickAndHold(empSalary).sendKeys(Keys.chord(Keys.CONTROL, "a"), "1234").build().perform();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].onchange()", empSalary);
La pregunta original dice clear () no se puede usar. Esto no se aplica a esa situación. Estoy agregando mi ejemplo de trabajo aquí ya que esta publicación SO fue uno de los primeros resultados de Google para borrar una entrada antes de ingresar un valor.
Para la entrada donde no hay restricción adicional, incluyo un método de navegador independiente para Selenium usando NodeJS. Este fragmento es parte de una biblioteca común que importo con var test = require (''common''); en mis scripts de prueba. Es para una definición estándar del módulo node.exports.
when_id_exists_type : function( id, value ) {
driver.wait( webdriver.until.elementLocated( webdriver.By.id( id ) ) , 3000 )
.then( function() {
var el = driver.findElement( webdriver.By.id( id ) );
el.click();
el.clear();
el.sendKeys( value );
});
},
Encuentre el elemento, haga clic en él, desactívelo y envíe las claves.
Esta página tiene una muestra de código completo y un artículo que puede ayudar.
También puede borrar el campo antes de enviar las claves.
element.clear()
element.sendKeys("Some text here")
Tuvo problemas al usar la mayoría de los métodos mencionados ya que el campo de texto no aceptó la entrada del teclado y la solución del mouse parece no estar completa.
Esto funcionó para simular un clic en el campo, seleccionando el contenido y reemplazándolo con nuevo.
Actions actionList = new Actions(driver);
actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
release().build().perform();
Use lo siguiente:
driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a",Keys.DELETE),"Your Value");
Utilice esta, es una solución de confianza y funciona bien para todos los navegadores:
protected void clearInput(WebElement webElement) {
// isIE() - just checks is it IE or not - use your own implementation
if (isIE() && "file".equals(webElement.getAttribute("type"))) {
// workaround
// if IE and input''s type is file - do not try to clear it.
// If you send:
// - empty string - it will find file by empty path
// - backspace char - it will process like a non-visible char
// In both cases it will throw a bug.
//
// Just replace it with new value when it is need to.
} else {
// if you have no StringUtils in project, check value still empty yet
while (!StringUtils.isEmpty(webElement.getAttribute("value"))) {
// "/u0008" - is backspace char
webElement.sendKeys("/u0008");
}
}
}
Si la entrada tiene type = "file" - no la borre para IE. Tratará de encontrar el archivo por ruta vacía y arrojará un error.
Más detalles que puedes encontrar en mi blog