Python 使用selenium从textarea清除文本
我做了一些测试,检查当某些字段中的文本无效时是否出现正确的错误消息。一个有效性检查是某个textarea元素不是空的 如果此文本区域中已有文本,我如何告诉selenium清除该字段 比如:Python 使用selenium从textarea清除文本,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我做了一些测试,检查当某些字段中的文本无效时是否出现正确的错误消息。一个有效性检查是某个textarea元素不是空的 如果此文本区域中已有文本,我如何告诉selenium清除该字段 比如: driver.get_element_by_id('foo').clear_field() 在最新的Selenium版本中,请使用: driver.find_element_by_id('foo').clear() 备选方案a) 如果要确保键盘事件被触发,请考虑使用 sEdKEY(字符序列)< /代码>
driver.get_element_by_id('foo').clear_field()
在最新的Selenium版本中,请使用:
driver.find_element_by_id('foo').clear()
备选方案a)
如果要确保键盘事件被触发,请考虑使用<代码> sEdKEY(字符序列)< /代码> ./P> 例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的方法有很多,例如:
- driver.find\u元素\u by\u id
- driver.find_元素\u by_xpath
- driver.find_元素
driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
对于java
driver.findelement(By.id('foo').clear();
或
如果此元素是文本输入元素,则将清除该值。通过简单的clear()调用,DOM中显示相应的input/textarea组件仍有其旧值,因此该组件上的任何后续更改(例如,用新值填充组件)将不会及时处理 如果查看selenium源代码,您会发现clear()-方法的文档中有以下注释: /**如果此元素是文本输入元素,则将清除该值。对其他元素没有影响。文本输入元素是INPUT和TEXTAREA元素。请注意,此事件触发的事件可能与您预期的不同。特别是,我们不会触发任何键盘或鼠标事件。如果要确保键盘事件被触发,请考虑使用{@ Link LyssEdKEYKEY(字符序列…)}与退格键。为了确保获得更改事件,请考虑使用Tab键调用{@ Link SyssEdKEYKEY(字符序列…)}。*/ 因此,使用此有用提示清除输入/文本区域(已经有值的组件)并为其分配新值,您将得到如下代码:
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。此外,我还必须跳过一个额外的“waituntilpageisrady()”方法,这会使这篇文章太长
希望这对您的Selenium之旅有所帮助!我遇到了一个.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)
根据我的经验,这是最有效的
driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')
我们正在发送Ctrl+Backspace以删除输入中的所有字符,您也可以将Backspace替换为delete
编辑:删除了密钥依赖项驱动程序。通过xpath(“路径”)查找元素。发送密钥(Keys.CONTROL+u'\ue003')在FireFox中工作得很好
- u'\ue003'是像我这样的人的后台空间-永远记不起来)
- 我使用的是硒==3.141.0,我不知道为什么
WebElement.clear()
它不起作用
我曾经
WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)
这对我来说非常有效。我找到了它的驱动程序。通过id(“foo”)获取元素。清除()9年后,使用明显的
input\u字段仍然非常普遍。清除并拥有它…不清除input\u字段
。没有什么好的理由。St Isidore帮助我们。这在最新的Selenium版本中对我不起作用。youp chromedriver也破坏了这一点。Fenix answer在任何地方都能工作selenium和chromedriver版本冲突可能是一个问题。开发人员似乎不太可能仔细地从chromedriver中删除此功能。目前,此答案在React应用程序中无法正常工作,因为clear不会导致React onChange功能启动。因此,您的输入将被清除,测试将继续进行你的组件的状态将保持原来的状态。@ NCRMRO 3年后,当使用CTRL+A“考虑到测试将在MaOS上运行(其他键盘快捷键)时,这看起来仍然不起作用。BTW -好的建议,解决了我的问题。“。我只是捕获搜索测试字段,运行。单击(),然后在for循环中运行代码。它删除搜索字段以前拥有的所有租船人。然后将新值发送到搜索字段。Just.clear()函数不适用于我。仅帮助webElement.sendKeys(Keys.BACK\u SPACE)//重复执行,例如,在while循环中
在我的奇怪情况下,selenium.webdriver.common.keys导入密钥
只是为了让新来者更容易。发送keys.CONTROL+'a'
到目前为止对我很有效,看起来Chrome或Selenium中的某些内容发生了变化,所以现在它只将“a”字符发送到我的文本_字段,这是不需要的。切换到element.clear()
,现在只需一行代码而不是两行代码就可以完美工作,谢谢!什么是再次使用代码>吗?@surfer190代码>在python中不是必需的。我无意中加了它。很好的捕获。驱动程序。按id(“foo”)查找元素。发送键(…)
是webElement。发送键(…)
是驱动程序。按id()查找元素是返回webElement的一种方法。您可以使用另一种方法来定位图元。
driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')
WebElement.clear()
WebElement.send_keys(Keys.CONTROL, 'a')
WebElement.send_keys(Keys.DELETE)