全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

selenium传件的方式

发布时间:2022-08-12 11:17:00
发布人:wjy

  文件上传是所有UI自动化测试人员都要面临的一个比较头疼的文件, 今天就给大家分享一下几个处理文件上传的经验, 希望能给大家带来帮助, 避免掉到坑中.

selenium传件的方式

  首选我们需要区分出上传按钮的类型, 大体可以分为两种, 一种是input标签, 另一种就比较负载, 通过js, flash等实现.

  我们分别对这两种进行分析:

  1.input标签

  input标签相信大家都非常清楚, 是可以直接通过send_keys()进行文件上传的.

  来看代码案例:

  from selenium import webdriver

  from selenium.webdriver.common.by import By

  driver = webdriver.Chrome()

  driver.get('http://localhost/fileUpload.htm')

  file_upload = driver.find_element(By.ID, 'file') # 定位上传文件input标签

  file_upload.send_keys('d:\\test_imgage.png') # 输入上传的文件

  print(upload.get_attribute('value')) # 验证文件上传是否成功

  driver.quit()

  输出结果为: test_imgage.png

  因此, 大家可以通过输出的内容直观的观察看到, 对于input标签, 直接send_keys()是最简单的解决方案.

  2.非input类型上传

  对于这样的类型来说,难度就要升级一下了, 对于那些不是input标签实现的上传, 这种上传有些是使用a标签, 有用div的, 有用button的, 有用object的, 我们没有办法通过直接在网页上处理掉上传, 唯一的办法就是在打开系统弹窗, 去处理它.

  系统弹窗设计的层面已经不是selenium能解决的了, 怎么进行处理呢? 很简单, 可以借助于能够实现系统弹窗的方式来进行处理.

  那么常用的解决方案有那些呢?

  1.pywinauto来控制windwos上的空间实现自动化操作.

  2.SendKeys库

  3.pywin32, 识别对话框句柄, 再进行后续操作

  4.keybd_event

  5.AutoIt 第三方识别

  下面我们推荐两种案例:

  1.使用pywinauto来控制实现上传:

  首先安装pywinauto: pip install pywinauto

  来看代码案例:

  from selenium import webdriver

  import time

  import pywinauto

  driver = webdriver.Chrome()

  driver.get('https://localhost/fileUplaod.html')

  driver.switch_to.frame("iframe")

  driver.find_element(By.NAME, 'addImg').click()

  time.sleep(2)

  # 通过窗口打开

  program = pywinauto.Desktop()

  # 通过弹框名称进入控件中

  window = program['打开']

  # 输入上传图片的地址

  window['Edit'].type_keys(r'd:\test_imgage.png')

  #点击打开按钮

  window['Button'].click()

  2.SendKeys库实现文件上传

  首先安装SendKeys: pip install SendKeys

  来看代码案例:

  from selenium import webdriver

  import time

  import SendKeys

  driver = webdriver.Chrome()

  driver.get('https://localhost/fileUplaod.html')

  file_upload = driver.find_element(By.ID, 'file')

  file_upload.click()

  time.sleep(1)

  # SendKeys

  SendKeys.SendKeys(r'd:\test_imgage.png') # 发送文件地址

  SendKeys.SendKeys("{ENTER}") # 发送回车键

  print(file_upload.get_attribute('value'))

  driver.quit()

  通过SendKeys库可直接向焦点输入内容, 需要注意添加等待时间.

  3.pywin32库实现文件上传

  首先安装pywin32: pip install pywin32

  安装完成后, 在python环境目录下Lib\site-packages\win32 目录中, 可以看到所有的API模块.

  如果对pywin32的使用不是非常清楚, 可以查看pywin32.CHM就可以.

  来看代码案例:

  import win32gui

  import win32con

  # 一级窗口

  no1 = win32gui.FindWindow("#32770","打开")

  # 二级窗口,4个参数:父级;从父级的第几个儿子开始检索,0表示第一个;自身类名;文本内容,没有则None

  combo_box_ex32 = win32gui.FindWindowEx(no1, 0, "ComboBoxEx32", None)

  # 3级窗口

  combo_box = win32gui.FindWindowEx(combo_box_ex32,0,"ComboBox",None)

  # 4级窗口

  edit = win32gui.FindWindowEx(combo_box,0,"Edit",None)

  # 二级打开按钮

  btn = win32gui.FindWindowEx(no1, 0, "Button", "打开(&O)")

  # 输入文件地址

  win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, r'd:\test_imgage.png')

  # 点击打开按钮 提交文件

  win32gui.SendMessage(no1, win32con.WM_COMMAND, 1, btn)

  4.autoIT介绍

  1.AutoIT是一个类似脚本语言的软件,利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作,实现自动化。

  2、使用特点

  利用AutoIT编写合适的脚本,然后将脚本编译成可执行文件,在自动化实现时,直接调用此脚本实现文件上传。

  备注:编写脚本和编译,需要借助AutoIT提供的工具,但是脚本编译成可执行文件后,可以直接使用,不再需要安装AutoIT。

  从官网上面下载AutoItv3并安装,安装好了之后可以在开始菜单看到AutoIt的各种工具。

selenium传件的方式

  其中分为几类,

  AutoIT Window Info用来识别Windows控件,根据识别的控件信息编写脚本;

  Complie Script to .exe,用来将利用AutoIt编写的脚本,编译成可执行文件;

  Run Script 用来执行AutoIT的脚本信息;

  SciTE Script Editor用来编写AutoIt脚本。

  接下来就是利用以上四种工具,来编写AutoIT脚本,然后编译成可执行文件。

  更多关于软件测试培训的问题,欢迎咨询千锋教育在线名师,如果想要了解我们的师资、课程、项目实操的话可以点击咨询课程顾问,获取试听资格来试听我们的课程,在线零距离接触千锋教育大咖名师,让你轻松从入门到精通。

相关文章

明道、teambition、Tower.im、Worktile、trello的功能都有哪些?

明道、teambition、Tower.im、Worktile、trello的功能都有哪些?

2023-10-14
反欺诈中所用到的机器学习模型有哪些?

反欺诈中所用到的机器学习模型有哪些?

2023-10-14
强化学习中on-policy与off-policy有什么区别?

强化学习中on-policy与off-policy有什么区别?

2023-10-14
为什么交叉熵可以用于计算代价?

为什么交叉熵可以用于计算代价?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取