前言:UI自动化操作时,鼠标操作、键盘操作、文件上传都是使用普遍且重要的操作,接下来我们就一起来学习下吧

一、文件上传

a)send_keys:一定是要是input元素

input 里的type="file"时,可以直接通过send_keys 发送文件路径


a)input 里的type="file"时,可以直接通过send_keys 发送文件路径driver.find_element('id', 'mfile').send_keys(r'D:\Pycharm-Workspaceace\web_auto_testing\day6\d6_总结.txt')

b)非input标签时,要使用第三方插件

现在文件上传的元素不是input,div

只能借助第三方工具,上传文件时,打开的窗口

b)方法一:pywinauto

先找到对应元素,触发点击事件,打开系统弹框,此时不能用显性等待了,因为已经不是在selenium里了。from pywinauto.keyboard import send_keys #导入库
send_keys(文件)#pywinauto 的send_keys,如要上传多个文件,则在此多加一个send_keys(文件2)
send_keys('{VK_RETURN}')#确认提交

b)注意事项:

当click()不生效时,使用ActionChains(driver).click(el).perform()

b)方法二:pyautogui

跨平台,绕过了系统的组件,根据像素识别安装:pip install pillow==6.2.2pip install pyautogui使用:
pyautogui.write(文件)
pyautogui.press('enter',2)

b)方法三:pywin32

使用较少,暂不补充

b)文件上传实例:

from selenium import webdriver
from pywinauto.keyboard import send_keys
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditionsdrvice = webdriver.Chrome()
drvice.implicitly_wait(10)
drvice.get("F:\PycharmProjects\lemon66_python\python62_auto\web_homew\d1.html")
f = drvice.find_element("id","mfile")#找到要上传的文件的元素
#触发点击事件,让系统弹窗出来
f.click()
#再加个等待,弹窗弹出来需要时间
time.sleep(2)
#oywinauto的send_key
send_keys(r"C:\Users\Administrator\Desktop")
#确认提交
send_keys('{VK_RETURN}')
#等待
time.sleep(3)

b)单文件上传写法/多文件写法

二、鼠标操作

a)导入鼠标操作库

from selenium.webdriver import ActionChains  #导入鼠标操作库action = ActionChains(driver)  #初始化对象action.click().perform()#在鼠标操作里面就需要加上perform

b)鼠标点击操作

from selenium.webdriver import ActionChains  #导入鼠标操作库ac= ActionChains(driver)  #初始化对象ac.click(元素).perform() #鼠标点击

c)鼠标悬停,移动

from selenium.webdriver import ActionChains  #导入鼠标操作库ac= ActionChains(driver)  #初始化对象ac.move_to_element(元素).perform() #移动

d)鼠标双击

from selenium.webdriver import ActionChains  #导入鼠标操作库ac= ActionChains(driver)  #初始化对象ac.double_click(元素).perform() #双击

e)鼠标右击

from selenium.webdriver import ActionChains  #导入鼠标操作库ac= ActionChains(driver)  #初始化对象ac.context_click(元素).perform()#点击鼠标右键

f)鼠标拖拽

from selenium.webdriver import ActionChains  #导入鼠标操作库ac= ActionChains(driver)  #初始化对象ac.drag_and_drop(元素1,元素2).perform() #鼠标拖拽

g)可以组合链式调用,只要再最后加上perform()即可——重点

from selenium.webdriver import ActionChains  #导入鼠标操作库ac= ActionChains(driver)  #初始化对象ac.context_click(元素).click(元素).perform()#链式调用:鼠标右键点击后,再点击操作

三、键盘操作

a)导入键盘操作库

from selenium.webdriver.common.keys import Keys #导入键盘操作库

——关于键盘操作有以下几种:找到百度一下这个按钮举例

a)方法一:点击元素

from selenium.webdriver.common.keys import Keys #导入键盘操作库elem.send_keys("我是少数")

a)方法二:submit()

from selenium.webdriver.common.keys import Keys #导入键盘操作库elem.submit()

a)方法三:键盘按钮操作

from selenium.webdriver.common.keys import Keys #导入键盘操作库elem.send_keys(Keys.ENTER) #可以加键盘按钮操作,如ctrl+spaceelem.send_keys(Keys.CONTROL,Keys.SPACE)

a)方法四:全局传键盘操作

from selenium.webdriver.common.keys import Keys #导入键盘操作库#全局传键盘操作
ac = ActionChains(elem)
ac.send_keys(Keys.SPACE).perform()#全局使用空格,比如你在一个页面就不定位任何元素时,直接按空格

四、js脚本辅助定位元素及操作

selenium 是对一些 js 指令的封装,selenium 当中之封装了部分浏览器操作(cypress,playwright也可以),有一些操作用 selenium 完成不了,需要发送 js 代码来协助我们UI自动化。

a) js代码写在哪里?

——直接在浏览器里写:F12 --> Console

b) python中执行js指令

方法一:

方法二:使用纯js语言编写需要的操作,然后用Python的execute_script来执行

js_code = "let el = document.getElementById();el.参数=值;"driver.execute_script(js_code)

方法三:python和js混用

#可以把python和JS混用
input_ele = drvice.find_element("id","train_date")#先找元素#准备JS代码
jsc_code = "arguments[0].readOnly = false;arguments[0].value = '2020-12-12';"#argumentsww 拿来占位,固定单词drvice.execute_script(jsc_code,input_ele)

实例:

from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditionsdrvice = webdriver.Chrome()
drvice.implicitly_wait(10)
drvice.get("https://www.12306.cn/index/")#执行JS语句
time.sleep(5)
js_code = "let input = document.getElementById('train_date');input.readOnly = false;input.value = '2020-12-12'"#先把JS的代码写好。然后扔进来,每条语句用;号隔开
drvice.execute_script(js_code)#通过execute_script执行JS的语句
time.sleep(5)#可以把python和JS混用

c) js语法

console.log() #打印alert()  #打印在弹框上var name = " " #定义变量,现在不常用这种let name = " " #常用这种123  #数字true、false #布尔值,小写[1,2,3] #列表{'name':'yuz'} #字典,是一个对象

条件语句:

函数:

d)窗口滚动操作

方法一:scrollTo 滚动到**PX

window.scrollTo(0,500):滚动到 500pxwindow.scrollTo(0,document.body.scrollHeight) #滚动到页面最底端window.scrollTo(0,document.body.scrollHeight/2) #滚动到页面中间

方法二:scrollBy 滚动**PX

window.scrollBy(0,100):滚动 100px

方法三:把一个元素移动到可视范围之内

driver.find_element().location_once_scrolled_into_view

Web自动化成长之路:selenium中鼠标、键盘、上传文件操作、使用js脚本相关推荐

  1. web ui自动化之模拟上传文件操作

    文章目录 前言 方法一.使用Autolt生成exe文件,在Python中调用 AutoIt介绍及安装 定位元素插件的使用 编写脚本 将脚本转换成可执行文件 python代码 在python中调用 方法 ...

  2. android项目中使用的服务器上,android 开发中使用okhttp上传文件到服务器

    开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...

  3. ajax上传 java,javaWeb中使用ajax上传文件

    javaWeb上传图片 上传文件所必要的两个jar包:commons-fileupload.jar.commons-io.jar. 核心代码: String withPath = req.getSer ...

  4. php curl文件上传,在 php 中通过 CURL 上传文件

    1.使用 CURL 默认的方法$file = realpath('gif/1.gif'); //要上传的文件 $fields['f'] = '@'.$file; $ch = curl_init(); ...

  5. Selenium+java - 借助autolt完成上传文件操作

    写在前面: 上传文件是每个自动化测试同学会遇到,而且可以说是面试必考的问题,标准控件我们一般用sendkeys()就能完成上传,但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了, ...

  6. JS中使用FormData上传文件、图片的方法

    参考博客:http://www.cnblogs.com/xiaohuochai/p/6543019.html http://www.cnblogs.com/qcloud1001/p/6839541.h ...

  7. html文件上传数量限制,使用HTML中的input上传文件最多可以上传多少张?

    问题描述 我使用flask作为web框架搭建了一个小网站,在网站里我基于bootstrap-fileinput实现了文件上传的功能,在上传文件的时候发现最多只能上传1212张,但是我的需求是要能一次上 ...

  8. ElementUI中el-upload中怎样限制上传文件的格式

    场景 使用el-upload上传文件时限制只能上传指定格式的文件. 比如这里只允许上传apk格式的文件. 注: 博客: https://blog.csdn.net/badao_liumang_qizh ...

  9. java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...

    http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...

最新文章

  1. 通过transpose和flip实现图像旋转90/180/270度
  2. Linux文件的复制、删除和移动命令
  3. cn域名注册十元_新手注册域名的一般流程是什么?个人申请域名流程要知道哪些?...
  4. python中title用法_在CSV fi中使用Title()
  5. sql下员工工牌(YC0001)的简单实现和一些特殊查询
  6. 在AndroidStudio中数据存储第三方数据管理Bmob的使用
  7. 记录一次nginx配置vhost的小bug
  8. Maven Helper 安装使用(jar 包管理工具)
  9. 彻底搞懂浏览器Event-loop 1
  10. 华为P50系列旗舰恐延期至5月发布:首发预装鸿蒙系统
  11. 如何用3升和5升桶量取4升水?
  12. .NET简谈分层架构思想(彻底分离每个层)
  13. 打印身份证正、反面小技巧
  14. 吾爱破解“凉”了之后,还能去哪儿下载软件?
  15. vi修改文件格式编码(从dos改为unix)
  16. 回答朋友关于美团点评业务线工作体验
  17. 一台电脑有几个计算机用户账户,多人共用一台电脑设置多个使用账户的方法
  18. Docker Swarm 练习:投票 App
  19. win10千万不要重置_Win10系统如何自动恢复到出厂设置,小白式操作教程
  20. jquery mobile_使用jQuery Mobile改善Web应用程序的安全性

热门文章

  1. PTA QQ帐户的申请与登陆 思路分析及代码解析
  2. 【PHP】Swoole:php多线程,异步,毫秒定时器,WebSocket的扩展实现
  3. 后端开发常用官方中文文档整理
  4. paramiko 详解
  5. 读书、听评书、看电视的些许区别
  6. day 12 2021 3 11从不同继承 多态 抽象类分别写猫与狗理解程序
  7. $.Deferred的基本使用
  8. 墨菲定律、二八法则、马修、手表定理、“不肖”法、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原则、钱的问题、奥卡姆剃刀等。13文章是关于生活的金科玉律...
  9. 导柱导向机构设计的注意事项
  10. .tar.gz文件在linux中tar解压出错