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.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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值