Web自动化成长之路:selenium中鼠标、键盘、上传文件操作、使用js脚本
前言: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脚本相关推荐
- web ui自动化之模拟上传文件操作
文章目录 前言 方法一.使用Autolt生成exe文件,在Python中调用 AutoIt介绍及安装 定位元素插件的使用 编写脚本 将脚本转换成可执行文件 python代码 在python中调用 方法 ...
- android项目中使用的服务器上,android 开发中使用okhttp上传文件到服务器
开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...
- ajax上传 java,javaWeb中使用ajax上传文件
javaWeb上传图片 上传文件所必要的两个jar包:commons-fileupload.jar.commons-io.jar. 核心代码: String withPath = req.getSer ...
- php curl文件上传,在 php 中通过 CURL 上传文件
1.使用 CURL 默认的方法$file = realpath('gif/1.gif'); //要上传的文件 $fields['f'] = '@'.$file; $ch = curl_init(); ...
- Selenium+java - 借助autolt完成上传文件操作
写在前面: 上传文件是每个自动化测试同学会遇到,而且可以说是面试必考的问题,标准控件我们一般用sendkeys()就能完成上传,但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了, ...
- JS中使用FormData上传文件、图片的方法
参考博客:http://www.cnblogs.com/xiaohuochai/p/6543019.html http://www.cnblogs.com/qcloud1001/p/6839541.h ...
- html文件上传数量限制,使用HTML中的input上传文件最多可以上传多少张?
问题描述 我使用flask作为web框架搭建了一个小网站,在网站里我基于bootstrap-fileinput实现了文件上传的功能,在上传文件的时候发现最多只能上传1212张,但是我的需求是要能一次上 ...
- ElementUI中el-upload中怎样限制上传文件的格式
场景 使用el-upload上传文件时限制只能上传指定格式的文件. 比如这里只允许上传apk格式的文件. 注: 博客: https://blog.csdn.net/badao_liumang_qizh ...
- java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...
http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...
最新文章
- 通过transpose和flip实现图像旋转90/180/270度
- Linux文件的复制、删除和移动命令
- cn域名注册十元_新手注册域名的一般流程是什么?个人申请域名流程要知道哪些?...
- python中title用法_在CSV fi中使用Title()
- sql下员工工牌(YC0001)的简单实现和一些特殊查询
- 在AndroidStudio中数据存储第三方数据管理Bmob的使用
- 记录一次nginx配置vhost的小bug
- Maven Helper 安装使用(jar 包管理工具)
- 彻底搞懂浏览器Event-loop 1
- 华为P50系列旗舰恐延期至5月发布:首发预装鸿蒙系统
- 如何用3升和5升桶量取4升水?
- .NET简谈分层架构思想(彻底分离每个层)
- 打印身份证正、反面小技巧
- 吾爱破解“凉”了之后,还能去哪儿下载软件?
- vi修改文件格式编码(从dos改为unix)
- 回答朋友关于美团点评业务线工作体验
- 一台电脑有几个计算机用户账户,多人共用一台电脑设置多个使用账户的方法
- Docker Swarm 练习:投票 App
- win10千万不要重置_Win10系统如何自动恢复到出厂设置,小白式操作教程
- jquery mobile_使用jQuery Mobile改善Web应用程序的安全性
热门文章
- PTA QQ帐户的申请与登陆 思路分析及代码解析
- 【PHP】Swoole:php多线程,异步,毫秒定时器,WebSocket的扩展实现
- 后端开发常用官方中文文档整理
- paramiko 详解
- 读书、听评书、看电视的些许区别
- day 12 2021 3 11从不同继承 多态 抽象类分别写猫与狗理解程序
- $.Deferred的基本使用
- 墨菲定律、二八法则、马修、手表定理、“不肖”法、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原则、钱的问题、奥卡姆剃刀等。13文章是关于生活的金科玉律...
- 导柱导向机构设计的注意事项
- .tar.gz文件在linux中tar解压出错