Selenium WebDriver: je veux écraser la valeur dans le champ au lieu de l’append avec sendKeys en utilisant Java

Dans WebDriver, si j’utilise sendKeys, il appenda ma chaîne à la valeur qui existe déjà dans le champ. Je ne peux pas effacer cela en utilisant la méthode clear () car la seconde fois que je le fais, la page Web lancera une erreur en disant qu’elle doit être comprise entre 10 et 100. Je ne peux donc pas l’effacer ou une erreur sera lancée avant Je peux mettre la nouvelle valeur à l’aide de sendKeys, et si j’envoieKeys, elle est simplement ajoutée à la valeur déjà présente.

Y at-il quelque chose dans WebDriver qui vous permet de remplacer la valeur dans le champ?

Je pense que vous pouvez essayer de sélectionner tout le texte dans le champ, puis envoyer la nouvelle séquence:

from selenium.webdriver.common.keys import Keys element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55"); 

Vous pouvez également effacer le champ avant de lui envoyer les clés.

 element.clear() element.sendKeys("Some text here") 

OK, il ya quelques jours de vue … Dans mon cas actuel, la réponse de ZloiAdun ne fonctionne pas pour moi, mais me rapproche de ma solution …

Au lieu de:

 element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55"); 

le code suivant me rend heureux:

 element.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),"55"); 

Alors j’espère que ça aide quelqu’un!

Cela a fonctionné pour moi.

 mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE); 

Au cas où cela aiderait quelqu’un, l’équivalent en C # de la réponse de ZloiAdun est:

 element.SendKeys(Keys.Control + "a"); element.SendKeys("55"); 

Utilisez celui-ci, c’est une solution de confiance et fonctionne bien pour tous les navigateurs:

 protected void clearInput(WebElement webElement) { // isIE() - just checks is it IE or not - use your own implementation if (isIE() && "file".equals(webElement.getAtsortingbute("type"))) { // workaround // if IE and input's type is file - do not try to clear it. // If you send: // - empty ssortingng - 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 SsortingngUtils in project, check value still empty yet while (!SsortingngUtils.isEmpty(webElement.getAtsortingbute("value"))) { // "\u0008" - is backspace char webElement.sendKeys("\u0008"); } } } 

Si input a type = “file” – ne le videz pas pour IE. Il essaiera de trouver le fichier par chemin vide et lancera un bogue.

Plus de détails que vous pourriez trouver sur mon blog

Utilisez le suivant:

 driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a",Keys.DELETE),"Your Value"); 

Cela a résolu mon problème quand je devais gérer une page HTML avec JavaScript incorporé

 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); 

Les problèmes rencontrés en utilisant la plupart des méthodes mentionnées car Textfield n’avait pas accepté les entrées au clavier et la solution de la souris semblait incomplète.

Cela a fonctionné pour simuler un clic dans le champ, en sélectionnant le contenu et en le remplaçant par nouveau.

  Actions actionList = new Actions(driver); actionList.clickAndHold(WebElement).sendKeys(newTextFieldSsortingng). release().build().perform(); 

La question d’origine indique que clear () ne peut pas être utilisé. Cela ne s’applique pas à cette situation. J’ajoute mon exemple de travail ici, car cette publication SO était l’un des premiers résultats de Google à effacer une entrée avant d’entrer une valeur.

Pour les entrées où il n’y a pas de ressortingction supplémentaire, j’inclus une méthode indépendante du navigateur pour Selenium utilisant NodeJS. Cet extrait fait partie d’une bibliothèque commune que j’importe avec var test = require (‘common’); dans mes scripts de test. C’est pour une définition standard de module.exports de noeud.

  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 ); }); }, 

Trouvez l’élément, cliquez dessus, effacez-le, puis envoyez les clés.

Cette page contient un exemple de code complet et un article pouvant vous aider.

C’est quelque chose de facile à faire et ça a fonctionné pour moi:

 //Create a Javascript executor JavascriptExecutor jst= (JavascriptExecutor) driver; jst.executeScript("arguments[1].value = arguments[0]; ", 55, driver.findElement(By.id("id"))); 

55 = valeur assignée