多文件上传
背景:
从本地文件夹选择文件上传,上传标签为input类
说明:
直接选择采用send_keys()方法上传,过程中遇到了一些坑
尝试一:
基类封装方法
def input_text(self, text, *loc): """ 向输入框中输入内容 :param text: 输入内容 :param loc: 定位器 :return: """ input_ele = self.driver.find_element(*loc) input_ele.send_keys(text)
页面封装方法:
def get_allFiles(self, type_num): """ 获取本地文件列表 :param type_num: 选择上传的资源类型 :return: 本地文件路径 """ file_list = [] if type_num == 1: path = "D:/自动化文件/图片" elif type_num == 2: path = u"D:/自动化文件/音视频" elif type_num == 3: path = u"D:/自动化文件/文档" dirs = os.listdir(path) # 返回指定路径下的文件和文件夹列表 for file in dirs: file_name = path+"/"+file file_list.append(file_name) return file_list def uploads(self, filename): """ 选择上传文件 :return: """ print("upload:", filename) self.input_text(filename, *self.add_file)
测试用例:
def test_addFiles(self): """ 测试上传资源 :return: """ sleep(3) sure_rtype = self.rPage.click_resource_type() # 选择要上传的类型 sleep(3) allfiles_list = self.rPage.get_allFiles(sure_rtype) # 获取当前类型下,所有本地文件列表 add_filenum = randint(1, 9) # 上传的文件个数 print("选择个数", add_filenum) num_list = [] # 确定文件列表需上传文件的下标 flag = True while flag: if len(num_list) < add_filenum: rand_num = randint(0, len(allfiles_list)-1) num_list.append(rand_num) flag = True else: flag = False for i in num_list: self.rPage.uploads(allfiles_list[i])
情况1.多文件上传时,采用循环遍历上传方式,上传数据重复,出现:文件1;文件1,文件2;文件1,文件2,文件3...
开始猜测是因为执行速度太快,所以在循环中加入延时,但结果依然没有改变,猜测错误。后来看到一篇文章,说文件后加“\n”可以解决上传多个文件出现重复的问题,重新尝试。
尝试二:
name = "" for i in num_list: sleep(2) name = name + allfiles_list[i] + "\\n" result = name[0:-2] self.rPage.uploads(result)
把所有选择的文件组合成一个字符串直接传入,出现无效参数异常。


开始怀疑是“\\n”出了问题,但是控制台输出结果似乎也没错。
验证开始:直接粘贴了控制台输出的结果,放在上传函数中:
self.rPage.uploads("D:/自动化文件/音视频/飞鸟和蝉 - 任然.mp3\nD:/自动化文件/音视频/谪仙 - 伊格赛听、叶里.mp3")
结果上传成功了。到这我已经完全蒙了,为什么一样的字符串放在变量里不成功,直接写成功了呢?也许某个环节把类型搞错了,
结果改成了这样:
self.rPage.uploads(str(result))
这样:
self.rPage.uploads("""\""""+ result+"""\""")
都不行!!
后来看到这个:https://blog.csdn.net/u012095723/article/details/97774320
input的上传用多行字符串来实现
name = "" for i in num_list: name = name + allfiles_list[i] + "\n" result = name[0:-1]
完美解决。

浙公网安备 33010602011771号