利用Selenium实现图片文件上传的两种方式(解决Selenium不能上传文件问题)

在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同。

  一、直接利用Selenium实现

  这种方式是最简单的一种实现方式,但是依赖于开发的实现。

  当开发直接使用file类型的input实现图片文件的上传时,实例:<input type="file" name=''filename">

  我们可以直接利用Selenium提供的方法实现文件上传,但是因为依赖开发的实现,而且目前实现基本都会利用框架,所以这种实现方式有很大的局限性。

  首先找到元素:WebElement  file = driver.findElement(By.name("filename"));

  给此元素设置值:file.sendKeys("E:\testfile.jpg");

 

  二、利用AutoIT工具实现

  目前,一般实现文件图片上传的方式都是有一个按钮,点击之后直接调用操作系统自身的弹框,选择文件后,实现上传。因为Selenium不支持调用操作系统的操作,所以这种情况下,利用Selenium无法完成图片上传,这时,我们可以选择借用其他工具实现。

  1、AutoIT介绍

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

  2、实现原理

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

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

  3、自动化调用

  AutoIT脚本编译成可执行文件后,放到本地的某一个目录下

  自动化实现过程中,需要上传图片时,首先定位到【上传】字样文本,点击此按钮

  执行编辑后的可执行文件,实现文件上传

  实例:

  假如,要上传图片的页面及html显示如下:

利用AutoIT编写的脚本编译后的可执行文件的存放目录:E:\upfile.exe

  自动化实现代码:

python实现:

4、AutoIT安装

  下载并安装AutoIT,下载链接:https://www.autoitscript.com/site/autoit/

  AutoIT安装成功后【全部默认安装】,可以在开始菜单下看到AutoIT的所有工具,如下图所示:

 其中分为几类,AutoIT Window Info用来识别Windows控件,根据识别的控件信息编写脚本;Complie Script to .exe,用来将利用AutoIt编写的脚本,编译成可执行文件;Run Script 用来执行AutoIT的脚本信息;SciTE Script Editor用来编写AutoIt脚本。

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

5、利用AutoIT编写脚本

  (1)  AutoIt Window Info

  打开此工具,利用此工具来识别Windows控件信息,如输入框、按钮等。

  此工具打开的界面显示:

用鼠标拖住工具上的Finder Tool的图标(即图中蓝色圈圈部分)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分(图中红框标出的部分)。

  从显示的结果得知,此控件的Title=“打开”,Class为Button,Instance=1。我们就是利用控件的这些信息,定位控件,编写脚本。

  (2) SciTE Script Editor

  根据以上所识别的空间信息,利用此编辑器,利用此软件根据AutoIT的语法编写脚本。

  附实现文件上传需要的几个方法:

  ControlFocus ( "窗口标题", "窗口文本", 控件ID)   设置输入焦点到指定窗口的某个控件上

  WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] )  暂停脚本的执行直至指定窗口存在(出现)为止

  ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" )   修改指定控件的文本

  Sleep ( 延迟 )   使脚本暂停指定时间段

  ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] )   向指定控件发送鼠标点击命令

  其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1

  实例:

ControlFocus("打开","","Edit1")
WinWait("[CLSAA:#32770]","",10)
ControlSetText("打开","","Edit1","C:\Users\testing\Pictures\1.png")
Sleep(2000)
ControlClick("打开","","Button1")
Sleep(2000)

AutoIT脚本编写完成后,可以通过菜单栏“Tools”-->“Go” 运行一下脚本。注意,运行的时候,上传窗口需处于打开状态。

  6、AutoIT脚本编译成可执行文件

  脚本编辑运行无误后,将其保存。然后打开Complie Script to .exe工具,将保存的脚本编译成exe可执行文件。

  点击“Browse”选择保存的脚本文件,点击“Convert”将其生成exe文件。

结束

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Selenium是一个流行的自动化测试工具,用于浏览器操作,包括文件上传。以下是几种在Selenium上传文件方式: 1. **使用WebElement的sendKeys()方法**: - 找到文件输入元素(`<input type="file">`),通常这个元素有一个`sendKeys()`方法可以用来模拟用户选择文件。 ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC file_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "fileInput")) ) file_input.send_keys("path/to/your/file") ``` 2. **使用ActionChains模拟点击并选择文件**: - 如果`sendKeys()`不适用,例如在某些现代浏览器或非标准元素上,可以使用`ActionChains`来模拟真实用户操作。 ```python from selenium.webdriver.common.action_chains import ActionChains action = ActionChains(driver) action.click(file_input).send_keys("path/to/your/file").perform() ``` 3. **使用WebDriverWait和filechooser模拟**: - 对于某些复杂的情况,可能需要模拟文件选择器的交互,这通常涉及到处理JavaScript事件。 ```python from selenium.webdriver.support.ui import Select select = Select(driver.find_element_by_id("fileInput")) select.select_by_visible_text("Your File Name") ``` 相关问题-- 1. Selenium如何识别文件输入元素? 2. 在哪些情况下会使用ActionChains模拟文件上传? 3. 如何处理文件选择器的交互,而不只是简单地发送键入事件?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值