selenium——clear()使用了不生效,解决输入框没法清空的情况
前提:
今天研究web自动化,准备模拟一个修改名称的操作,想的是定位都输入框元素,然后使用clear()方法清空输入框内容,再重新输入一些内容
结果实际上发现并没有清空输入框内容,而是直接在输入框后面追加了(这里就可以确定元素肯定是定位到了的)
clear()方法为什么会失效不得而知,在网上搜索了一大圈也没看到有人解释说为什么会没起作用(好想知道为什么不起作用……)
解决办法:
总得来说有三个解决思路
一:双击输入框,然后重新输入内容(最笨,因为基本上双击选中不了全部内容)
需要导入 from selenium.webdriver import ActionChains
二:通过键盘全选,即模拟发起ctrl+a,然后重新输入内容(推荐)
需要导入 from selenium.webdriver.common.keys import Keys
三:通过万能的js直接定位到元素然后将元素的value值清空(需要了解一定的js语法,如果要做好web自动化,js多少也需要掌握点)
下面是以上三种方法的代码实现
ele = driver.find_element_by_xpath('//*[@id="data-assets-modules"]/div[3]/div/div[2]/form/div/div/div/input') # 方法一:双击输入框,再输入新的内容 ActionChains(driver).double_click(ele).perform() ele.send_keys('尝试双击修改') # 方法二:通过键盘全选,然后直接输入新的内容,就不用clear了 ele.send_keys(Keys.CONTROL, 'a') ele.send_keys('通过键盘全选达到清空效果') # 方法三:万能的js # 这种execute_script()的用法还需要学习 driver.execute_script("arguments[0].value = '';", ele) # 也可以通过css选择器选取元素再把value清空 driver.execute_script('document.querySelector("#data-assets-modules > div:nth-child(3) > div > div.el-dialog__body > form > div > div > div > input").value=""') ele.send_keys('通过js清空输入框')
实际试验以后,除了第一种达不到预期效果,后面两种都能达到预期效果
还是留个疑问:什么情况下clear()会失效不起作用呢?
我所定位的input元素本身也没啥特殊的,对比了其他clear()能生效的input元素也实在没看出有啥不一样的地方
————————————————
版权声明:本文为CSDN博主「sun_977759」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sun_977759/article/details/108731881