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()
94
demandé sur Isaac 2011-10-12 00:32:23

6 réponses

driver.find_element_by_id('foo').clear()
134
répondu Isaac 2014-09-29 15:24:22

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);
39
répondu Fenix 2018-05-02 06:03:46

Dans la version la plus récente de Selenium, utilisez:

driver.find_element_by_id('foo').clear()
12
répondu in code veritas 2014-09-29 00:52:34

C'est la syntaxe générale

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
2
répondu iamsankalp89 2017-09-27 09:33:12

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.

0
répondu vaibhavcool20 2018-01-23 10:13:14

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!

0
répondu ShadowGames 2018-07-10 09:13:57