selenium解决上传文件问题之总结

摘要:
1、 上传文件框在输入表单中。首先,找到上传按钮以发送文件驱动程序。findElement(按.id(“XX”))。sendKeys(“D:publicclasshanghuang{publicstaticvoidmain(String[]args)throwsException{WebDriverdriver=newFirefoxDriver();

一、上传文件框是input形式

  • 首先定位上传按钮
  • 发送要上传的文件
driver.findElement(By.id("XX")).sendKeys("D:\20.jpg");

利用Robot类处理文件上传。

其大致流程可以为:

1、 利用selenium点击web上本地文件的上传按钮;

2、 在弹出的弹框中,文件路径输入框默认的是光标的聚焦,将文件在磁盘上的路径通过拷贝和黏贴的方法写上去。

3、 通过按下回车,默认触发弹框的确定按钮,完成文件上传的功能。

这里以百度首页的利用图片搜索为例:

  打开百度首页,搜索按钮左侧有一个照相机的图标,点击可以选择图片搜索,我们通过本地上传图片的过程来模拟文件自动化上传操作。准备条件,在百度图片搜索一个图片,保存到桌面,例如找到一个关于selenium的图片,然后保存在桌面,名称为selenium.jpg。

相关实现代码如下:

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.datatransfer.StringSelection;

import java.awt.event.KeyEvent;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class shangchuang {

public static void main(String[] args)throws Exception {

    WebDriver driver=new FirefoxDriver();

    driver.manage().window().maximize();

    driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

   

    driver.get("https://www.baidu.com");

    //指定图片路径

    StringSelection selection=new StringSelection("C:\Users\你的用户名\Desktop\selenium.jpg");

    //把图片路径复制到剪切板

    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);

    System.out.println("selection"+selection);

    //点击照相机这个工具

    driver.findElement(By.xpath("//*/span[@class='soutu-btn']")).click();

    //点击本地上传图片

    driver.findElement(By.xpath("//*/div[@class='upload-wrap']")).click();

  

    //新建一个Robot类的对象

    Robot robot=new Robot();

    Thread.sleep(1000);

    //按下Ctrl+V

    robot.keyPress(KeyEvent.VK_CONTROL);

    robot.keyPress(KeyEvent.VK_V);

    //释放Ctrl+V

    robot.keyRelease(KeyEvent.VK_CONTROL);

    robot.keyRelease(KeyEvent.VK_V);

    Thread.sleep(2000);

    //点击回车

    robot.keyPress(KeyEvent.VK_ENTER);

    robot.keyRelease(KeyEvent.VK_ENTER);

}

}

二、上传文件框不是input形式

  • 当上传文件框不是input时,需要借助AutoIT这个工具
  • 下载地址:https://www.autoitscript.com/site/autoit/downloads/
  • 注意一下,安装过程中32位还是64位,安装后,在开始菜单中会显示这些:

selenium解决上传文件问题之总结第1张

  • 常用的三个组件:
  • AutoIT Window Info(x64) :用来定位
  • SciTE Script Editor :用来写脚本
  • Compile Script to .exe(x64):用来转换成exe

下面开始定位上传框:

  1. 将Finder Tool拖拽到文件名处,如图:
    这里写图片描述
  2. 记录一下如下内容:
    Title=打开,ClassnameNN=Edit1,Class=#32770

注:每个浏览器打开的上传框的title不一样,需注意。
  3. 再次定位打开按钮:

selenium解决上传文件问题之总结第3张

    1. 记录如下内容:
      ClassnameNN=Button1
    2. 打开SciTE Script Editor 开始写脚本:
;ControlFocus("title" ,"text",controlID)定位到打开窗口
ControlFocus("打开","","Edit1")
;等待元素出现,时间为20s
WinWait("[CLASS:#32770]","",20)
;设置上传的文件
ControlSetText("打开","","Edit1","C:UsersYBBDesktop1.png")
;点击上传按钮
ControlClick("打开","","Button1");

测试是否成功的方法:

    • 在浏览器中测试:
      点击上传文件按钮后,弹出选择文件框,运行脚本时,要保证此窗口打开状态,在SciTE Script Editor中点击Tools的GO,即可运行成功。如图:
      这里写图片描述

在cmd中测试:
首先要将SciTE Script Editor中编写的脚本转换成exe文件,就需要用到Compile Script to .exe(x64),打开后如图:
这里写图片描述
打开cmd,输入如下图, 双引号不要省略:
这里写图片描述
把脚本代码放进eclipse中,先定位上传文件按钮,

第一种写法:
driver.findElement(By.xpath("XXXX")).click();
String[] str = {"C:\Users\YBB\Desktop\upload.exe"};
try{
   Runtime.getRuntime().exec(str);
}catch(IOException e){
   e.printStackTrace();
}

第二种写法比较简便:
driver.findElement(By.xpath("XXXX")).click();
Runtime.getRuntime().exec("C:\Users\YBB\Desktop\upload.exe");

执行之后,上传成功!

如果遇到upload.exe不好用,重新保存一次就好了。

免责声明:文章转载自《selenium解决上传文件问题之总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IntelliJ IDEA创建第一个Groovy工程小程序下拉刷新下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Hive:ORC File Format存储格式详解

一、定义   ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。 据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。 运用ORC File可以提高Hive的读、写以及处理数据的性能。和RCFile格式相比,ORC...

使用vscode快速建立vue模板

当我们希望每次新建.vue文件后,vscode能够根据配置,自动生成我们想要的内容。 打开vscode编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索框,我们输入vue,将代码ctrl+c 到vue-html.json { "Print to console": { "prefix": "vue",...

python3.6+pycharm+robotframework 环境搭建

参考文档:https://www.cnblogs.com/chenyuebai/p/8359577.html, https://www.cnblogs.com/jiyanjiao-702521/p/9235724.html, https://blog.csdn.net/weixin_33829657/article/details/86128739 安装配...

uniapp支付宝小程序上传图片转base64

最近使用uniapp涉及到一个上传图片的功能,原本看官方文档api觉得没问题,正常开发, 1. 首先微信端没问题 uni.getFileSystemManager().readFile({ filePath: url, //选择图片返回的相对路径 encoding: "base64", //编码格式 succes...

python egg

经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,它用来安装egg包。egg包是目前最流行的python应用打包部署方式。如何制作和安装egg包...

eclipse,sts怎么把多个微服务或者多个项目备份到码云的同一个仓库下进行管理

观前提示 第一部分:提交方法 第二部分:可能出现的错误和解决方法 第三部分:自己的尝试过程 -----------------------------------------------------------第一部分-------------------------------------------------------- 前提:无法在eclipse...