Python+Seleium+Autolt实现自动化上传多个文件

在上一篇简书中,介绍了利用autolt3让selenium可以实现文件上传,其中,我们将需要上传的那个文件的路径作为一个固定的值写入了autolt3的脚本里面,所以后续用selenium调用autolt3脚本生成的执行文件时,自然是每次只能自动上传那一个文件,在实际的测试中,会有需要测试上传大量或多个文件的场景,或者上传的文件不是每次固定的,这就需要对之前固定的文件名进行参数化去实现,下面将对上一篇的方法进行一些优化。

首先对看一下上篇中写的autolt3脚本:

ControlFocus("文件上传","","Edit1");
WinWait("[CLASS:#32770]","",10);
ControlSetText("文件上传","","Edit1","D:\picture.PNG");
Sleep(2000);
ControlClick("文件上传","","Button1");

需要进行参数化的就是"D:\picture.PND"这个值,autolt3参数化可以用$CmdLine[1]变量来代替,1表示的是第一个参数,只需要在脚本中把路径换成这个变量就好:

ControlFocus("文件上传","","Edit1");
WinWait("[CLASS:#32770]","",10);
ControlSetText("文件上传","","Edit1",$CmdLine[1]);
Sleep(2000);
ControlClick("文件上传","","Button1");

接下来就是在selenium代码里面给这个变量进行赋值并增加循环让自动化脚本可以多次执行这个操作,每次上传不同的文件真正意义上实现批量上传了,有两种变量赋值方式:

第一种是在文件不多的情况下,把要上传的那几个文件名给列出来,放到一个数组集合里,然后依次从这个集合中取值循环,每次上传集合中一个文件:


# coding:utf-8

#要上传的文件
all_png = [“D:\1.png”, “D:\2.png”, “D:\3.png”, “D:\0.png”]

#点开触发文件上传windows选择框的按钮
driver.find_element_by_xpath("//*[@class=‘el-finder-toolbar’]/ul/li[3]").click()

for i in all_png:
upload = driver.find_element_by_xpath("//div[@id=‘picker’]/div[2]/label")
upload.click()
print i
os.system(“C:\Users\admin\Desktop\Autolt3\parameterFirefox.exe %s” %i)
time.sleep(5)

第二种适用于要做大量文件上传,测试前端性能的时候,首先准备好测试文件,一般这种需求需要的测试文件会非常多,会需要自己生成各种不同大小的大量文件,所以可以将文件在生成的时候按一定规则去命名(具体操作方法见我前几篇的博客),当然了文件不是太多了,也可以手动去修改命名,我这边为了方便循环就直接用数字顺序迭代命名了,假设有4个文件,就分别用1、2、3、4命名,定义一个变量,用range()函数循环,就可以批量上传这4个文件啦:


for i in range(3):
    upload = driver.find_element_by_xpath("//div[@id='picker']/div[2]/label")
    upload.click()
    file_path = "D:\\%s.png" %i
    os.system("C:\\Users\zhangchao\Desktop\Autolt3\parameterFirefox.exe %s" %file_path)

以上就是用selenium批量上传文件的执行方法关键代码,需要的小伙伴可以参考一下,如果还有更多的优化可以评论分享一下~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值