谈谈selenium中的clear后输入内容异常的处理
案例
- 项目的登录:http://124.223.31.21:9097/#/ ; 可能会无法访问,了解下这个情况的处理即可

- 代码
from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://124.223.31.21:9097/#/')driver.find_element('id','formLabelAlign.username').send_keys('20154084')driver.find_element('id','formLabelAlign.password').send_keys('123456')driver.find_element('css selector','.submit>button').click() - 你会发现无法登录,道理很简单
- 你输入的密码追加过去了,send_keys如果之前有内容,是会保留的,追加你输入的内容。

- 你可能会这样处理,在密码元素上先清空之前的内容(clear),然后再去输入
driver.find_element('id','formLabelAlign.username').send_keys('20154084')driver.find_element('id','formLabelAlign.password').clear()driver.find_element('id','formLabelAlign.password').send_keys('123456') - 一个奇怪的现象发生了,你是清空了之前的内容,但你输入的是12345,6没了!

- 屡试不爽
- 但如果输入12345678,或者helloworld,却又是可以的,我反正是解释不了
- 当然这不是我们的重点。
- 实际工作中我也遇到过,有同学也遇到过类似的情况
- 我们可以用其他等价的手段来替代这个
清空后输入的行为
解决方法一:键盘操作
- 在密码上按CTRL+A,再输入
- 示例代码
driver.find_element('id','formLabelAlign.password').send_keys(Keys.CONTROL,'A')driver.find_element('id','formLabelAlign.password').send_keys('123456')driver.find_element('css selector','.submit>button').click() - 从运行的效果看,是全选了,但依然输入的是12345(至此我非常怀疑是send_keys的问题)
解决方法二:鼠标操作
- 在元素上双击(相当于是全选的操作)
- 然后再输入
- 示例代码
ele_password = driver.find_element('id','formLabelAlign.password')ActionChains(driver).double_click(ele_password).send_keys('123456').perform() - 效果OK
- 这样也是ok的
ele_password = driver.find_element('id','formLabelAlign.password')ActionChains(driver).double_click(ele_password).send_keys_to_element(ele_password,'123456').perform()
- 对于这个case,既然怀疑是send_keys的问题,那我们完全可以用其他方式来输入内容
- 比如这样
ele_password = driver.find_element('id','formLabelAlign.password')ele_password.clear()ActionChains(driver).send_keys_to_element(ele_password,'123456').perform() - 即保留了clear,但用其他方式来输入内容
解决方法三:第三方库来输入
- 可以键盘输入的库就多了
- 比如pyautogui
- 示例代码
from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://124.223.31.21:9097/#/')driver.find_element('id','formLabelAlign.username').send_keys('20154084')ele_password = driver.find_element('id','formLabelAlign.password')ele_password.clear()import pyautoguipyautogui.typewrite('123456')driver.find_element('css selector','.submit>button').click() - 的确搞定了
- 但有点奇怪的是
- 我加了sleep,并没有看到在密码框中有输入123456
- 画蛇添足
ele_password.clear()ele_password.click()import pyautoguipyautogui.typewrite('123456') - click的效果是有的,但是,又只输入了12345
- 至此有点懵,不是send_keys的原因?还是说send_keys跟typewrite有一样的问题?
解决方法四:js操作
- js操作就比较丝滑,因为它可以对一个元素的value进行赋值,不存在什么clear
- 示例代码
from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://124.223.31.21:9097/#/')driver.find_element('id','formLabelAlign.username').send_keys('20154084')js ="document.querySelector('[placeholder=请输入密码]').value='123456'"driver.execute_script(js)driver.find_element('css selector','.submit>button').click()
说在最后
- 方法其实很多,你要思考的是如何模拟这个操作
- 上面的未必能解决你的问题,你需要根据实际情况去探索
本文转载自: https://blog.csdn.net/Mantou023/article/details/134850941
版权归原作者 wuxianfeng023 所有, 如有侵权,请联系我们删除。
版权归原作者 wuxianfeng023 所有, 如有侵权,请联系我们删除。