使用selenium做自动化时,我们经常会遇到的一个让人头疼的问题就是 文件上传 。
问题的难点在于selenium无法识别并操作Windows窗口,若我们可以绕过弹出框直接把文件信息上传给选择按钮,难点就解决了。
以下是常见页面形式 :
分析HTML ,发现无论是普通前台还是Extjs,他们的html有一个共同的特点,具有以下代码:
< input ..... type ="file" ...../ >
ok,只要我们使用selenium自带的sendkeys把文件路径(相对绝对无所谓)传给该元素,就可绕过选择窗口直接上传文件.
解决方案诞生了
driver.findElement(XXXXX).sendKeys("filePath");
Have a Try
博客园上传图片:driver.findElement(By.name("file")).sendKeys("C:\Users\123\Pictures\a.png");
QQ邮箱上传附件:driver.findElement(By.name("UploadFile")).sendKeys("C:\Users\123\Pictures\a.png");
定位元素根据情况而定,不一定用name;文件路径可以使相对路径,大家自行修改就好
注意: 执行sendKeys的元素一定要符合 input 和 type="file" 条件,否则就是你没找对上传文件的对象,会上传失败的。
像这样的,一定注意不要上传到前面的那个input上,否则会失败的