我已经进行了一些测试,我在检查某些字段中的文本无效时是否显示正确的错误消息。有效性检查是某个textarea元素不为空。
如果此textarea中已有文字,我该如何告诉selenium清除该字段?
类似的东西:
driver.get_element_by_id('foo').clear_field()
答案 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配合得很好
答案 10 :(得分:0)
从 selenium.webdriver.common.keys 导入密钥
element = driver.find_element_by_css_selector('foo') element.send_keys(Keys.CONTROL + Keys.BACKSPACE)