selenium 上传文件
- 前端代码
<html>
<meta http-equiv="content-type" content="txt/html; charset=utf-8" />
<body>
<form name="form1" method="post" enctype="multipart/form-data">
<label for="file">上传:</label>
<input type="file" name="file" id="file" />
<br />
<input type="hidden" name="multi" value="false"/>
<input type="submit" name="submit" value="提交" />
</form>
</body>
</html>
1、input标签上传
开发使用<input type="file" name=''filename">
进行文件上传,则selenium可以使用最简单的send_keys()即可
import time
from selenium import webdriver
import os
driver = webdriver.Chrome()
driver.get(r"C:\Users\LGY\PycharmProjects\t1\123.html")
driver.find_element_by_id("file").send_keys(os.getcwd()+os.path.sep+"6.png")
time.sleep(3)
driver.quit()
- 多个文件上传:
如果上传支持多个文件上传:则把send_keys的值写成多个即可如:
"C:\\1.py""D:\\2.py"
2、其他技术实现的文件上传
- 使用第三方工具帮助上传,Autoit是用于Windows GUI的自动化测试IDE一个工具,通过它间接实现我们的需求。
- 1、安装在本机,有以下目录:
2、可以用autoit window info获取脚本编写需要的title和controlID
3、打开scite script editor 编辑器,打开autoit window info工具,点击上传的按钮,打开需要捕获的上传文件窗口
4、编写代码:
常用的代码:
- WinActivate(“title”) :使焦点到指定活动窗口
- ControlFocus ( “title”, “窗口文本”, controlID): 设置输入焦点到指定窗口的某个控件上;
- WinWait ( “title” , “窗口文本” , 超时时间 ) :暂停脚本的执行,等待指定时间直至指定窗口;
- ControlSetText ( “title”, “窗口文本”, controlID, “新文本” ): 修改指定控件的文本;
- Sleep ( 延迟 ): 暂停指定时间,单位毫秒;
- ControlClick ( “title”, “窗口文本”, 控件ID , 按钮 , 点击次数 ) 向指定控件发送鼠标点击命令;
- 代码:
WinActivate("打开");
ControlSetText("打开","","Edit1","C:\Users\LGY\PycharmProjects\t1\6.png");
sleep(2000);
ControlClick("打开","","Button1");
简单使用
ControlFocus("打开","","Edit1") ;也可以替换WinActivate("打开");
代码参数来源分析:首先先鼠标左键点击finder tool,按住不动移动到指定的识别控件上,即可查看对应控件的信息
5、代码编写,完成保存脚本:
6、打开工具:
7、把*.au3文件转为exe文件
8、验证:点击上传的按钮,弹出对话框,直接双击运行刚刚生成的exe文件,则完成自动上传的步骤
9、在代码中使用:主要用到了python的os命令
import time
from selenium import webdriver
import os
driver = webdriver.Chrome()
driver.get(r"C:\Users\LGY\PycharmProjects\t1\123.html")
driver.find_element_by_id("file").click()
time.sleep(3)
os.system(os.getcwd()+os.path.sep+"123.exe")
time.sleep(3)
driver.quit()
10、文件中123.exe上传文件动态化
脚本修改为:
WinActivate("打开");
ControlSetText("打开","","Edit1",$CmdLine[1]);
sleep(2000);
ControlClick("打开","打开","Button1");
$CmdLine命令解析
$CmdLine[0]:命令行参数的总数
$CmdLine[1] :获取命令行的第一个参数
$CmdLine[2] :获取命令行的第二个参数
$CmdLineRaw :获取所有参数,为一个字符串
重新生成新的exe文件,python代码修改:
import time
from selenium import webdriver
import os
driver = webdriver.Chrome()
driver.get(r"C:\Users\LGY\PycharmProjects\t1\123.html")
driver.find_element_by_id("file").click()
time.sleep(3)
file_name = os.getcwd()+os.path.sep+"6.png"
os.system(os.getcwd()+os.path.sep+"123.exe"+" "+file_name)
time.sleep(3)
driver.quit()