Очистить текст из текстовой области с селеном - PullRequest
109 голосов
/ 12 октября 2011

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

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

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

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

Ответы [ 7 ]

164 голосов
/ 18 октября 2011
driver.find_element_by_id('foo').clear()
57 голосов
/ 06 января 2015

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

 webElement.clear();

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

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

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

или

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);
14 голосов
/ 29 сентября 2014

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

driver.find_element_by_id('foo').clear()
2 голосов
/ 27 сентября 2017

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

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
0 голосов
/ 03 июля 2019

Я столкнулся с полем, где .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);
0 голосов
/ 10 июля 2018

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

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

/ ** Если этот элемент является элементом ввода текста, это очистит значение. Не влияет на другие элементы. Элементами ввода текста являются элементы 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 ()", который сделал бы этот пост слишком длинным.

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

0 голосов
/ 23 января 2018

для java

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

или

webElement.clear();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...