Очистить текст от textarea с селеном

У меня есть некоторые тесты, где я проверяю, что появляется правильное сообщение об ошибке, когда текст в определенных полях недействителен. Одна проверка на достоверность состоит в том, что определенный элемент textarea не пуст.

Если в этом текстовом поле уже есть текст, как я могу сказать селену, чтобы очистить поле?

что-то вроде:

driver.get_element_by_id('foo').clear_field()

Ответ 1

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

Ответ 2

Ты можешь использовать

 webElement.clear();

Если этот элемент является элементом ввода текста, это очистит значение.

Обратите внимание, что события, вызванные этим событием, могут быть не такими, как вы ожидаете. В частности, мы не запускаем события клавиатуры или мыши. Если вы хотите, чтобы события клавиатуры sendKeys(CharSequence), рассмотрите возможность использования чего-то вроде sendKeys(CharSequence). Например:

 webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop

или же:

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);

Ответ 3

В самой последней версии Selenium используйте:

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

Ответ 4

Это общий синтаксис

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

Ответ 5

для Java

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

или же

webElement.clear();

Если этот элемент является элементом ввода текста, это очистит значение.

Ответ 6

С помощью простого вызова clear() в DOM появляется, что соответствующий компонент input/textarea по-прежнему имеет старое значение, поэтому любые последующие изменения в этом компоненте (например, заполнение компонента новым значением) не будут обработаны во времени.

Если вы посмотрите на исходный код селена, то обнаружите, что clear() -method задокументирована следующим комментарием:

/** Если этот элемент является элементом ввода текста, это очистит значение. Не влияет на другие элементы. Элементами ввода текста являются элементы INPUT и TEXTAREA. Обратите внимание, что события, вызванные этим событием, могут быть не такими, как вы ожидаете. В частности, мы не запускаем события клавиатуры или мыши. Если вы хотите, чтобы события клавиатуры запускались, попробуйте использовать что-то вроде {@link #sendKeys (CharSequence...)} с клавишей возврата. Чтобы убедиться, что вы получили событие изменения, рассмотрите возможность вызова {@link #sendKeys (CharSequence...)} с помощью клавиши табуляции. */

Поэтому, используя этот полезный совет для очистки ввода/текстовой области (компонента, который уже имеет значение) И присвоения ему нового значения, вы получите некоторый код, подобный следующему:

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() -method, который сделал бы этот пост слишком длинным.

Надеюсь, это поможет вам в вашем путешествии с Selenium!

Ответ 7

Я столкнулся с полем, где .clear() не работает. Использование комбинации первых двух ответов сработало для этой области.

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