我进行了一些测试,检查当某些字段中的文本无效时是否会显示正确的错误消息。有效性检查之一是某个文本区域元素不为空。
如果这个文本区域中已经有文本,我如何告诉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()
如果该元素是文本输入元素,这将清除该值。
请注意,此事件触发的事件可能与您预期的不同。特别是,我们不会触发任何键盘或鼠标事件。
我遇到了 .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)
在最新的 Selenium 版本中,使用:
driver.find_element_by_id('foo').clear()
根据我的经验,这是最有效的
driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')
我们发送 Ctrl + Backspace 来删除输入中的所有字符,您也可以将退格键替换为删除。
编辑:删除了键依赖性
正在使用selenium==3.141.0,我不知道为什么
WebElement.clear()
不起作用。
我用过
WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)
这对我来说非常有效。
CTRL+A send_keys 解决方案在反应中对我不起作用。直接在浏览器中测试,CTRL+A 只是将光标发送到文本元素的开头。相反,这对于选择元素中的所有内容似乎是可靠的。
preferred_name_field.send_keys(Keys.SHIFT, Keys.ARROW_UP)
preferred_name_field.send_keys(Keys.DELETE)
这是通用语法
driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
对于java
driver.findelement(By.id('foo').clear();
或
webElement.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)
通过简单地调用clear(),在DOM中就会出现相应的输入/文本区域组件仍然具有其旧值,因此该组件上的任何后续更改(例如,用新值填充组件)将不会被及时处理.
如果您查看 selenium 源代码,您会发现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 之旅有帮助!
尝试:
driver=self.driver
driver.find_element_by_xpath('Path').send_keys(Keys.CONTROL + "a")
driver.find_element_by_xpath('Path').send_keys(Keys.BACK_SPACE)
driver.find_element_by_xpath("path").send_keys(Keys.CONTROL + u'\ue003')
与 FireFox 配合得很好
从 selenium.webdriver.common.keys 导入密钥
element = driver.find_element_by_css_selector('foo') element.send_keys(Keys.CONTROL + Keys.BACKSPACE)
如果clear()不起作用,您可以使用以下方法模拟多次按下Backspace:
driver.get_element_by_id('foo').send_keys(Keys.BACKSPACE)
要多次执行此操作,请使用:
from selenium.webdriver.common.keys import Keys
# Replace 100 with the number of time you want to press backspace.
for i in range(0, 100):
driver.get_element_by_id('foo').send_keys(Keys.BACKSPACE)
首先找到元素
element = driver.find_element_by_id('your element id')
清除Input或Textarea中的文本:如果元素是input或textarea,可以直接使用clear()函数删除。
element.clear()
重置单选按钮或复选框:只需再次单击单选按钮或复选框项目即可。
element.click()
取消选择Dropdow:在选择中,可以通过以下方式取消选择。
Select select = new Select(element);
select.deselectByVisibleText("Female");
select.deselectByValue("1");
select.deselectByIndex(1);
select.deselectAll();
尝试使用这个
text=((Keys.BACKSPACE*20)+(Keys.DELETE * 20))
强制输入值为空字符串也可以在
execute_script
函数的帮助下工作
element = driver.find_element(By.ID,"some_element")
driver.execute_script('arguments[0].value = "0";', element)