专栏首页APP测试Selenium自动化测试-文件上传

Selenium自动化测试-文件上传

进行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:\Users\96984\Pictures\Camera 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:\Users\96984\Pictures\Camera 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:\Users\96984\Pictures\Camera Roll\小猪佩奇.gif" "C:\Users\96984\Pictures\Camera Roll\u=3263232804,1739019004&fm=26&gp=0.jpg"')

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

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

ITester软件测试小栈今日分享

分享内容

WinSpy安装包

领取方式

微信公众号后台回复:WinSpy

有图有真相

本文分享自微信公众号 - ITester软件测试小栈(ITestingA),作者:胖虎喝酸奶

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Selenium自动化测试-4.By定位及如何确定元素唯一

    (1)有时候我们不知道用哪种方法来定位元素,By定位可以根据实际场景设定定位策略。

    ITester软件测试小栈
  • Python自动化测试-正则表达式解析

    对于正则表达式,第一眼时觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完全不知所云。其实唯一难的就是组合起来之后,可读性比较差,而且不容易理解,其实能看...

    ITester软件测试小栈
  • print,Python旅程开始的地方!

    通过print('HelloWorld'),Python为你打开一扇门,你已经轻轻地推开了Python世界的大门。

    ITester软件测试小栈
  • Chrome新标签无法打开网页的解决办法

    飞奔去旅行
  • google的GCM推送使用简介

    转载请注明出处:http://blog.csdn.net/newhope1106/article/details/54709916

    爱撸猫的杰
  • UWP 手绘视频创作工具技术分享系列 - 全新的 UWP 来画视频

    从2017年11月开始,我们开始规划和开发全新的来画Pro,在12月23日的短视频峰会上推出了预览版供参会者体验,得到了很高的评价和关注度。吸取反馈建议后,终于...

    Shao Meng
  • 云快照与云备份的区别?

    云计算的服务不断增加,出现了一些功能看上去类似的产品,如“云快照与云备份”。我们今天从实际操作演示,来总结一下两者之间的区别。

    希望的田野
  • 逻辑漏洞之并发测试【1】

    并发测试主要测试场景:签到、每天领积分等,测试是否并发发送请求服务器可多次响应。

    逆向小白
  • 基于开源SuperSocket实现客户端和服务端通信项目实战

    跟着阿笨一起玩NET
  • Gitlab禁用Gravatar头像 原

    使用Gitlab时,Gravatar头像破图了,参考如下链接的解决方案,使用了多说的Gravatar CDN: 解决Gitlab的Gravatar头像无法显...

    donghui

扫码关注云+社区

领取腾讯云代金券