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


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

     

    一、文件上传

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

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

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

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

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

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

    b)方法一:pywinauto

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

    b)注意事项:

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

    b)方法二:pyautogui

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

    b)方法三:pywin32

    使用较少,暂不补充

    b)文件上传实例:

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

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

     

    二、鼠标操作

    a)导入鼠标操作库

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

    b)鼠标点击操作

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

    c)鼠标悬停,移动

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

    d)鼠标双击

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

    e)鼠标右击

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

    f)鼠标拖拽

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

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

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

    三、键盘操作

    a)导入键盘操作库

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

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

    a)方法一:点击元素

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

    a)方法二:submit()

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

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

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

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

    1. from selenium.webdriver.common.keys import Keys #导入键盘操作库
    2. #全局传键盘操作
    3. ac = ActionChains(elem)
    4. 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来执行

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

    方法三:python和js混用

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

    实例:

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

    c) js语法

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

    条件语句:

    函数:

     

    d)窗口滚动操作

    方法一:scrollTo 滚动到**PX

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

    方法二:scrollBy 滚动**PX

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

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

    driver.find_element().location_once_scrolled_into_view

  • 相关阅读:
    云原生之使用Docker部署PDF多功能工具Stirling-PDF
    burp suite 2022下载及安装使用教程
    如何查看 Red Hat Enterprise Linux 中的系统内存利用率?
    E. ANDfinity
    为什么一般一个表数据不能超过2000万
    电脑安全模式怎么进?掌握这4个操作技巧!
    泛型知识汇总
    设计模式原则——单一职责原则(SPS)
    【数据结构】树与森林
    【改进灰狼优化算法】贪婪的非分层灰狼优化算法(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/qq_41130705/article/details/126316083