selenium clear()无效的解决办法

做自动化时,在往输入框中send_keys前往往需要先清空一下这个输入框里的内容,避免输入框原本有内容或默认值,导致最终输入的结果不是预期的内容。

清空内容我们一般会用clear()方法

import time
from selenium import webdriver


driver = webdriver.Chrome()

driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('输入的内容')
time.sleep(2)
driver.find_element_by_id('kw').clear()

但用久了你就会发现clear()并非对所有的输入框都好用,即使它是一个input元素。

产生这个问题的原因有的说是DOM里有镜像节点,清空了输入框中的内容,但是镜像节点里还有数据,所以仍会显示,类似这样:

也有的说是因为clear()本身是只对form中的表单元素有效。

这里不探究到底为什么clear()会无效,只写几种能达到clear效果的方法。

方法一:模拟键盘的清空操作

全选+删除是个比较好的选择

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome()

driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('输入的内容')
time.sleep(2)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
driver.find_element_by_id('kw').send_keys(Keys.DELETE)

也可以用双击+删除,但是要注意双击也是为了能选中内容,但有时候双击不能达到全选的效果

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains


driver = webdriver.Chrome()

driver.get('https://www.baidu.com')
element = driver.find_element_by_id('kw')
element.send_keys('输入的内容')
time.sleep(2)
ActionChains(driver).double_click(element).perform()
element.send_keys(Keys.DELETE)

方式二:使用JS进行清空操作

import time
from selenium import webdriver


driver = webdriver.Chrome()

driver.get('https://www.baidu.com')
element = driver.find_element_by_id('kw')
element.send_keys('输入的内容')
time.sleep(2)
driver.execute_script('arguments[0].value="";', element)

使用JS直接改变元素属性值也能达到效果,但是适用性不如全选+删除。如果后面还要send_keys,直接只全选即可。

你可能感兴趣的:(自动化测试,selenium,测试工具)