前言: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.2
pip 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_conditions
drvice = 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+space
elem.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_conditions
drvice = 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):滚动到 500px
window.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