Avec un simple appel de clear (), il apparaît dans le DOM que le composant input / textarea correspondant a toujours son ancienne valeur, donc toutes les modifications suivantes sur ce composant (par exemple, remplir le composant avec une nouvelle valeur) ne seront pas traitées à temps.
Si vous regardez dans le code source du sélénium, 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 d'entrée 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 clavier ou 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 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 zone d'entrée / de texte (composant qui a déjà une valeur) ET lui attribuer une nouvelle valeur, vous obtiendrez un 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 non Python. En outre, j'ai dû sauter une méthode supplémentaire "waitUntilPageIsReady () () qui rendrait ce message trop long.
J'espère que cela vous aidera dans votre voyage avec Selenium!