• Selenium自动化测试-文件上传


    ——————·今天距2021年还有321·——————

    这是ITester软件测试小栈第96次推文

    进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。

    在selenium中,文件上传可以分为两种场景:

    • input标签:这种可以用selenium提供的send_keys()方法轻松解决;

    • 非input标签:实现起来比较困难,可以借助第三方库pypiwin32。

    input标签上传文件

    input标签,可以直接调用send_keys时输入文件路径

    首先,写一个input标签的上传文件小demo:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>上传文件</title>
    </head>
    <body>
        <input type="file" name="my_file">
    </body>
    </html>
    

    浏览器打开效果如下:

    接着使用send_keys()上传文件:

    from selenium import webdriver
    
    
    driver = webdriver.Chrome()
    # input标签的html文件
    driver.get('http://localhost:63342/ui_autotest/upload.html')
    file_ele = driver.find_element_by_name('my_file')
    # 上传本地图片
    file_ele.send_keys(r"C:Users96984PicturesCamera Roll小猪佩奇.gif")
    
    
    

    非input标签上传文件

    这种上传方式需要借助第三方工具,主要有以下三种情况:

    1.AutoIt 去调用它生成的au3或者exe格式的文件;

    2.SendKeys第三方库;

    3.Python的pywin32库,通过识别对话框句柄来进行操作;

    以下介绍通过pywin32进行操作。

    环境安装:

    ①安装pypiwin32, 使用命令 pip install pypiwin32

    ②下载WinSpy包,解压后,双击可执行文件即可(微信公众号后台回复:WinSpy领取)。

    WinSpy使用介绍:

    ①打开一个可以上传文件的网址,比如 https://smallpdf.com/cn/jpg-to-pdf

    ②点击选择文件,会出现一个上传文件的弹窗

    ③打开安装好的WinSpy,选中按钮拖拽到文件名的输入框中,WinSpy会对应出现相关信息

    4.选择WinSpy底部按钮Tree, 查看弹窗按钮的层级关系

    通过代码实现上传文件

    import win32gui
    import time
    import win32con
    from selenium import webdriver
    
    
    driver = webdriver.Chrome()
    driver.get('https://smallpdf.com/cn/jpg-to-pdf')
    driver.maximize_window()
    # 找到选择文件元素
    file_ele = driver.find_element_by_css_selector('span.l0v3m7-7')
    file_ele.click()
    
    
    time.sleep(2)
    # #32770--对话框名字,即最外层整个弹窗
    dialog = win32gui.FindWindow('#32770', '打开')
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
    ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
    Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
    # 上面三行代码依次寻找对象,直到找到文件名输入框Edit对象的句柄
    
    
    # 找到打开按钮
    button = win32gui.FindWindowEx(dialog, 0, 'Button', None)
    time.sleep(3)
    # 发送本地文件
    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, r'C:Users96984PicturesCamera Roll小猪佩奇.gif')
    time.sleep(3)
    # 点击打开按钮
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)
    time.sleep(3)
    
    
    

    如果想批量上传文件呢,修改发送本地文件的代码如下:

    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, r'"C:Users96984PicturesCamera Roll小猪佩奇.gif" "C:Users96984PicturesCamera Rollu=3263232804,1739019004&fm=26&gp=0.jpg"')
    

    运行后,上传文件效果如下所示:

    最后是今天的分享:WinSpy安装包

    ITester软件测试小栈今日分享

    分享内容

    WinSpy安装包

    领取方式

    微信公众号后台回复:WinSpy

    有图有真相

    以上


    That‘s all

    更多系列文章

    敬请期待

    ITester软件测试小栈

    往期内容宠幸

    叮—这有一打让你666的测试终极资料包,请查收!

    打开PyCharm永久激活的这两个锦囊,再也不用担心写代码的时候让我付费了!

    QQ空间面试题放送,速度教科书式扑街补救offer!

    金九银十加薪季,测试题预热一波。

    测试面试题集-测试基础理论

    测试面试题集-测试用例设计:登录、购物车、QQ收藏表情、转账、充值、提现

    测试面试题集-生活物品测试:杯子、伞、钢笔、桌子

    Selenium系列文章汇总

    Fiddler基本使用

    Fiddler抓包介绍

    速看,APP测试之ADB最全指南!

    APP测试之Monkey压力测试(一)

    APP测试之Monkey压力测试(二)

    Python接口自动化-接口基础(一)

    Python接口自动化-接口基础(二)

    快来星标 置顶 关注

     后台 回复资源取干货

    回复答题挑战参与答题

    ITester软件测试小栈

    软件测试技术分享栈

    功能测试|自动化测试|专项测试|测试开发

    想要获取相关资料软件 ?

    测试交流Q群:727998947

    左右滑动添加coco或vivi 微信

  • 相关阅读:
    【排序】紧急集合
    Tallest Cow(线段树较易)
    递归实现排列型枚举
    文件输入输出文件
    【分治】逃亡
    折半查找法(二分)
    递归/非递归实现组合型枚举(全排列问题)
    9.25DAY1T2
    9.25DAY1T1
    POI2004[MOS] 贪心+DP
  • 原文地址:https://www.cnblogs.com/ITester520/p/13203341.html
Copyright © 2020-2023  润新知