千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > selenium传件的方式

selenium传件的方式

来源:千锋教育
发布人:wjy
时间: 2022-08-12 11:17:00 1660274220

  文件上传是所有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脚本,然后编译成可执行文件。

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

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT