写在前面:
上传文件是每个自动化测试同学会遇到,而且可以说是面试必考的问题,标准控件我们一般用sendkeys()就能完成上传,但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了,也就是说用selenium的APi已经无法完成上传操作了,这时我们就要借用第三方工具Autolt来完成上传文件的操作。
准备工作
1、下载autolt
官网:https://www.autoitscript.com/site/autoit/downloads/,请自行下载
也可以百度下载绿色版,免安装,笔者就是绿色版,下面案例都以绿色版进行讲解
附百度网盘:链接: https://pan.baidu.com/s/1szmGK7wudsXKkH5xkEOnOQ 提取码: dysb
2、下载后解压到指定目录
3、被测网页HTML代码如下
编写上传脚本
- ControlFocus("title1","","Edit1");
- WinWait("[CLASS:#32770]",10);
- ControlSetText("title1","Edit1","文件地址");
- Sleep(2000);
- ControlClick("title2","Button1");
- 接下来是,最后一行代码中的title和button1
AutoIt示例脚本
- ;ControlFocus( "窗口标题",窗口文本",控件ID) 设置输入焦点到指定窗口的某个控件上
- ControlFocus(打开"",1)">Edit1)
- ;WinWait( " [,1)"> [,超时时间]] ) 暂停脚本的执行直至指定窗口存在(出现)为止
- WinWait(10)
- ;ControlSetText( 新文本 ) 修改指定控件的文本
- ControlSetText(C:\Users\ZF\Desktop\zf.png)
- ;Sleep( 延迟 ) 使脚本暂停指定时间段,这里是以毫秒为单位的
- Sleep(1000)
- ;ControlClick( 次数]]) 向指定控件发送鼠标点击命令
- ControlClick(Button1)
生成可执行程序
选择工具-->编译脚本
自动化测试脚本调用upload.exe完成上传
具体代码如下:
- import org.openqa.selenium.By;
- org.openqa.selenium.WebDriver;
- org.openqa.selenium.chrome.ChromeDriver;
- org.testng.annotations.AfterClass;
- org.testng.annotations.BeforeClass;
- org.testng.annotations.Test;
- java.io.IOException;
- /**
- * @author rongrong
- * 上传文件演示案例
- */
- public TestUpload {
- WebDriver driver;
- @BeforeClass
- void beforeClass() {
- System.setProperty("webdriver.chrome.driver","driver/chromedriver.exe");
- driver = new ChromeDriver();
- }
- @Test
- testUpload() {
- driver.get("file:///C:/Users/Administrator/Desktop/index.html");
- driver.manage().window().maximize();
- //选择文件
- driver.findElement(By.id("upload")).click();
- try {
- Runtime.getRuntime().exec("upload.exe");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @AfterClass
- afterClass() {
- driver.quit();
- }
- }
效果如下:
到此使用自动化调用autolt上传文件的案例演示结束,可能很多同学会纠结autolt语法不会写啥的,大可不必纠结,基本写完是一劳永逸的,不会在维护了,更多autolt的用法,有兴趣的同学可以自行去官网查看了解。