首页 > 行情

谈谈selenium中的clear后输入内容异常的处理|环球看点

来源:博客园 发表时间:2023-04-20 15:40:05
分享到
谈谈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()
说在最后方法其实很多,你要思考的是如何模拟这个操作上面的未必能解决你的问题,你需要根据实际情况去探索

关键词:

保安全、拿资格、抠细节 冬运中心全面进入北京冬奥会临战状态

2021-12-16

人民财评:稳步朝着实现共同富裕的目标迈进

2021-12-16

靠双手让日子变得更美好

2021-12-16

第一观察·瞬间 | 中俄元首视频会晤:相约北京见,携手向未来

2021-12-16

世卫组织:全球累计新冠确诊病例达270791973例

2021-12-16

他们为何奔向先行示范区——2021深圳全球招商大会透视

2021-12-16

Copyright   2015-2022 北冰洋木材网 版权所有  备案号:沪ICP备2020036824号-3   联系邮箱:562 66 29@qq.com