我有一些测试,测试需要检查当某些字段中的文本无效时,是否会显示正确的错误消息。其中一个验证步骤是确保特定的文本区域元素不为空。
如果此文本区域已经有文本,我该如何告诉Selenium清空该字段呢?
类似这样:
driver.get_element_by_id('foo').clear_field()
我有一些测试,测试需要检查当某些字段中的文本无效时,是否会显示正确的错误消息。其中一个验证步骤是确保特定的文本区域元素不为空。
如果此文本区域已经有文本,我该如何告诉Selenium清空该字段呢?
类似这样:
driver.get_element_by_id('foo').clear_field()
driver.find_element_by_id('foo').clear()
如果您想确保触发键盘事件,请考虑使用sendKeys(CharSequence)
。
示例1:
from selenium.webdriver.common.keys import Keys
# ...
webElement.sendKeys(Keys.CONTROL + "a")
webElement.sendKeys(Keys.DELETE)
例子 2:
from selenium.webdriver.common.keys import Keys
# ...
webElement.sendKeys(Keys.BACK_SPACE) //do repeatedly, e.g. in while loop
获取所需的WebElement有多种方法,例如:
webElement.clear()
如果这个元素是一个文本输入元素,那么它将清除其值。
请注意,此事件触发的事件可能不符合您的预期。特别地,我们不会触发任何键盘或鼠标事件。
webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop
有帮助。 - Chaki_Blackselenium.webdriver.common.keys
模块。 - Burak KaymakciKeys.CONTROL + 'a'
在我之前一直有效,看起来Chrome或Selenium中的某些东西已经改变,所以现在它只会发送'a'字符到我的文本字段中,这是不期望的。转而使用 element.clear()
,现在只需要一行代码就可以完美地解决问题了,谢谢! - rodikno我遇到了一个.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)
;
的作用是什么? - tread;
。我是不小心加上去的。好发现。 - Jortegadriver.find_element_by_id('foo').send_keys(...)
是与 webElement.send_keys(...)
相同的解决方案。driver.find_element_by_id()
是返回 WebElement 的一种方式,你也可以使用其他方式来定位元素。 - Fenix在最新的Selenium版本中,请使用:
driver.find_element_by_id('foo').clear()
driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')
我们正在发送Ctrl + Backspace以删除输入框中的所有字符,您还可以用delete替换backspace。EDIT:已移除Keys依赖。...clear();
不起作用吗? - Romasius我正在使用selenium==3.141.0,但不知道为什么。
WebElement.clear()
WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)
这对我来说非常完美可行。
在React中,CTRL+A send_keys的解决方案对我无效。在直接测试浏览器时,CTRL+A只会将光标移到文本元素的开头。相反,以下方法似乎可靠地选择元素中的所有内容。
preferred_name_field.send_keys(Keys.SHIFT, Keys.ARROW_UP)
preferred_name_field.send_keys(Keys.DELETE)
Java相关
driver.findelement(By.id('foo').clear();
或者
webElement.clear();
这是一般的语法。
driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
我建议:
WebElement.send_keys([Keys.BACKSPACE] * 1000)
使用这种方式比while循环更快、更优雅。
而Keys.BACKSPACE
可以在Mac上使用。
这些方法在我在Mac上使用Chrome时都不起作用:
WebElement.clear()
WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)
while _ in range(1000):
WebElement.send_keys(Keys.DELETE)
input_field.clear
,但它却不能清除input_field
。没有任何好的理由。圣伊西多尔啊,帮助我们吧。 - phtrivier