Selenium上传分为input标签和非input标签,分别介绍总结下:
一、input标签
input标签可以直接使用send_keys(文件地址)上传文件
示例:
el = driver.find_element_by_id('fileid')
el.send_keys(r"F:\Python\testcase.txt")
二、 非input标签(如a标签,div标签,button标签等),无法通过selenium解决,面对系统弹出框,需要找到能调用系统api操作。以下介绍使用autoit工具解决。(autoit window Info可以对于windows系统进行页面元素识别定位。
思路是:
a. 识别使用aotoit工具对上传文件弹框的文件名输入框和上传按钮进行定位,取出文件名输入框和上传按钮的classname
b. 打开SciTE Script Editor,根据步骤a取出的classname编写、修改脚本,生成的文件格式为.au3
c. 打开Compile Script to.exe(64)即Auto2Exe v3 将.au3文件转换成.exe文件
d. os.system(r"C:\upfile.exe")【此代码要在打开文件上传弹出框后,目的是让文件上传弹出框为当前窗口】
具体案例:
此上传明显是非input标签,使用autoit具体步骤为:
1. chrome浏览器打开上传文件弹出框
2. 开始菜单-打开autoIt Window Info
3. 拖拽autoIt Window Info中Finder Tool图标至上传文件弹出的文件名输入框和上传按钮
拖到上传按钮后获取的值
4. 打开SciTE Script Editor,编辑脚本(此处是谷歌浏览器)-保存到桌面或者某路径下
5. 使用工具Compile Script to.exe(64)将.au3文件转换为.exe文件
6. 代码中使用
self.find_element(*self.inspection_db_import_loc).click() #打开文件上传弹出框
os.system(r"F:\Python\UITesting\SafeUITesting\test_data\inspection_db_upfile.exe") #使用系统方法导入.exe文件
高级文章推荐(将调用文件方法封装及兼容浏览器):