用硒清除textarea中的文本

Isa*_*aac 119 python selenium selenium-webdriver

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

如果这个textarea中已有文字,我怎么能告诉selenium清除该字段?

就像是:

driver.get_element_by_id('foo').clear_field()
Run Code Online (Sandbox Code Playgroud)

Isa*_*aac 180

driver.find_element_by_id('foo').clear()
Run Code Online (Sandbox Code Playgroud)

  • 在最新的Selenium版本中,这对我不起作用. (4认同)
  • 目前这个答案在React应用程序中无法正常工作,因为clear不会导致React onChange函数触发.因此,您的输入将被清除,测试将继续进行,组件的状态将保持原样.[反应问题](https://github.com/facebook/react/issues/8004),[selenium issue](https://github.com/SeleniumHQ/selenium/issues/1841) (3认同)
  • youp chromedriver也打破了这一点。Fenix答案随处可见 (2认同)
  • 这可能是 selenium 和 chromedriver 版本冲突的问题。开发人员似乎不太可能故意从 chromedriver 中删除此功能。 (2认同)
  • @ncrmro 3年后看起来这仍然不起作用 (2认同)

Fen*_*nix 68

您可以使用

 webElement.clear();
Run Code Online (Sandbox Code Playgroud)

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

请注意,此事件触发的事件可能与您预期的不同.特别是,我们不会触发任何键盘或鼠标事件.如果您想确保触发键盘事件,请考虑使用类似的东西sendKeys(CharSequence).例如:

 webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop
Run Code Online (Sandbox Code Playgroud)

要么:

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);
Run Code Online (Sandbox Code Playgroud)

  • `from selenium.webdriver.common.keys import Keys` 只是为了让新手更容易。 (5认同)
  • 使用 CTRL+'a' 时,请考虑在 MacOS 上运行测试的情况(其他键盘快捷键)。顺便说一句 - 好建议,解决了我的问题。 (4认同)
  • 我的问题通过“Keys.BACK_SPACE”解决。我只是捕获搜索测试字段,运行 .click() 然后在 for 循环中运行代码。它会删除搜索字段之前的所有承租人。然后将新值发送到搜索字段。只是 .clear() 函数对我不起作用。 (2认同)

Lea*_*ple 14

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

driver.find_element_by_id('foo').clear()
Run Code Online (Sandbox Code Playgroud)


m0h*_*h17 9

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

driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')
Run Code Online (Sandbox Code Playgroud)

我们发送 Ctrl + Backspace 来删除输入中的所有字符,您也可以用 delete 替换退格。

编辑:删除密钥依赖项


小智 9

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

WebElement.clear()
Run Code Online (Sandbox Code Playgroud)

不管用。

我用了

WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)
Run Code Online (Sandbox Code Playgroud)

这对我来说非常有用。


Kev*_*ell 9

CTRL+A send_keys 解决方案在反应中对我不起作用。直接在浏览器中测试,CTRL+A 只是将光标发送到文本元素的开头。相反,这对于选择元素中的所有内容似乎是可靠的。

preferred_name_field.send_keys(Keys.SHIFT, Keys.ARROW_UP)
preferred_name_field.send_keys(Keys.DELETE)
Run Code Online (Sandbox Code Playgroud)


vai*_*l20 6

用于Java

driver.findelement(By.id('foo').clear();
Run Code Online (Sandbox Code Playgroud)

或者

webElement.clear();
Run Code Online (Sandbox Code Playgroud)

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


iam*_*p89 5

这是通用语法

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
Run Code Online (Sandbox Code Playgroud)


Jor*_*ega 5

我遇到了.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);
Run Code Online (Sandbox Code Playgroud)