У меня есть несколько тестов, в которых я проверяю, появляется ли правильное сообщение об ошибке, когда текст в определенных полях недействителен. Одной из проверок действительности является то, что определенный элемент textarea не пуст.
Если в этом текстовом поле уже есть текст, как я могу сказать селену, чтобы он очистил поле?
что-то типа:
driver.get_element_by_id('foo').clear_field()
Ответы:
driver.find_element_by_id('foo').clear()
источник
Ты можешь использовать
Если этот элемент является элементом ввода текста, это очистит значение.
Обратите внимание, что события, запускаемые этим событием, могут быть не такими, как вы ожидали. В частности, мы не запускаем никаких событий клавиатуры или мыши. Если вы хотите, чтобы события клавиатуры запускались, подумайте об использовании чего-то вроде
sendKeys(CharSequence)
. Например:webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop
или:
webElement.sendKeys(Keys.CONTROL + "a"); webElement.sendKeys(Keys.DELETE);
источник
webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop
в моем странном случаеfrom selenium.webdriver.common.keys import Keys
просто чтобы облегчить жизнь новичкам.Я наткнулся на поле, где .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);
источник
;
опять?;
не требуется в python. Я добавил случайно. Хороший улов.В самой последней версии Selenium используйте:
driver.find_element_by_id('foo').clear()
источник
для Java
driver.findelement(By.id('foo').clear();
или
Если этот элемент является элементом ввода текста, это очистит значение.
источник
Это общий синтаксис
driver.find_element_by_id('Locator value').clear(); driver.find_element_by_name('Locator value').clear();
источник
По моему опыту, это оказалось наиболее эффективным
driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')
Мы отправляем Ctrl + Backspace, чтобы удалить все символы из ввода, вы также можете заменить backspace на delete.
РЕДАКТИРОВАТЬ: удалена зависимость ключей
источник
С помощью простого вызова clear () в DOM появляется, что соответствующий компонент input / textarea все еще имеет свое старое значение, поэтому любые последующие изменения в этом компоненте (например, заполнение компонента новым значением) не будут обработаны вовремя.
Если вы посмотрите исходный код селена, вы обнаружите, что метод clear () задокументирован со следующим комментарием:
Таким образом, используя этот полезный совет, чтобы очистить поле ввода / текста (компонент, который уже имеет значение) И присвоить ему новое значение, вы получите следующий код:
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!
источник
driver.find_element_by_xpath("path").send_keys(Keys.CONTROL + u'\ue003')
отлично работал с FireFoxисточник