谈谈selenium中的clear后输入内容异常的处理
谈谈selenium中的clear后输入内容异常的处理
案例
- 在线考试项目的登录:http://124.223.31.21:9097/#/

代码
from selenium import webdriver
driver = 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 webdriver driver = 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 pyautogui
pyautogui.typewrite('123456')
driver.find_element('css selector', '.submit>button').click()
的确搞定了
但有点奇怪的是
我加了sleep,并没有看到在密码框中有输入123456
画蛇添足
ele_password.clear()
ele_password.click()
import pyautogui
pyautogui.typewrite('123456')
click的效果是有的,但是,又只输入了12345
至此有点懵,不是send_keys的原因?还是说send_keys跟typewrite有一样的问题?
解决方法四:js操作
js操作就比较丝滑,因为它可以对一个元素的value进行赋值,不存在什么clear
示例代码
from selenium import webdriver
driver = 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()
说在最后
- 方法其实很多,你要思考的是如何模拟这个操作
- 上面的未必能解决你的问题,你需要根据实际情况去探索
谈谈selenium中的clear后输入内容异常的处理的更多相关文章
- Python+Selenium自动化-清空输入框、输入内容、点击按钮
Python+Selenium自动化-清空输入框.输入内容.点击按钮 1.输入内容 send_keys('valve'):输入内容valve #定位输入框 input_box = browser. ...
- Android开发中,使用 EditText 输入内容,如何进行一键清空内容处理
本文仅为个人的处理方式,希望能对您有所帮助,欢迎各位留言指正,抱拳了 1.text.xml示例: <?xml version="1.0" encoding="utf ...
- HTML中限制input 输入框输入内容
限制 input 输入框只能输入纯数字1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是 ...
- EXCEL VBA代码,实现点击Sheet1按钮控件保存不连续单元格的数据到Sheet2中,然后清空输入内容
Private Sub SaveAndClear() Dim Header, Deatil, Order As Range Dim lastrow1, lastrow2 As Long Dim i A ...
- 防御XSS攻击-encode用户输入内容的重要性
一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...
- (很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]
如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.Selec ...
- 如何实时获取DBGrid 中当前单元格输入的内容?
如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理, 用什么事件呢? 所以Field的Onchange事件是没用的. 这个问题简单啊,每输入1 ...
- 模拟邮箱输入邮箱地址、收藏标签。input框输入内容后回车,内容显示成小方块并带删除按钮。
模拟邮箱输入邮箱地址.收藏标签: 文本框输入文字后按回车键或者分号键,输入框中的文字变成小块并带删除按钮和操作. 页面代码: <!DOCTYPE html> <%@ page lan ...
- Selenium向iframe富文本框输入内容
目录 前言 只输入纯文本 通过JS注入HTML代码 前言 在使用Selenium测试一些CMS后台系统时,有时会遇到一些富文本框,如下图所示: 整个富文本编辑器是通过iframe嵌入到网页中的,手动尝 ...
- appium-清空输入框的内容后,再次输入内容会回退最后两个字符串
问题描述 有两个输入框,用户名和密码输入框 调用set_text方法,输入用户名 再次调用set_text方法,输入密码 清空用户名输入框的内容后,再次输入内容会回退最后两个字符串 出问题的代码 de ...
随机推荐
- StringIO 和 BytesIO
StringIO 要把 str 字符串写入内存中,我们需要创建一个 StringIO 对象,然后像文件一样对读取内容.其中 StringIO 中多了一个 getvalue() 方法,目的是用于获取写入 ...
- cpu的调度
什么是cpu的调度 所谓 CPU 调度,就是确定把哪个处于淮备就绪状态的进程移入运行状态.也就是说,CPU调度算法将决定把 CPU 给予哪个进程,以便它能够运行. 两种调度方式 CPU 调度可以是在一 ...
- little bug
1 python script can be run in shell console while not in calling shell scripts wfile = codecs.open(n ...
- php上传文件时出现 caution: request is not finished yet
其中的一个原因:是wamp64下的tmp文件夹中的临时文件太多,把这个文件夹的临时文件清理后就可以了.
- CSS3之动画三大特性
一 过渡模块 1 基本使用 1,过渡三要素1.1必须要有属性发生变化1.2必须告诉系统哪个属性需要执行过渡效果1.3必须告诉系统过渡效果持续时长 2.注意点当多个属性需要同时执行过渡效果时用逗号隔开即 ...
- K8S—dashboard ui部署
一.Dashboard UI概述 仪表板是基于Web的Kubernetes用户界面.您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随 ...
- loadrunner添加/清除 cookies
web_add_cookie("reloadCount=1;domain={Host}"); 清除 cookies web_cleanup_cookies():
- SpringBoot——实现WebService接口服务端以及客户端开发
参考:https://blog.csdn.net/qq_43842093/article/details/123076587 https://www.cnblogs.com/yinyl/p/14197 ...
- uniapp使用阿里oss上传
可以删除重新上传,点击图片大图等功能. <view class="uploadView"> <view class="imageView" v ...
- Android笔记--案例:登录界面以及登录逻辑
登录界面的实现 就是说,界面的绘制,并没有什么难度,只要控制好空间的分配就可以了 登录的逻辑实现 获取验证码.忘记密码的界面跳转.登录的实现: 确认文本框的输入内容是否符合题意: