zoukankan      html  css  js  c++  java
  • 【selenium学习 -6】文件上传操作的两种方式

    本文主要讲解,在selenium自动化中,实现文件上传的两种方式。

    本章节实验的HTML代码:

    <html>
    <form action="http://baidu.com" target="" id="uploadForm" enctype="multipart/form-data"></form>
          <input id="file" type="file" name="file" />
          <input type="submit" name="submit" id="submit" value="upload" />
    </form>
    </html>

    第一种方式是,使用send_keys来实现文件的上传

    <input type="file">可以先定位到该元素,然后直接将文件的路径作为send_keys的参数

    from selenium import webdriver
    import time
    
    if __name__ == '__main__':
        driver = webdriver.Chrome()
        driver.get(r"file:///E://Project//Selenium//upload.html")
        driver.maximize_window()
        ele =driver.find_element_by_id("file")
        ele.send_keys(r"E:ProjectSelenium	est.jpg") #此步骤中直接将文件的路径作为send_keys的参数传递
        time.sleep(3)
        driver.find_element_by_id("submit").click()

    第二种方式是,点开Windows的窗口,使用 PyUserInput 库进行全局的鼠标键盘操作。

    1.第一步需要安装PyUserInput,可以通过pip install PyUserInput直接安装,但是在安装过程中,提示需要首先安装PyHook。

    PyHook只能离线安装,进入https://www.lfd.uci.edu/~gohlke/pythonlibs/  选择合适自己的版本

    比如 pyHook‑1.5.1‑cp27‑cp27m‑win32.whl 代表 pyHook的1.5.1版本 适用于python2.7版本 windows32位 

    pyHook‑1.5.1‑cp27‑cp27m‑win_amd64.whl 代表 pyHook的1.5.1版本 适用于python2.7版本 windows64位 

    下载好后,可以在cmd中,输入以下内容安装

    pip install  pyhook-xxx-xxx.whl路径

    2.安装pyhook后,再进行PyUserInput便可顺利完成。测试代码如下。

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    #PyMouse和PyKeyboard的使用,导入以下,而不是导入PyUserInput
    from pymouse import PyMouse
    from pykeyboard import PyKeyboard
    
    if __name__ == '__main__':
        mouse = PyMouse()
        key =PyKeyboard()
        driver = webdriver.Chrome()
        driver.get(r"file:///E://Project//Selenium//upload.html")
        driver.maximize_window()
        ele =driver.find_element_by_id("file")
        ActionChains(driver).click(ele).perform()
        time.sleep(3)
        #点开Windows窗口后,光标就会自动在windows的输入栏内,可以直接进行全局输入
        key.type_string(r"E:ProjectSelenium	est.jpg")
        time.sleep(5)
        #输入后,再按回车
        key.press_key(key.enter_key)

    总结:因为web的代码无法操作Windows的窗口,所以衍生出了两种方式,一种直接调API,一种进行系统层面的全局操作。当然,能用第一种尽量用第一种,方便简单。如果实在无法,也可以使用第二种方式

    第二种方式,因为是在全局进行操作,所以也可以应用在其他C/S上的测试,这个问题,以后再细说吧

  • 相关阅读:
    bzoj4513: [Sdoi2016]储能表
    bzoj4000: [TJOI2015]棋盘
    bzoj3067: Hyperdrome
    bzoj4943: [Noi2017]蚯蚓
    bzoj4044: [Cerc2014] Virus synthesis
    bzoj3676: [Apio2014]回文串
    bzoj4543: [POI2014]Hotel加强版
    bzoj1921: [Ctsc2010]珠宝商
    bzoj4754: [Jsoi2016]独特的树叶
    作图的配色
  • 原文地址:https://www.cnblogs.com/ronyjay/p/12907028.html
Copyright © 2011-2022 走看看