Effacer le texte de textarea avec du sélénium
J'ai quelques tests où je vérifie que le message d'erreur approprié apparaît lorsque le texte dans certains champs est invalide. Une vérification de la validité est qu'un certain élément textarea n'est pas vide.
Si cette zone de texte contient déjà du texte, Comment puis-je dire à selenium d'effacer le champ?
Quelque Chose comme:
driver.get_element_by_id('foo').clear_field()
6 réponses
Vous pouvez utiliser
webElement.clear();
Si cet élément est un élément de saisie de texte, cela effacera la valeur.
Notez que les événements déclenchés par cet événement peuvent ne pas être comme prévu. En particulier, nous ne déclenchons aucun événement de clavier ou de souris. Si vous voulez vous assurer que les événements de clavier sont déclenchés, envisagez d'utiliser quelque chose comme sendKeys(CharSequence)
. Par exemple:
webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop
Ou:
webElement.sendKeys(Keys.CONTROL + "a");
webElement.sendKeys(Keys.DELETE);
Dans la version la plus récente de Selenium, utilisez:
driver.find_element_by_id('foo').clear()
C'est la syntaxe générale
driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
Pour java
driver.findelement(By.id('foo').clear();
Ou
webElement.clear();
Si cet élément est un élément de saisie de texte, cela effacera la valeur.
Avec un simple appel de clear (), il apparaît dans le DOM que le composant input/textarea correspondant a toujours son ancienne valeur, donc les modifications suivantes sur ce composant (par exemple, remplir le composant avec une nouvelle valeur) ne seront pas traitées à temps.
Si vous jetez un oeil dans le code source de selenium, vous constaterez que la méthode clear () est documentée avec le commentaire suivant:
/ * * Si cet élément est un élément de saisie de texte, cela effacera la valeur. N'a aucun effet sur d'autres éléments. Les éléments de saisie de texte sont des éléments INPUT et TEXTAREA. Notez que les événements déclenchés par cet événement peuvent ne pas être comme prévu. En particulier, nous ne déclenchons aucun événement de clavier ou de souris. Si vous voulez vous assurer que les événements de clavier sont déclenchés, envisagez d'utiliser quelque chose comme {@link #sendKeys(CharSequence...)} avec la touche retour arrière. Pour vous assurer d'obtenir un événement de modification, envisagez de suivre avec un appel à {@link #sendKeys (CharSequence...)} avec la touche de tabulation. */
Donc en utilisant ceci conseil utile pour effacer un input / textarea (composant qui a déjà une valeur) et lui attribuer une nouvelle valeur, vous obtiendrez du code comme suit:
public void waitAndClearFollowedByKeys(By by, CharSequence keys) {
LOG.debug("clearing element");
wait(by, true).clear();
sendKeys(by, Keys.BACK_SPACE.toString() + keys);
}
public void sendKeys(By by, CharSequence keysToSend) {
WebElement webElement = wait(by, true);
LOG.info("sending keys '{}' to {}", escapeProperly(keysToSend), by);
webElement.sendKeys(keysToSend);
LOG.info("keys sent");
}
private String escapeProperly(CharSequence keysToSend) {
String result = "" + keysToSend;
result = result.replace(Keys.TAB, "\\t");
result = result.replace(Keys.ENTER, "\\n");
result = result.replace(Keys.RETURN, "\\r");
return result;
}
Désolé pour ce code étant Java et non Python. En outre, j'ai dû ignorer une méthode supplémentaire "waitUntilPageIsReady () qui rendrait ce post trop long.
J'espère que cela vous aidera dans votre voyage avec le sélénium!