При простому виклику clear () в DOM виявляється, що відповідний компонент вводу / textarea все ще має своє старе значення, тому будь-які наступні зміни цього компонента (наприклад, заповнення компонента новим значенням) не будуть оброблені в часі.
Якщо ви подивитесь на вихідний код селену, ви побачите, що метод clear () задокументований таким коментарем:
/ ** Якщо цей елемент є елементом введення тексту, це очистить значення. Не впливає на інші елементи. Елементами введення тексту є елементи INPUT та TEXTAREA. Зауважте, що події, розпочаті цією подією, можуть бути не такими, як ви очікували. Зокрема, ми не запускаємо жодних подій на клавіатурі чи миші. Якщо ви хочете переконатись, що запускаються події на клавіатурі, спробуйте скористатися {@link #sendKeys (CharSequence ...)} клавішею із зворотним простором. Щоб переконатися, що ви отримаєте подію зміни, подумайте про наступний дзвінок на {@link #sendKeys (CharSequence ...)} клавішею вкладки. * /
Отож, використовуючи цей корисний підказку, щоб очистити введення / textarea (компонент, який вже має значення) І призначити йому нове значення, ви отримаєте такий код, як наступний:
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;
}
Вибачте, що цей код є Java, а не Python. Крім того, мені довелося пропустити додатковий метод "waitUntilPageIsReady ()", який зробить цей пост занадто довгим.
Сподіваємось, це допоможе вам у вашій подорожі із Селеном!