zoukankan      html  css  js  c++  java
  • selenium+python自动化--文件下载弹窗处理(PyKeyboard)

    selenium+python自动化99--文件下载弹窗处理(PyKeyboard)

    上海悠悠 从零开始学自动化测试

    前言

    在web自动化下载操作时,有时候会弹出下载框,这种下载框不属于web的页面,是没办法去定位的(有些同学一说到点击,脑袋里面就是定位!定位!定位!)
    有时候我们并不是非要去定位到这个按钮再去点击,学会使用键盘的快捷键操作,也能达到一样的效果。
    之前讲过一篇Selenium2+python自动化75-非input文件上传(SendKeys)这个当时是基于python2写的。
    最近很多小伙伴开始用python3了,这个SendKeys在python3上没法用,python3需要用PyUserInput,详细安装教程地址Selenium+python自动化84-python3.6用PyUserInput

    安装依赖包:

    • 依赖pywin32
    • 依赖pyHook

    PyKeyboard键盘操作

    PyUserInput模块里面主要有两个类:

    • PyMouse, 专门模拟鼠标操作
    • PyKeyboard,专门模拟键盘上的操作

    先用手工在键盘上操作下,记住操作步骤:按Tab键—按Enter键

    代码参考

    # coding:utf-8
    
    from selenium import webdriver
    from pykeyboard import PyKeyboard
    from pymouse import PyMouse
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe")
    
    time.sleep(3)
    # 默认在取消按钮上,先切换到保存文件上
    k = PyKeyboard()
    
    # 发送tab
    k.press_key(k.tab_key)
    k.release_key(k.tab_key)
    
    time.sleep(3)
    # 发送回车

    这里用到两个方法,一个是press_key按住Tab键,另外一个是release_key释放按键。其实还有个方法tap_key

    tap_key模拟点击

    先看下tap_key源码是怎么设计的,实际上tap_key就是封装的press_key和release_key这2个方法

    • character 传对应的键盘事件
    • n=1 默认只点一次
    • interval=0 如果有多次点击操作,中间的间隙时间,默认sleep时间为0
        def tap_key(self, character='', n=1, interval=0):
            """Press and release a given character key n times."""
            for i in range(n):
                self.press_key(character)
                self.release_key(character)
                time.sleep(interval)

    改成tap_key操作

    # coding:utf-8
    
    from selenium import webdriver
    from pykeyboard import PyKeyboard
    from pymouse import PyMouse
    import time
    
    #  **作者:上海-悠悠, QQ交流群:646645429**
    
    driver = webdriver.Firefox()
    driver.get("https://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe")
    
    time.sleep(3)
    # 默认在取消按钮上,先切换到保存文件上
    k = PyKeyboard()
    
    # 模拟Tab
    k.tap_key(k.tab_key)
    time.sleep(3)
    # 发送Enter回车
    k.tap_key(k.enter_key)

    PyKeyboard其它操作

    除了能模拟tab,enter这种操作,也能模拟在输入框输入内容.
    基本操作方法,如输入h:k.tap_key(“h”)

    # coding:utf-8
    from selenium import webdriver
    from pykeyboard import PyKeyboard
    from pymouse import PyMouse
    import time
    
    #  **作者:上海-悠悠, QQ交流群:646645429**
    
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com/")
    time.sleep(3)
    k = PyKeyboard()
    
    def input_str(s):
        '''输入一串英文'''
        for i in s:
            k.tap_key(i)
        k.tab_key(k.enter_key)
    
    input_str("helloworld!")
  • 相关阅读:
    Spring初次整体了解及一篇SpringBoot的稿子。。。
    JAVA日志框架log4j和slf4j
    初学SpringBoot之三
    初学SpringBoot之二
    初学SpringBoot之一
    (转)SWITCH_ROOT
    (转)initrd和initramfs的区别
    (转)三星HDMI驱动框架解析
    (转)linux内存分析
    (转)linux中挂载IMG文件
  • 原文地址:https://www.cnblogs.com/linlang781/p/9564148.html
Copyright © 2011-2022 走看看