谈谈selenium中的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')
    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后输入内容异常的处理的更多相关文章

  1. Python+Selenium自动化-清空输入框、输入内容、点击按钮

    Python+Selenium自动化-清空输入框.输入内容.点击按钮   1.输入内容 send_keys('valve'):输入内容valve #定位输入框 input_box = browser. ...

  2. Android开发中,使用 EditText 输入内容,如何进行一键清空内容处理

    本文仅为个人的处理方式,希望能对您有所帮助,欢迎各位留言指正,抱拳了 1.text.xml示例: <?xml version="1.0" encoding="utf ...

  3. HTML中限制input 输入框输入内容

    限制 input 输入框只能输入纯数字1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是 ...

  4. EXCEL VBA代码,实现点击Sheet1按钮控件保存不连续单元格的数据到Sheet2中,然后清空输入内容

    Private Sub SaveAndClear() Dim Header, Deatil, Order As Range Dim lastrow1, lastrow2 As Long Dim i A ...

  5. 防御XSS攻击-encode用户输入内容的重要性

    一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...

  6. (很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]

    如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.Selec ...

  7. 如何实时获取DBGrid 中当前单元格输入的内容?

    如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理, 用什么事件呢? 所以Field的Onchange事件是没用的. 这个问题简单啊,每输入1 ...

  8. 模拟邮箱输入邮箱地址、收藏标签。input框输入内容后回车,内容显示成小方块并带删除按钮。

    模拟邮箱输入邮箱地址.收藏标签: 文本框输入文字后按回车键或者分号键,输入框中的文字变成小块并带删除按钮和操作. 页面代码: <!DOCTYPE html> <%@ page lan ...

  9. Selenium向iframe富文本框输入内容

    目录 前言 只输入纯文本 通过JS注入HTML代码 前言 在使用Selenium测试一些CMS后台系统时,有时会遇到一些富文本框,如下图所示: 整个富文本编辑器是通过iframe嵌入到网页中的,手动尝 ...

  10. appium-清空输入框的内容后,再次输入内容会回退最后两个字符串

    问题描述 有两个输入框,用户名和密码输入框 调用set_text方法,输入用户名 再次调用set_text方法,输入密码 清空用户名输入框的内容后,再次输入内容会回退最后两个字符串 出问题的代码 de ...

随机推荐

  1. 【随笔】Tomcat部署图片服务器Server.xml配置记录

    在tomcat应用conf/server.xml文件的标签中添加下面内容: <Service name="imageService"> <!--分配8089端口 ...

  2. TiSpark 初级应用

    目前正在使用tispark 进行离线计算,简单记录一下操作过程 一.技术验证 场景:计算每次充电过程中单体最高电压的变化速率  解决方案:     使用tispark 直接访问tidb的数据,采用sp ...

  3. 每日一道算法题——斐波那契数列Fibonacci

    题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1),n≤39: 示例1 输入: 4 返回值: 3 代码: 方法一:递归 publi ...

  4. 微信支付服务商api对接

    引入官方sdk <!--微信v3支付sdk {https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient}--> < ...

  5. 2021.06.21 onmouseover和onmouseleave事件对比

    在重新巩固js基础的过程中,分别使用onmouseover和onmouseleave事件却导致了不同的效果,但是在之前的记忆中,这两者确实是一样的哈,因此探究一下产生不同效果的原因. 在使用onmou ...

  6. win服务项因各种原因出问题,删除注册表服务项

    win7系统,可以cmd–>sc delete 服务名称win10计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 删除相关服务即 ...

  7. Linux系统mysql免安装版配置指南

    1.下载(/usr/local目录) wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-linux-glibc2.12-x ...

  8. django+ajax实现xlsx文件下载功能

    前端代码 $("#id_pullout").click(function () { //发送ajax请求 $.ajax({ url: '/pullout/', //请求的url m ...

  9. 在Linux中安装containerd作为kubernetes的容器运行时

    概述 从kubernetes1.24开始的版本移除了内置的docker支持,用户可以自行选择需要使用的容器运行时,比如containerd.CRI-O.Docker Engine等等,这里我们采用二进 ...

  10. 树状分级框架UI实例

    树状分级框架UI实例:(内容参考https://zhuanlan.zhihu.com/p/108485875) #coding:utf8 #!/usr/bin/env python #@author: ...