Selenium如何上传多张图片

来源:互联网 发布:linux同步软件 编辑:程序博客网 时间:2024/05/22 05:15

这个是在本人的自动化测试项目中遇到的问题,本来就是一个简单的上传图片的问题。分为上传一张图片和多张图片,在这个测试项目中多张图片限制为三张图片
一张图片:
这里写图片描述
三张图片:
这里写图片描述

在此说一下我的心路历程,一张图片的上传用了两种方法均可以。
一种直接用sendkeys方法上传

 driver.findElement(By.className("upload-fileinput")).sendKeys("E:\\123.jpg");

另外一种用AutoIT方法上传。用AutoIt的原因是selenium无法识别windows的窗口,所以要借助autoIT工具来实现。

AutoIt脚本

;ControlFocus("title","text",controlID) Edit1=Edit instance 1ControlFocus("选择要加载的文件", "","Edit1"); Wait 10 seconds for the Upload window to appear  WinWait("[CLASS:#32770]","",10); Set the File name text on the Edit field  ControlSetText("选择要加载的文件", "", "Edit1", "F:\\pic\\1.png")  Sleep(2000); Click on the Open button  ControlClick("选择要加载的文件", "","Button1");

最后一定要用AutoIt编译成.exe文件,才可以被调用。

这样上传一张图片的问题就被解决了。但是在上传组图的时候,上述两种办法都没有办法完美解决。AutoIt曾经遇到过一次可以成功解决上传三张图片的问题,但是多次执行代码,效果不佳。所以后来想到借助另外一种办法sikulix来解决上传三张图片的问题。

1、首先在pom.xml中添加依赖

 <dependency>                <groupId>com.sikulix</groupId>                <artifactId>sikulixapi</artifactId>                <version>1.1.0</version>           </dependency>

2、将windows窗口中需要操作控件的图片截图保存下来

这里写图片描述

3、将需要上传的图片保存在某个路径

这里写图片描述

4、在测试脚本中调用sikulix

          driver.findElement(By.xpath("(//input[@type='file'])[1]")).click();//        在Windows上操作打开按钮          Screen s=new  Screen();//        定义要上传的图片存放路径          String  imgPath_p="F:\\pic\\";//        定义sikulix的图片存放路径          String  imgPath_s="D:\\sikulix\\";          s.type(imgPath_p+"1.png");          s.click(imgPath_s+"open.png");          Thread.sleep(3*1000);          driver.findElement(By.xpath("(//input[@type='file'])[2]")).click();          s.type(imgPath_p+"2.jpg");          s.click(imgPath_s+"open.png");          Thread.sleep(3*1000);          driver.findElement(By.xpath("(//input[@type='file'])[3]")).click();          s.type(imgPath_p+"3.jpg");          s.click(imgPath_s+"open.png");          Thread.sleep(3*1000);

接下来你会发现,执行脚本,三张图片成功上传

这里写图片描述

总结一下:上传图片的方式有三种:第一种直接用sendkeys方法,一般是针对input按钮;第二种是借助于AutoIT工具;第三种就是借助于sikulix。反正遇到问题就是多尝试咯。