前言: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()#全局使用空格,比如你在一个页面就不定位任何元素时,直接按空格
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