web-dev-qa-db-fra.com

Effacer le texte de textarea avec sélénium

J'ai des tests où je vérifie que le message d'erreur approprié apparaît lorsque le texte de 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 de vider le champ?

quelque chose comme:

driver.get_element_by_id('foo').clear_field()
103
Isaac
driver.find_element_by_id('foo').clear()
149
Isaac

Vous pouvez utiliser

 webElement.clear();

Si cet élément est un élément d'entrée de texte, la valeur sera effacée.

Notez que les événements déclenchés par cet événement peuvent ne pas être conformes à vos attentes. 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, utilisez 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);
50
Fenix

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

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

C'est la syntaxe générale

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
2
iamsankalp89

pour Java 

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

ou

webElement.clear();

Si cet élément est un élément d'entrée de texte, la valeur sera effacée.

0
vaibhavcool20

Je suis tombé sur un champ où .clear () ne fonctionnait pas. L'utilisation d'une combinaison des deux premières réponses a fonctionné pour ce champ.

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

Avec un simple appel à clear (), il apparaît dans le DOM que le composant input/textarea correspondant a toujours son ancienne valeur. Par conséquent, les modifications suivantes de ce composant (par exemple, le remplissage du composant avec une nouvelle valeur) ne seront pas traitées à temps.

Si vous regardez dans le code source Selenium, vous constaterez que la méthode clear () - est documentée avec le commentaire suivant:

/ ** Si cet élément est un élément d'entrée de texte, cela effacera la valeur. N'a aucun effet sur les 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 conformes à vos attentes. 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, utilisez quelque chose comme {@link #sendKeys (CharSequence ...)} avec la touche de 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 cette astuce utile pour effacer une entrée/zone de texte (composant qui a déjà une valeur) ET lui affecter une nouvelle valeur, vous obtiendrez du code comme celui-ci: 

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 pas Python. En outre, je devais ignorer une méthode supplémentaire "waitUntilPageIsReady ()" qui rendrait cette publication trop longue.

J'espère que cela vous aidera dans votre voyage avec Selenium!

0
ShadowGames