用硒清除textarea中的文本

时间:2011-10-11 20:32:24

标签: python selenium selenium-webdriver

我已经进行了一些测试,我在检查某些字段中的文本无效时是否显示正确的错误消息。有效性检查是某个textarea元素不为空。

如果此textarea中已有文字,我该如何告诉selenium清除该字段?

类似的东西:

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

11 个答案:

答案 0 :(得分:156)

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

答案 1 :(得分:55)

您可以使用

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

答案 2 :(得分:14)

在最新的Selenium版本中,使用:

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

答案 3 :(得分:4)

根据我的经验,这是最有效的

driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')

我们正在发送Ctrl +退格键以删除输入中的所有字符,您还可以使用Delete替换退格符。

编辑:已删除键依赖性

答案 4 :(得分:2)

这是一般语法

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

答案 5 :(得分:2)

我正在使用 selenium==3.141.0,但我不知道为什么

WebElement.clear()

不工作。

我用过

WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)

这对我来说非常有效。

答案 6 :(得分:0)

for java

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

webElement.clear();

如果此元素是文本输入元素,则将清除该值。

答案 7 :(得分:0)

通过简单调用clear(),在DOM中就会出现相应的输入/文本区域组件仍具有其旧值的情况,因此该组件上的任何后续更改(例如,用新值填充该组件)都不会被处理。及时。

如果您查看硒源代码,您会发现clear()方法记录在案,并带有以下注释:

  

/ **如果此元素是文本输入元素,则将清除该值。对其他元素没有影响。文本输入元素是INPUT和TEXTAREA元素。请注意,此事件引发的事件可能与您预期的不同。特别是,我们不会触发任何键盘或鼠标事件。如果要确保触发键盘事件,请考虑将{@link #sendKeys(CharSequence ...)}之类的键与退格键一起使用。为确保您收到更改事件,请考虑使用Tab键跟随对{@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的旅程有帮助!

答案 8 :(得分:0)

我遇到了.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);

答案 9 :(得分:0)

driver.find_element_by_xpath("path").send_keys(Keys.CONTROL + u'\ue003') 与FireFox配合得很好

  • u'\ ue003'对像我这样的人来说是BACK_SPACE-永远不会记住它)

答案 10 :(得分:0)

从 selenium.webdriver.common.keys 导入密钥

element = driver.find_element_by_css_selector('foo') element.send_keys(Keys.CONTROL + Keys.BACKSPACE)