Selenium中级 | Selenium借助AutoIt完成文件的上传与下载
有时候我们在Web系统中点击了某个按钮之后,也会弹出Windows的窗口,最常见的就是文件的上传与下载。
我们知道Selenium是专门针对Web系统的测试工具,它自身是无法操作windows窗口的,这个时候就可以借助第三方的小工具AutoIt来实现对文件的上传与下载。
AutoIt是一个开源的小工具,它可以用来做一些Windows GUI的自动化,可以模拟鼠标和键盘操作。
本篇文章来介绍下Selenium如何借助AutoIT来实现文件的上传。
整体的思路是:
1. 先下载安装AutoIt工具组
2. 使用Selenium脚本点击“文件上传”的按钮,调出Windows窗口
3. 把控制权交给AutoIt,即使用如下语句调用AutoIt的脚本
Runtime.getRuntime().exec("D:/AutoItScripts/upload.exe");
注:AutoIt的脚本要用AutoIt工具组件中的sciTE Script Editor来编辑,之后要转化为exe文件,供selenium调用
在后面步骤中会具体讲解。
4. 在Selenium中正常执行文件上传后的后续步骤。
具体步骤如下:
1. 下载安装AutoIt
请参见:AutoIT的下载与安装
2. 准备AutoIt操控Windows窗口的脚本
2.1 打开AutoIT工具组件中的脚本编辑器sciTE Script Editor
2.2 在编辑器中输入如下类似语句
WinWaitActive("文件上传")
Send("D:\UploadFiles\1.docx")
Sleep(2000)
Send("{ENTER}")
把上面的脚本保存为扩展名为au3的文件,上例中保存的文件为upload.au3
2.3 脚本解释
WinWaitActive("文件上传")
该命令用于**通过selenium点击上传按钮打开的Windows窗口
所传的参数为打开的Windows窗口名:文件上传
注:如果默认语言设置的是英文的话,窗口名称在火狐中会变成:File Upload
另外Chrome中的窗口名称也会和火狐有些不同,大家记得传自己打开窗口的具体名称即可。
Send("D:\UploadFiles\1.docx")
使用Send命令指定上传的具体文件
Send命令的参数需要是所上传文件的全路径,上例中为存放在D盘UploadFiles文件夹下的1.docx文档
Sleep(2000)
AutoIT脚本执行暂停2秒
注:单位是毫秒,对于上传文件过大需要一定时间的需要加一个合适的暂停时间
Send("{ENTER}")
Send("{ENTER}")
使用Send命令发送键盘回车(Enter)操作,相当于点击Windows窗口中的“打开”按钮
注:如果你的输入法默认是中文的,则需要像上例中一样写两行Send("{ENTER}"),第一行确认你的输入,第二行相当于点击“打开”按钮,如果是英文的输入法,则只需要一行即可。
2.4 将保存的AutoIT脚本转为化Selenium可以调用的exe文件
在上面的步骤中我们已经完成了upload.au3的编辑及保存,现在需要把au3的文件转化为exe的文件
转化很简单,只需要选中upload.au3,在右键菜单中选择Compile File即可,点击后即会生成upload.exe的文件
至此,我们已经把AutoIt部分的工作都做完了。
3. 在Selenium中通过一个简单的语句调用上面的upload.exe文件就可以了
//调用autoIt exe文件
Runtime.getRuntime().exec("D:\\upload.exe");
传的参数为upload.exe文件在电脑中的全路径,通过此语句Selenium把控制权交给了AutoIt
这样就完成了在Selenium中借助AutoIt进行文件的上传,下载也是类似的操作。
下面是一个Selenium脚本的一个大概示例:
public static void main(String[] args) throws InterruptedException, IOException
{
//定义Gecko driver的获取地址
System.setProperty("webdriver.gecko.driver", "D:\\BrowserDriver\\geckodriver.exe");
//启动火狐浏览器(默认安装)
WebDriver driver = new FirefoxDriver();
//打开你的网址
driver.get(URL);
//点击文件上传的按钮
WebElement element = driver.findElement(By.name("file"));
element.click();
//调用 autoit exe file
Runtime.getRuntime().exec("D:\\upload.exe");
}
完成。
****************************************************************************************************
最近我会持续更新Selenium Java的相关文章,也请大家多多关注我的视频课程
*****************************************************************************************************