Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用selenium从textarea清除文本_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python 使用selenium从textarea清除文本

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(字符序列)< /代码>

我做了一些测试,检查当某些字段中的文本无效时是否出现正确的错误消息。一个有效性检查是某个textarea元素不是空的

如果此文本区域中已有文本,我如何告诉selenium清除该字段

比如:

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_元素
备选方案b) 如果此元素是文本输入元素,则将清除该值

请注意,此事件触发的事件可能与您预期的不同。特别是,我们不会触发任何键盘或鼠标事件。

这是通用语法

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)